基于django的视频点播网站开发-step3-注册登录功能

news/2024/5/20 12:28:35/文章来源:https://blog.csdn.net/weixin_34283445/article/details/92180260

用户注册登录是一个网站的基本功能,django对这部分进行了很好的封装,我们只需要在django的基础上做些简单的修改就可以达到我们想要的效果。在本讲中,我们会用到user中的用户授权方面的一些函数,还会对django中的user进行扩展,以及django中的form验证。

效果展示

注册页面
基于django的视频点播网站开发-step3-注册登录功能

登录页面
基于django的视频点播网站开发-step3-注册登录功能

创建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
  • email
  • 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 modelsclass 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 viewsapp_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 = Userfields = ('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_logoutdef 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_logoutdef logout(request):auth_logout(request)return redirect('home')

退出功能,仅需要一行代码 auth_logout(request) 就ok了。

转载于:https://blog.51cto.com/8070900/2351289

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_823952.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘全球最大网站Facebook背后的那些软件

Facebook级别规模的挑战   在我们深入细节之前&#xff0c;先了解一组Facebook不得不面对数据&#xff0c;你就可以想象这种规模。 Facebook每月的PV量&#xff1a;630,000,000,000 &#xff08;6千3百亿&#xff09;Facebook上的图片数量超过其他图片网站的总和&#xff08…

使用VS2012开发的网站或者webservice在IIS6.0上发布的注意事项

由于新版的VS2012的出现&#xff0c;很多人转而使用VS2012作为开发工具&#xff0c;微软每次新的版本都会新增一些功能&#xff0c;带给我们不少的惊喜&#xff0c;但是在VS2012或者VS2010下开发的网站或者webservice在部署时要注意了&#xff0c;由于VS2010以上版本的.net fra…

网站导航颜色停留_【设计师必看】提高网站易访问性的5个UI设计技巧

以下内容由摹客团队翻译整理&#xff0c;仅供学习交流。生活中难免会有这样的场景&#xff0c;例如打电话告诉别人你开会快要迟到了。这听起来是一个很简单的操作&#xff0c;对吗? 我也这么认为。但随即我又思考到另外一个问题&#xff0c;当手中有一堆重物时又该如何进行操作…

最简单的小说网站的部署

1.首先准备&#xff1a; 一个公网ip&#xff0c;一台云服务器 2.用ssh连接云服务器 3.rm -rf /etc/yum.repos.d/*.repo 清除损坏的repo包 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo 下载华为的yum yum cl…

网站文件放在linux的哪个目录中,linux 的命令放在哪个目录下

满意答案yuemeiren682017.05.16采纳率&#xff1a;59% 等级&#xff1a;12已帮助&#xff1a;10073人cd的基本语法是:cd[选项][参数]选项&#xff1a;-P,如果目录是符号链接&#xff0c;则进入实际的目录&#xff1b;-L&#xff0c;如果目录是符号链接&#xff0c;则进行链接…

刚新建好的动态网站项目,创建jsp页面就报错

拿到刚刚可以运行的Eclipse&#xff0c;就马上想敲码了&#xff0c;但一创建项目之后再创建jsp页面就报错 &#xff01; 报错的内容大概为缺乏对应的jar包。我们常用Tomcat为中间体&#xff0c;而他本身是带有开发jsp网站的对应的jar包&#xff0c;检查在创建的时候是否有在Ecl…

想学网站建设与设计的书籍_楚雄网站建设_做网站_网站设计

介绍一诺建站公司成立于2006年&#xff0c;主要提供楚雄网络基础服务和网络推广服务。服务项目包含&#xff1a;楚雄网站建设&#xff0c;手机网站建设&#xff0c;楚雄网站制作&#xff0c;楚雄网站优化&#xff0c;楚雄网站改版&#xff0c;网站SEO优化推广等网络相关服务。我…

页面加载多久算超时_打开一个网站,花几秒钟算正常?

全文共4167字&#xff0c;预计学习时长11分钟图源&#xff1a;turnkeyInternet查询谷歌会发现很多文章指出2到5秒钟网页就能加载完毕。但是&#xff0c;是什么使2-5秒成为预设范围呢&#xff1f;直觉告诉你&#xff0c;答案必定比这更复杂。没错&#xff0c;真正的答案比任何试…

网站正在建设中_网站建设中更有利SEO优化的细节

点击蓝字获取更多优惠信息我们现在日常在网络上所花费的时间超出三分之一&#xff0c;甚至更高。在信息化成型的时代&#xff0c;如果在信息市场中不掉队呢&#xff1f;企业推广外宣的途径和方式有了许多选择&#xff0c;企业网站建设、小程序应用、各网络平台推送&#xff0c;…

C# WPF Image如何利用IsMouseOver变成不同的图片

参考代码&#xff1a; <Image Cursor"Hand" x:Name"testImage" Height"200" Width"200" Stretch"Uniform" MouseEnter"Image_MouseEnter" MouseLeave"Image_MouseLeave"><Image.Style>&l…

wos 文献被引_有哪些免费查找、下载文献的网站?(内含SCI-hub最新地址)

各位小伙伴&#xff0c;好久没有送福利给大家了&#xff0c;今天又要送给大家一份免费课程了&#xff01;&#xff0c;有没有开始激动了&#xff1f;科研文献浩如烟海&#xff0c;如何才能找到对自己有重要参考意义的文献&#xff0c;是每个科研工作者都必须要面对的课题&#…

飞鱼星路由器如何限制外网访问服务器网站,飞鱼星路由器如何限制禁止指定IP上网...

你知道飞鱼星路由器如何限制禁止指定IP上网吗?下面是学习啦小编整理的一些关于飞鱼星路由器如何限制禁止指定IP上网的相关资料&#xff0c;供你参考。飞鱼星路由器限制禁止指定IP上网的方法&#xff1a;如何设置让有的电脑能上网而有的电脑不能上网&#xff0c;这个是一个常见…

vue cli中使用预渲染技术解决SEO对SPA不友好问题

单页面应用(SPA)对于SEO不友好的问题可以通过预渲染(Prerender)和服务端渲染(SSR)技术解决 本文主要记录预渲染技术在vue cli构建的项目中的使用 用到插件prerender-spa-plugin、vue-meta-info 内容1. 引入依赖 prerender-spa-plugin2. vue.config.js配置3. 在main.js 添加监听…

allegro如何导入中文丝印_SEO优化中导入链接的相关知识

什么是导入链接&#xff1f;导入链接&#xff08;Inbound Link)即指向你的网站的其他网站的URL。搜索引擎认为&#xff0c;如果你的网站有价值&#xff0c;其他网站会提到你的网站&#xff1b;被提到的次数越多&#xff0c;就说明网站的价值越高。将导入链接纳入排名重要指标的…

vue+springboot 制作属于自己的个人网站 ① vue前端部署

一、准备工作 1.1 下载node vue ① 下载 node node.js下载地址&#xff1a;建议下载稳定版Node.jshttps://nodejs.org/zh-cn/ ② 下载vue 在控制台输入如下指令 npm install -g vue/cli 1.2 租用xx云服务器&#xff0c;这里以阿里云服务器为例 建议百度 阿里云/华为云/百…

vue+springboot 制作属于自己的个人网站 ② spring boot后端部署

一、阿里云服务器安装MySQL ① 阿里云服务器操作系统查看&#xff1a; ② 推荐安装流程 阿里云服务器 linux系统安装mysql8.0.20&#xff0c;超详细步骤_长腿欧巴~的博客-CSDN博客 其中需要注意的是 &#xff08;1&#xff09;强力卸载之前安装mysql的命令&#xff1a; yum …

树展示 移动端_百度移动端开始用网站品牌名代替网址显示

最近&#xff0c;有站长发现&#xff0c;百度移动端最近做了部分改版&#xff1a;移动端部分网站域名开始逐渐被网站相关名称代替&#xff0c;PC端还是用域名展示&#xff0c;卢松松博客网站域名也被替换成网站品牌名显示!百度移动端用网站相关名称代替网址显示这波改版细节。简…

nginx部署网站

nginx部署网站源码编译的nginxyum安装的nginx源码编译的nginx cd /usr/local/nginx/html # 源码编译默认位置把里面所有文件删掉或是只删掉index.html 不想删掉也可以更改文件名 # 任选其一 rm -rf * rm -rf index.html mv index.html 111 # 111 为你要改成的名字接下来就可…

spark网站日志分析实例

文章目录网站日志分析实例日志过滤日志分析网站日志分析实例 日志是非结构化数据&#xff0c;做分析需要先将日志文件做数据清洗。将数据清洗为结构化数据&#xff0c;入库分析。 另外&#xff0c;还有考虑数据的管理&#xff0c;譬如日志数据增量更新等等。针对数据量大&…

网址添加html 301,通过修改.htaccess批量实现网站内页301重定向跳转 | 甄选网

网站死链有时候是不可避免的&#xff0c;网站栏目页或者文章内页因为某些原因调整了路径&#xff0c;如果想保留之前的链接就需要做301跳转。网站首页的301重定向容易做&#xff0c;不过内页的301就相对复杂一些&#xff0c;通过修改.htaccess文件可以轻松完成这项工作。htacce…