9_用户的登录和登出
用户的登录和登出
之前我们已经讲到,项目到现在,我们一共建立了两个app,分别是article
和bloguser
。
登录
1. 配置根路由
打开iblog/urls.py
path('bloguser/', include(('bloguser.urls', 'bloguser'), namespace='bloguser')),
2. 配置子路由
打开bloguser/urls.py
path('user_login/', views.user_login, name='user_login'),
3. 建立表单form
在bloguser中,新建forms.py
bloguser/forms.py
from django import formsclass UserLoginForm(forms.Form):username = forms.CharField(required=True)password = forms.CharField(required=True, min_length=6, max_length=20, error_messages={'required': '密码必须填写','min_length': '密码不能低于6位','max_length': '密码不能超过15位'})
4. 编写Views(视图)
bloguser/views.py
def user_login(request):if request.method == 'POST':user_login_form = UserLoginForm(request.POST)# 判断表单数据是否完整if user_login_form.is_valid():# 获取表单数据data = user_login_form.cleaned_datauser = authenticate(username=data['username'], password=data['password'])if user:# django自带的登录方式,登录信息保存在session中login(request, user)return redirect(reverse('blog:index'))else:context = {'msg': '账号或密码错误'}return render(request, 'login.html', context)else:context = {'msg': '请输入完整的信息'}return render(request, 'login.html', context)else:user_login_form = UserLoginForm()context = {'form': user_login_form}return render(request, 'login.html', context)
一定要先判断是否是POSt请求,还是其他请求,我们这里将请求方式分为两种,POST实现登录,其他的跳转登录页面。
Form表单的主要作用为:
- 生成HTML标签
- 验证数据
- 初始化页面内容
authenticate()
方法验证用户名称和密码是否匹配.(用户必须是AbstractUser和User).login()
是Django自带的登录方式,登录信息存在session
中,关于session后面讲,简单说就是互联网的会话验证信息。
5. 登录页面(templates)
templates/login.html
<div class="card-body"><form method="POST" action="{% url 'bloguser:user_login' %}" class="needs-validation">{% csrf_token %}<div class="form-group"><label for="username">用户名</label><input id="username" type="username" class="form-control" name="username"tabindex="1" required autofocus><div class="invalid-feedback">Please fill in your username</div></div><div class="form-group"><label for="password" class="d-block">密码<div class="float-right"><a href="#">Forgot Password?</a></div></label><input id="password" type="password" class="form-control" name="password"tabindex="2" required><div class="invalid-feedback">please fill in your password</div></div><div class="form-group"><button type="submit" class="btn btn-primary btn-block" tabindex="4">登录</button></div></form></div>
6. 登录接口
templates/index.html
<li class="nav-item"><a class="nav-link" href="{% url 'bloguser:user_login' %}">登录{{ user.username }}</a></li>
运行后程序,打开http://127.0.0.1:8000/bloguser/user_login/
然后输入用户账户和密码,点击登录,就登录成功啦。
这里为了判断是否登录成功,我们可以在登录的地方加一个标识,以后再优化,这里只是做一个标识。即登录成功后,会打印出用户的登录用户名。
用户退出
1. 配置子路由
打开bloguser/urls.py
path('user_logout', views.user_logout, name='user_logout'),
2. 编写Views(视图)
bloguser/views.py
# 退出
def user_logout(request):logout(request)request.session.flush()return redirect(reverse("article:index"))
logout()
和login()
一样,Django自带- 我这里使用
flush()
删了一次session,此处可以不写,无影响。
编写接口(templates)
templates/index.html
<li class="nav-item"><a class="nav-link" href="{% url 'bloguser:user_logout' %}">退出</a></li>
运行程序,进入首页,点击退出,会发现用户名消失,即退出成功
到这里,登录和退出就讲完了。有问题一起交流呀,再说一次,页面需要美化,代码需要优化,这只是为了很直观的说明而做的。
9_用户的登录和登出相关推荐
- 通过session实现用户的登录与登出功能
通过session实现用户的登录与登出功能 本文讲解,就是在常见的登录注册页面中,我们是如何在登录之后,把用户的信息传送到后面的网页. 首先讲解原理,原理是session功能,通过session的在当 ...
- Django搭建个人博客:用户的登录和登出
用户管理 用户数据可以说是大部分网站最重要的资产.用户管理就是对用户数据进行增删改查等操作的功能,自然也就非常的重要了. 本章开始学习用户管理的内容,首先从用户登录开始. 在Django中用app来区 ...
- tp5登出_tp 5框架实现登录,登出及session登录状态检测功能示例
本文实例讲述了tp 5框架实现登录,登出及session登录状态检测功能.共享给大家供大家参考,详细如下: 1,访问http://localhost/tp5/admin.php时,判断有没有登录: 想 ...
- 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)
1. 登录和登出数据库 登录数据库: 输入下面命令: mysql -uroot -p 说明: -u 后面是登录的用户名 [写成-u root也是可以的] -p 后面是登录密码, 如果不填写, 回车之 ...
- 基于Jsoup实现搜狗微信搜索文章获取链接、搜索公众号信息、微信登录以及登出
2020-03-20更新 已上传至GitHub:https://github.com/Aquarius-Seven/demo-jsoup.git,相比CSDN资源,CommonUtil增加了一个处理需 ...
- 前端实现登录、登出、请求数据的一些思路整理
前端实现登录.登出.请求数据的一些思路整理(基于React.JWT技术) 登录.登出和数据请求是两种不同的数据交互方式,是互相独立的. 登录.登出基于 JWT(JSON WEB TOKEN) 技术,通 ...
- 【腾讯云IM】即时通讯的登录,登出,用户列表,私聊,图片发送
uniapp即时通讯 1,初始化(刚开始就紧跟着文档走) 2,App.vue中项目引入腾讯云,(附上账号在其他地方登陆的监听) 3,登录前必需 3.1,获取登录id 3.2,生成userSig,独立封 ...
- cas client 更新ticket_cas sso单点登录系列6_cas单点登录防止登出退出后刷新后退ticket失效报500错...
转(http://blog.csdn.net/ae6623/article/details/9494601) 问题: 我登录了client2,又登录了client3,现在我把client2退出了,在c ...
- 从零开始搭建服务器之登录和登出远程服务器
双 11 期间入手了一台云服务器,备案花了一两个星期,这两天终于备案通过了.于是在个人服务器上装了 Docker 容器用于部署项目,准备尽量把所有的服务都打包成容器,方便统一管理运维. 于是利用 do ...
最新文章
- 怎么在vs2010中使用ActiveX Test Container(转)
- 老程序员的忠告:不要做浮躁的软件工程师
- 使用FastCoder写缓存单例
- 调用方法[manageapp]时发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理
- 【机器学习】机器学习的学习经验总结!
- Xcode LaunchImage 载入界面大小设置
- jQuery实现checkbox的全选反选方法
- 95-240-065-源码-state-托管算子状态
- 【ExtJS】关于alias和xtype
- 【转】Tomcat中部署java web应用程序
- delete响应服务器,rest-RESTful-DELETE响应主体应包含什么
- CSharpGL(53)漫反射辐照度
- 二、循环神经网络(RNN与LSTM)
- Android Glide图片框架的使用
- java ps old gen perm gen_Java 内存模型之堆内存管理
- 微软zone DNS服务器,在DNS服务器上创建DNS zone
- 研华1716板卡的问题
- 中国医学计算机成级别像杂志,中国医学计算机成像杂志
- MAX40026 280ps高速比较器开发资料原理图源代码
- c# 如何把一个1000数字随机分成10个数字 总和1000 加抽奖概率