用户的登录和登出

之前我们已经讲到,项目到现在,我们一共建立了两个app,分别是articlebloguser

登录

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_用户的登录和登出相关推荐

  1. 通过session实现用户的登录与登出功能

    通过session实现用户的登录与登出功能 本文讲解,就是在常见的登录注册页面中,我们是如何在登录之后,把用户的信息传送到后面的网页. 首先讲解原理,原理是session功能,通过session的在当 ...

  2. Django搭建个人博客:用户的登录和登出

    用户管理 用户数据可以说是大部分网站最重要的资产.用户管理就是对用户数据进行增删改查等操作的功能,自然也就非常的重要了. 本章开始学习用户管理的内容,首先从用户登录开始. 在Django中用app来区 ...

  3. tp5登出_tp 5框架实现登录,登出及session登录状态检测功能示例

    本文实例讲述了tp 5框架实现登录,登出及session登录状态检测功能.共享给大家供大家参考,详细如下: 1,访问http://localhost/tp5/admin.php时,判断有没有登录: 想 ...

  4. 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)

    1. 登录和登出数据库 登录数据库: 输入下面命令: mysql -uroot -p 说明: -u 后面是登录的用户名  [写成-u root也是可以的] -p 后面是登录密码, 如果不填写, 回车之 ...

  5. 基于Jsoup实现搜狗微信搜索文章获取链接、搜索公众号信息、微信登录以及登出

    2020-03-20更新 已上传至GitHub:https://github.com/Aquarius-Seven/demo-jsoup.git,相比CSDN资源,CommonUtil增加了一个处理需 ...

  6. 前端实现登录、登出、请求数据的一些思路整理

    前端实现登录.登出.请求数据的一些思路整理(基于React.JWT技术) 登录.登出和数据请求是两种不同的数据交互方式,是互相独立的. 登录.登出基于 JWT(JSON WEB TOKEN) 技术,通 ...

  7. 【腾讯云IM】即时通讯的登录,登出,用户列表,私聊,图片发送

    uniapp即时通讯 1,初始化(刚开始就紧跟着文档走) 2,App.vue中项目引入腾讯云,(附上账号在其他地方登陆的监听) 3,登录前必需 3.1,获取登录id 3.2,生成userSig,独立封 ...

  8. cas client 更新ticket_cas sso单点登录系列6_cas单点登录防止登出退出后刷新后退ticket失效报500错...

    转(http://blog.csdn.net/ae6623/article/details/9494601) 问题: 我登录了client2,又登录了client3,现在我把client2退出了,在c ...

  9. 从零开始搭建服务器之登录和登出远程服务器

    双 11 期间入手了一台云服务器,备案花了一两个星期,这两天终于备案通过了.于是在个人服务器上装了 Docker 容器用于部署项目,准备尽量把所有的服务都打包成容器,方便统一管理运维. 于是利用 do ...

最新文章

  1. 怎么在vs2010中使用ActiveX Test Container(转)
  2. 老程序员的忠告:不要做浮躁的软件工程师
  3. 使用FastCoder写缓存单例
  4. 调用方法[manageapp]时发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理
  5. 【机器学习】机器学习的学习经验总结!
  6. Xcode LaunchImage 载入界面大小设置
  7. jQuery实现checkbox的全选反选方法
  8. 95-240-065-源码-state-托管算子状态
  9. 【ExtJS】关于alias和xtype
  10. 【转】Tomcat中部署java web应用程序
  11. delete响应服务器,rest-RESTful-DELETE响应主体应包含什么
  12. CSharpGL(53)漫反射辐照度
  13. 二、循环神经网络(RNN与LSTM)
  14. Android Glide图片框架的使用
  15. java ps old gen perm gen_Java 内存模型之堆内存管理
  16. 微软zone DNS服务器,在DNS服务器上创建DNS zone
  17. 研华1716板卡的问题
  18. 中国医学计算机成级别像杂志,中国医学计算机成像杂志
  19. MAX40026 280ps高速比较器开发资料原理图源代码
  20. c# 如何把一个1000数字随机分成10个数字 总和1000 加抽奖概率

热门文章

  1. 自由能计算专题3:gromacs计算自由能的7种方法案例
  2. 语法分析器(c++)
  3. PPP概念股一览 PPP概念股盈利预测
  4. Mahout学习总结
  5. MATLAB——直方图操作
  6. 【nodejs】mocha+chai+nyc基础
  7. 7种常见的APPUI界面设计布局风格欣赏
  8. Resharper简介
  9. html vertical-align:middle垂直居中 的方法
  10. js jquery 获取元素(父节点,子节点,兄弟节点),元素筛选