基于Django用户认证系统详解
作者:Blog的猿序程个一 时间:2023-04-13 15:35:13
一. 认证系统概要
create_user 创建用户
authenticate 验证登录
login 记住用户的登录状态
logout 退出登录
is_authenticated 判断用户是否登录
login_required 判断用户是否登录的装饰器
二. 创建用户和验证登录
当用户注册的时候用create_user(username,password,email)默认情况下is_active=True,is_staff=False,is_superuser=False。
底层将password用hash算法加密之后存储到数据库中。
当用户登录的时候用authenticate(username=username,password=password)验证登录,判断数据库中是否存在用户输入的账号和密码,返回一个user对象。
底层将password用hash算法加密后和数据库中password进行对比。
三. 记住用户的登录状态
当用户登录的时候用login(request,user)来记住用户的登录状态,默认将用户的id存储在session中。
login有两个参数一个是request,一个是user,user的来源必须是authenticate返回的。也就是说用login之前必须先调用authenticate。
四. 退出登录
当用户注销的时候用logout(request),只需要一个参数request。
五. 判断用户是否登录
在后台的视图函数里可以用request.user.is_authenticated()判断用户是否登录
在前端页面中可以用{% if user.is_authenticated %}{% endif %}判断用户是否登录
六. 装饰器判断用户是否登录
基于普通的视图函数可以使用@login_required来装饰,但是基于类视图的get和post方法不能直接使用@login_required来装饰。
基于类视图的装饰有以下三种:
第一种:在urls文件中导入login_requtred,直接装饰as_view()函数
url(r'^$', login_required(UserInfoView.as_view()), name='user')
第二种:自定义一个LoginRequiredView类继承View类,重写as_view()函数,并装饰as_view()函数的返回值。 我们自定义的视图类就不需要再继承View类,直接继承LoginRequiredView类就好了。
class LoginRequiredView(View):
@classmethod
def as_view(cls, **initkwargs):
# 调用View类中as_view方法
view = super(LoginRequiredView, cls).as_view(**initkwargs)
# 调用login_required装饰器
return login_required(view)
第三种:自定义一个LoginRequiredMixin类,重写as_view()函数,调用View中的as_view()函数,并装饰as_view()函数的返回值。 我们自定义的视图类需要先继承LoginRequiredMixin类再继承View类。这种方式的关键点在于:多继承中super()的调用顺序和__mro__的顺序是一样的。
class LoginRequiredMixin(object):
@classmethod
def as_view(cls, **initkwargs):
# 调用View类中as_view方法
view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
# 调用login_required装饰器
return login_required(view)
来源:https://www.cnblogs.com/RomanticLife/archive/2018/02/21/8456940.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
JS添加删除一组文本框并对输入信息加以验证判断其正确性
python进阶教程之函数对象(函数也是对象)
在Heroku云平台上部署Python的Django框架的教程
浅谈ASP自动采集程序及入库
python 统计list中各个元素出现的次数的几种方法
MySQL Order By用法
Python 机器学习库 NumPy入门教程
linux实现定时备份mysql数据库的简单方法
python数据类型_元组、字典常用操作方法(介绍)
基于Python matplotlib库绘制箱线图
![](https://img.aspxhome.com/file/2023/4/109444_0s.png)
python实现每天自动签到领积分的示例代码
![](https://img.aspxhome.com/file/2023/2/90872_0s.png)
Python迭代器和生成器定义与用法示例
Python打包成exe文件的详细操作指南
![](https://img.aspxhome.com/file/2023/3/107873_0s.png)
Mootools 1.2教程(18)——Class 类(第一部分)
在Python中操作列表之list.extend()方法的使用
给大家整理了19个pythonic的编程习惯(小结)
登录EasyConnect后无法通过jdbc访问服务器数据库问题的解决方法
![](https://img.aspxhome.com/file/2023/1/83131_0s.png)