我的网站搭建 (第十五天) 用户注册与登录

news/2024/5/13 3:07:16/文章来源:https://blog.csdn.net/weixin_33918357/article/details/91927275

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    这几天正好学了Flask的用户注册登录功能设计,发现与Django的使用特别类似,所以学习Flask的同时也加强了我对Django表单的印象。正好网站搭建也差不多更新到用户操作部分了,就索性把Django表单相关知识再推进一下。其实要加入用户操作功能,也可以直接在模板页面中加上form标签,然后在视图中利用requets.POST.get来接收键值,最后保存在数据库中,所以不是非要使用Django的表单功能才能设计。使用表单是因为表单的确能简化用户在提交用户信息的相关处理,如输入内容不能为空,邮箱必须带有@字符等,这些验证表单的合法性最后都可以交给Django的表单来执行

    因为在Django中,有比较全的用户模块,所以我没有另外去创建models.py来定义用户的模型,这已经在Django中实现了。我只创建了forms.py用来加入表单字段,另外引用了Django自带的User类。用户的注册登录功能可以比较好的涵盖form表单的相关知识点,常用的form字段定义在官方文档都有说明:表格字段

用户注册

    1.我在注册表单中,需要用户名,邮箱,密码等输入

from django import forms  # django表单功能
from django.contrib.auth.models import Userclass RegForm(forms.Form):"""用户注册表单"""# 用户名username = forms.CharField(label='用户名',max_length=30,min_length=3,widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入用户名'}))# 邮箱email = forms.EmailField(label='邮箱',widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': '请输入邮箱'}))# 密码password = forms.CharField(label='密码',min_length=6,widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '请输入密码'}))# 再次输入密码password_again = forms.CharField(label='再输入一次密码',min_length=6,widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '再输入依次密码'}))

    其中包含了一些属性设置,用来规范表单的显示

    2.定义好表单之后,除了表单自动验证的部分外,还需要另外手动添加对字段的验证,如用户名,邮箱是否会与数据库已有的用户重复,还有第二次输入的密码与第一次输入的密码是否一致,以确保用户输入了正确的密码,所以还需在RegForm类中加入一些方法

def clean_username(self):"""清洗输入的用户名:return: 清洗后的用户名"""username = self.cleaned_data['username']if User.objects.filter(username=username).exists():raise forms.ValidationError('用户名已存在')return usernamedef clean_email(self):"""清洗输入的邮箱:return: 清洗后的邮箱"""email = self.cleaned_data['email']if User.objects.filter(email=email).exists():raise forms.ValidationError('邮箱已存在')return emaildef clean_password_again(self):"""清洗第二次输入的密码:return: 输入一致的密码"""password = self.cleaned_data['password']password_again = self.cleaned_data['password_again']if password != password_again:raise forms.ValidationError('两次输入的密码不一致')return password

    其中forms.ValidationError是抛出表单错误的信息

    3.在views.py中添加用户注册的处理,常用的Forms API:Working with forms

from django.shortcuts import redirect, render
from django.contrib import auth  # auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。
from django.urls import reverse    # 反向解析
from django.contrib.auth.models import User
from .forms import LoginForm, RegFormdef register(request):"""用户注册功能相关处理:param request: 请求对象:return: 注册成功返回首页,失败返回注册表单"""if request.method == 'POST':reg_form = RegForm(request.POST)# 判断是否有效# 验证通过if reg_form.is_valid():# 第一种注册方法username = reg_form.cleaned_data['username']email = reg_form.cleaned_data['email']password = reg_form.cleaned_data['password']# 创建用户user = User.objects.create_user(username, email, password)user.save()# 登录用户user = auth.authenticate(username=username, password=password)auth.login(request, user)return redirect(request.GET.get('from', reverse('blog:home')))'''# 第二种注册方法user = User()user.username = usernameuser.email = emailuser.set_password(password)user.save()'''# 验证失败else:# login_form对象会自动创建表单reg_form = RegForm()context = {'reg_form': reg_form}return render(request, 'user/register.html', context)

    4.注册页面如下

<div class="col-xs-11 col-sm-5 col-lg-4 col-sm-offset-4 blog-border side-info"><h4>欢迎注册</h4><form action="" method="POST">{% csrf_token %}{% for field in reg_form %}{# label去冒号 #}<label for="{{ field.id_for_label }}">{{ field.label }}</label>{{ field }}<p class="text-danger">{{ field.errors.as_text }}</p>{% endfor %}{# 错误信息标红 #}<span class="pull-left text-danger">{{ login_form.non_field_errors }}</span>{# <span>用户名:</span> #}{# <input type="text" name="username"> #}{# <span>密码:</span> #}{# <input type="password" name="password"> #}<span style="font-weight: bold;">已有帐号?<a style="color: #337ab7;" href="{% url 'user:login' %}">点击登录</a></span><input class="btn btn-primary pull-right" style="margin-bottom: 0.5em" type="submit" value="注册"></form>{% if user.is_authenticated %}<script type="text/javascript">window.location.href = '/';</script>{% else %}{% endif %}
</div>

    5.最后在urls.py添加

url(r'^register/', views.register, name='register'),

用户登录

    1.与RegForm类似,需要用户名和密码,少了一些验证,只要判断在用户表中是否含有这个用户名

from django import forms  # django表单功能
from django.contrib import auth
from django.contrib.auth.models import Userclass LoginForm(forms.Form):"""用户登录表单"""# 用户名username = forms.CharField(label='用户名',widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入用户名'}))# 密码password = forms.CharField(label='密码',widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '请输入密码'}))def clean(self):"""清洗输入不合格的表单:return: 清洗后的数据"""username = self.cleaned_data['username']password = self.cleaned_data['password']user = auth.authenticate(username=username, password=password)# 判断用户是否存在if user is None:raise forms.ValidationError('用户名或密码不正确')else:self.cleaned_data['user'] = userreturn self.cleaned_data

    2.用户登录的视图处理

from django.shortcuts import redirect, render
from django.contrib import auth  # auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。
from django.urls import reverse    # 反向解析
from .forms import LoginFormdef login(request):"""用户登录逻辑处理:param request::return: 登录视图"""if request.method == 'POST':login_form = LoginForm(request.POST)# 判断是否有效# 验证通过if login_form.is_valid():# cleaned_data是一个字典,包含了字段的信息# 表示清理过或者整理过的数据,比较干净的数据# username = login_form.cleaned_data['username']# password = login_form.cleaned_data['password']# user = auth.authenticate(username=username, password=password)# 判断用户是否存在# if user is not None:user = login_form.cleaned_data['user']auth.login(request, user)# 如果没有获取到源页面就返回到首页referer = request.GET.get('from', reverse('blog:blog'))return redirect(referer)# 验证失败else:# login_form对象会自动创建表单login_form = LoginForm()context = {'login_form': login_form}return render(request, 'user/login.html', context)

    3.创建视图模板

<div class="col-xs-11 col-sm-5 col-lg-4 col-sm-offset-4 blog-border side-info"><h4>用户登录</h4><form action="" method="POST">{% csrf_token %}{% for field in login_form %}<label for="{{ field.id_for_label }}">{{ field.label }}</label>{{ field }}<p class="text-danger">{{ field.errors.as_text }}</p>{% endfor %}{# 错误信息标红 #}<span class="pull-left text-danger">{{ login_form.non_field_errors }}</span>{# <span>用户名:</span> #}{# <input type="text" name="username"> #}{# <span>密码:</span> #}{# <input type="password" name="password"> #}<span style="font-weight: bold;">没有帐号?<a style="color: #337ab7;" href="{% url 'user:register' %}">点击注册</a></span><input class="btn btn-primary pull-right" style="margin-bottom: 0.5em" type="submit" value="登录"></form>{% if user.is_authenticated %}<script type="text/javascript">window.location.href = '/';</script>{% else %}{% endif %}
</div>

    4.在url.py添加

url(r'^login/', views.login, name='login'),

    5.还可以使用如下方法显示用户信息

<p>加入时间:{{ user.date_joined }}</p>
<p>上次登录时间:{{ user.last_login}}</p>

原文出处:https://www.jzfblog.com/detail/105,文章的更新编辑以此链接为准。欢迎关注源站文章!

转载于:https://my.oschina.net/zhenfei/blog/2032411

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

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

相关文章

Html代码seo优化最佳布局实例讲解

2019独角兽企业重金招聘Python工程师标准>>> Html代码seo优化最佳布局实例讲解 搜索引擎对html代码是非常优化的&#xff0c;所以html的优化是做好推广的第一步。一个符合seo规则的代码大体如下界面所示。 1、<!–木庄网络博客–> 这个东西是些页面注释的&am…

大型互联网站解决海量数据的常见策略

文章来源&#xff1a;http://www.javabloger.com/article/big-data-architecture.html 大型互联网站的数据存储与传统存储环境相比不仅是一个服务器、一个数据库那么简单&#xff0c;而是由网络设备、存储设备、应用服务器、公用访问接口、应用程序 等多个部分组成的复杂系统。…

大型网站架构系列:电商网站架构案例(转)

转载地址&#xff1a; http://www.aboutyun.com/thread-17407-1-1.html问题导读&#xff1a;1、电商网站考虑的客户需求有哪些&#xff1f;2、网站架构如何演变的&#xff1f;3、电商架构优化需考虑哪些内容&#xff1f;大型网站架构是一个系列文档&#xff0c;欢迎大家关注。本…

thinkphp5项目--企业单车网站(一)

thinkphp5项目--企业单车网站&#xff08;一&#xff09; 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps://github.com/fry404006308/BicycleEnterpriseWebsite 一、命名空间 二、 模板页面后缀配置 三、 输出替换 使用 四、 视图实例化 1…

免费学编程!10个全球顶尖的编程在线自学网站

编者按&#xff1a;现在会编程的设计师越来越多了&#xff0c;想跟上时代的同学&#xff0c;来看今天推荐的这10个网站&#xff0c;不仅有大量免费的编程语言课程&#xff0c;还有很多实战项目供你练习。更重要的是&#xff0c;它的教学方式都是针对零基础的&#xff0c;很容易…

43.Odoo产品分析 (四) – 工具板块(11) – 网站即时聊天(1)

查看Odoo产品分析系列—-目录 在线聊天可以实现与顾客的在线实时交流&#xff0c;比如在"商店"功能中实现顾客对客服的商品咨询等类似的操作。 安装"网站即时聊天"模块&#xff1a; 1 网站在线客服 点击创建&#xff0c;新建一个客服&#xff0c;该表单对…

通过cookies跳过验证码登陆页面,直接访问网站的其它URL

我每次手动访问去NN网的一家酒店&#xff0c;就不需要登陆&#xff0c;一旦我用脚本打开就会让我登陆&#xff0c;而登陆页面又有验证码&#xff0c;不想识别验证码&#xff0c;所以就想&#xff1a;“通过cookies跳过验证码登陆页面&#xff0c;直接访问网站的其它URL”转载虫…

如何优雅的扒网站——工具篇

在上一篇文章里本人介绍了扒网站的入门知识。可以说是仿站的必备知识。不过&#xff0c;在实战中没必要所有的页面都要全部手动去操作处理&#xff0c;完全可以借助大牛们写好的工具。网上搜索仿站工具或扒站工具能找到一堆&#xff0c;我就不一一介绍了。今天就分为两个部分来…

[CTO札记]SNS蜂巢模型,及其在内容型网站的应用型态

始模型SNS有个典型的Honeycomb模型&#xff0c;将7个要素列举出来&#xff08;如下图&#xff09;。二、模型要素变更窃以为‘状态’要素并不合理&#xff0c;因为太窄。如果将‘状态’替换成更泛化的‘内容/信息’也许更好。三、应用于内容型网站也许大家认为SNS的内容/信息都…

图片素材网站收集

为什么80%的码农都做不了架构师&#xff1f;>>> 昵图网 http://www.nipic.com/index.html 千图网 http://www.58pic.com/ 千库网 http://588ku.com/ 我图网 http://www.ooopic.com/ 转载于:https://my.oschina.net/yjft/blog/1617184

用scrapy抓取网站图片

学习Python&#xff0c;就避免不了爬虫&#xff0c;而Scrapy就是最流行的一个。你可以爬取文字信息&#xff08;如招聘职位信息&#xff0c;网站评论等&#xff09;&#xff0c;也可以爬取图片&#xff0c;比如看到一些好的网站展示了很多精美的图片&#xff08;这里只用作个人…

流量排名前一千万网站,三分之一使用 WordPress

百度智能云 云生态狂欢季 热门云产品1折起>>> WordPress 在官博发文&#xff0c;庆祝它在流量排名前一千万网站中的市场占有率达到了三分之一。据 W3Techs 的数据&#xff0c;WordPress 在前一千万网站的市场份额从一年前的 29.9% 上升到了现在的 33.4%。WordPress …

基于django的个人博客网站建立(一)

基于django的个人博客网站建立&#xff08;一&#xff09; 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页&#xff0c;后来由于换了个系统&#xff0c;感觉弄的有点麻烦也就没有再去管它了&#xff0c;最近偶然从网上找到了几个模板&#xff0c;感…

Google浏览器70把所有HTTP网站标注红色“不安全”

谷歌这几年虽吵着大力推进 HTTPS 的加密普及&#xff0c;此之前还声明呢&#xff0c;但响应支持度效果不太明显&#xff0c;这下新版Chrome 70 做了提升&#xff0c;把所有的HTTP网站都标注红色“不安全”警告! Google用心良苦&#xff0c;从Chrome 56 就开始向HTTP网页列为不安…

免费为网站加上HTTPS

为什么80%的码农都做不了架构师&#xff1f;>>> 前言 最近有好几位同学直接微信赞助说快点更新文章。这个要和大家说声抱歉&#xff0c;的确很久没有写文章了。我们也不找借口&#xff0c;我会尽力保证多写文章。今天我们的主题来讲解 如何给自己的网站 加上HTTPS …

python 第一个网站应用

Hello,第一个网页分析 打开文本编辑器。这里要说一下啦&#xff0c;理论上讲&#xff0c;所有的文本编辑器都可以做为编写程序的工具。前面已经提到的那个python IDE&#xff0c;是一个很好的工具&#xff0c;再有别的也行&#xff0c;比如我就用vim&#xff08;好像我的计算机…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

一步步构建大型网站架构

2019独角兽企业重金招聘Python工程师标准>>> 之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型&#xff0c;我们可以…

息壤网络出现问题,大批网站受灾

很久没有更新自己的博客&#xff0c;今天上去看看&#xff0c;看看不要紧&#xff0c;出了大问题了&#xff01;我的博客是息壤的虚拟主机&#xff0c;放在北京亦庄IDC&#xff0c;网络速度还行。可是所有的php页面都不正常&#xff0c;出现如下提示&#xff1a;CGI/PHP程序错误…

大型网站技术架构(三)--架构模式

作者&#xff1a;13 GitHub&#xff1a;https://github.com/ZHENFENG13 版权声明&#xff1a;本文为原创文章&#xff0c;未经允许不得转载。 此篇已收录至《大型网站技术架构:核心原理与案例分析》读书笔记系列&#xff0c;点击访问该目录获取完整内容。 前言 模式&#xff1a…