基于django的视频点播网站开发-step3-注册登录功能
用户注册登录是一个网站的基本功能,django对这部分进行了很好的封装,我们只需要在django的基础上做些简单的修改就可以达到我们想要的效果。在本讲中,我们会用到user中的用户授权方面的一些函数,还会对django中的user进行扩展,以及django中的form验证。
效果展示
注册页面
登录页面
创建users应用
django的设计哲学是,一个应用只提供一种功能,比如users应用只提供用户相关功能,comment应用只提供评论相关功能,这能提高代码的重复利用率。
在django中,只需要下面一条命令,即可建立users应用
python3 manage.py startapp users
建表
我们需要一个用户表,用来实现登录注册功能,虽然django已经自带来用户登录注册功能,也有相应的表,但是不符合中国人习惯,需要我们对user模型进行自定义。实现自定义User模型最简单的方式就是继承AbstractBaseUser,AbstractBaseUser实现了User的核心功能,我们只需加一些额外的字段进行补充即可。
User模型原有的字段有:
- username
- password
- last_login
- is_superuser
- first_name
- last_name
- is_staff
- is_active
- date_joined
这些都是最基本的字段,并不能满足我们的需求。
根据网站自身业务,我们又添加了下面的字段
- nickname(昵称)
- avatar(头像)
- mobile(手机号)
- gender(性别)
- subscribe(是否订阅)
我们只需在users/models.py中写入代码
from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): GENDER_CHOICES = ( ('M', '男'), ('F', '女'), ) nickname = models.CharField(blank=True, null=True, max_length=20) avatar = models.FileField(upload_to='avatar/') mobile = models.CharField(blank=True, null=True, max_length=13) gender = models.CharField(max_length=1, choices=GENDER_CHOICES,blank=True, null=True) subscribe = models.BooleanField(default=False) class Meta: db_table = "v_user"
gender是性别字段,其中用到了choices=GENDER_CHOICES。这种方式常常用在下拉框或单多选框,例如 M对应男 F对应女。
url配置
在user文件夹下面,新建url.py文件,写入登录、注册和退出的url信息。app_name是命名空间,我们命名为'users'。
from django.urls import path from . import views app_name = 'users' urlpatterns = [ path('login/', views.login, name='login'), path('signup/', views.signup, name='signup'), path('logout/', views.logout, name='logout'), ]
url路由配置好了,我们下面就开始写视图函数代码了
注册函数
我们先来写注册函数,写注册,当然得有注册表单了,幸运的是,在django中,可以用代码来生成表单。我们只需在users下新建forms.py文件,然后写入注册表单的代码。
class SignUpForm(UserCreationForm): username = forms.CharField(min_length=4,max_length=30, error_messages={ 'min_length': '用户名不少于4个字符', 'max_length': '用户名不能多于30个字符', 'required': '用户名不能为空', }, widget=forms.TextInput(attrs={'placeholder': '请输入用户名'})) password1 = forms.CharField(min_length=8, max_length=30, error_messages={ 'min_length': '密码不少于8个字符', 'max_length': '密码不能多于30个字符', 'required': '密码不能为空', }, widget=forms.PasswordInput(attrs={'placeholder': '请输入密码'})) password2 = forms.CharField(min_length=8,max_length=30, error_messages={ 'min_length': '密码不少于8个字符', 'max_length': '密码不能多于30个字符', 'required': '密码不能为空', }, widget=forms.PasswordInput(attrs={'placeholder': '请确认密码'})) class Meta: model = User fields = ('username', 'password1', 'password2',) error_messages = {'password_mismatch': '两次密码不一致', }
我们的表单一共有三个字段:username、password1、password2,它们都是CharField类型,widget分别是TextInput和PasswordInput。而且django是自带验证的,只需要我们配置好error_messages字典,当form验证的时候,就会显示我们自定义的错误信息。
有了注册表单后,就可以在前端模板和视图函数中使用它。
下面是注册视图函数。
... from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout def signup(request): if request.method == 'POST': form = SignUpForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get('username') raw_password1 = form.cleaned_data.get('password1') user = authenticate(username=username, password=raw_password1) auth_login(request, user) return redirect('home') else: print(form.errors) else: form = SignUpForm() return render(request, 'registration/signup.html', {'form': form})
在signup函数中,我们通过form = SignUpForm初始化一个表单,并在render函数中传递给模板。
注册模板文件写在了templates/registration/signup.html
关键代码是
<form class="ui large form" novalidate method="post" action="{% url 'users:signup' %}" enctype="multipart/form-data" > {% csrf_token %} <div class="ui stacked segment"> <div class="field"> {{form.username}} </div> <div class="field"> {{form.password1}} </div> <div class="field"> {{form.password2}} </div> <button class="ui submit button" type="submit">注册</button> </div> {% include "base/form_errors.html" %} </form>
form的action为
{% url 'users:signup' %}
即在url.py中定义的signup函数。
通过post请求传递给signup,在signup中,通过如下四行代码来实现注册,并自动登录的。
username = form.cleaned_data.get('username') raw_password1 = form.cleaned_data.get('password1') user = authenticate(username=username, password=raw_password1) auth_login(request, user)
登录函数
登录函数与注册函数的模式是一样的,都是先写form,写模板,最后写视图函数。
由于form和模板的代码和注册功能类似,这里就不贴了,大家可以上github查看。
重点讲一下login视图函数
def login(request): if request.method == 'POST': next = request.POST.get('next', '/') form = UserLoginForm(request=request, data=request.POST) if form.is_valid(): username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) if user is not None: auth_login(request, user) return redirect(next) else: print(form.errors) else: next = request.GET.get('next', '/') form = UserLoginForm() print(next) return render(request, 'registration/login.html', {'form': form, 'next':next})
在login函数中,我们多了一个next变量,next对应的是登录后要跳转的url,其实这是一种场景,假如你在购物网站买东西,最后付款的时候,会跳转到付款页,假如你没有登录,网站会提示你登录,登录后,会再次跳转到付款页。
当然了,跳转到登录页的时候,需要你在url后追加next参数,如 aaa. com/login/?next=bbb. com
这样用户登录后就会跳到bbb. com
退出函数
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout def logout(request): auth_logout(request) return redirect('home')
退出功能,仅需要一行代码 auth_logout(request) 就ok了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于django的视频点播网站开发-step2-搭建环境
本讲中,带领大家搭建开发环境。我们会依次安装python、pip、django、mysql和其他的一些必要类库。 安装python 安装 Python 非常简单,去 Python 官方网站 找到 Python3 的下载地址,根据你的系统选择32位或者64位的安装包,下载好后双击安装即可。 安装完毕后,在命令行输入 python -v ,如果输出了 Python 的版本号,说明 Python 已安装成功。 $ python3 -V Python 3.7.0 安装pip 如果已经安装了python3, 那么pip3会自动的被安装。 安装django 安装django非常简单,一条命令搞定。 pip3 install django 安装mysql 由于该项目使用的是mysql数据库,所以需要安装mysql。 如果你使用的是Windows或macOS系统,那么可以去 MySQL官网 直接下载安装包,一步步安装即可(笔者安装的是MySQL 5.7)。安装过程中会提示创建输账号和密码,一定要记得创建哦~。 如果你使用的是Ubuntu系统,可以使用apt-get命令安装 sudo apt-get i...
- 下一篇
基于django的视频点播网站开发-step4-首页功能
在本讲中,我们开始首页功能的开发,在开发过程中,大家将会学习到Django中的通用视图类、分页对象paginator以及foreignKey外键的使用。 效果演示 整体功能 大家可先通过 网站演示地址 浏览一下首页的效果。我们首页呢,比较简洁大方,让人一目了然。我这样设计的目的呢,是让大家把精力放到学习django上面来,不必过度关注花哨的页面效果。 我们把首页拆解为4个小的业务模块来开发,分别是:列表显示、分页功能、搜索功能、分类功能。下面我们分别对这四个功能模块进行开发讲解。 开发思路 开发一个功能的基本思路是:先新建应用,然后分析功能涉及到哪些业务,从而分析出需要的数据库字段,然后编写模型,之后就是展示阶段,通过url路由配置视图函数,来将模型里面的数据显示出来。 ok,我们通过命令建立应用,命名为video。执行后,django将为我们新建video文件夹。 python3 manage.py startapp video 下面的功能模块开发都在该应用(video)下进行。 建模型 此处,我们需要建立两个模型,分别是分类表(classification)和视频表(video)。...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19