Django用户认证系统
一. 认证系统概要
- 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)
- 第一种:在urls文件中导入
Django用户认证系统的更多相关文章
- django用户认证系统——拓展 User 模型
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- “Django用户认证系统”学习资料收集
首推追梦人物——Django用户认证系统 待续……
- django用户认证系统——重置密码7
当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...
- django用户认证系统——修改密码6
再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...
- django用户认证系统——拓展 User 模型2
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- django用户认证系统——基本设置1
网站提供登录.注册等用户认证功能是一个常见的需求.因此,Django 提供了一套功能完整的.灵活的.易于拓展的用户认证系统:django.contrib.auth.在本教程中,我将向你展示 auth ...
- django用户认证系统——登录4
用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能.和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前处理注册流程那样费劲了.只需几分钟的简单 ...
- D django 用户认证系统
django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALL ...
- Django用户认证系统(二)Web请求中的认证
在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...
- Django用户认证系统(一)User对象
User对象 User对象是认证系统的核心.用户对象通常用来代表网站的用户,并支持例如访问控制.注册用户.关联创建者和内容等.在Django认证框架中只有一个用户类,例如超级用户('superuser ...
随机推荐
- 【12】AngularJS 事件
AngularJS 事件 AngularJS 有自己的 HTML 事件指令. ng-click 指令 ng-click 指令定义了 AngularJS 点击事件. <div ng-app=&qu ...
- HDU 1210
感觉就是乱搞找规律 自己写几组数据 本来开始是想着把 n 个数字每次回到原来位置各需要多少次,然后取它们的最小公倍数就好了 但是数据写着写着发现每一个数回到原来位置次数都是一样的,那么就简单了,直接第 ...
- [USACO1.2]挤牛奶Milking Cows
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...
- Java配置方式读取外部的资源配置文件
通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: package cn.qlq; import org.springframework.context. ...
- Mabatis错误--Parameter index out of range
昨天遇到一个错误,之前也遇到过,但是之前遇到很快就解决了,昨天遇到这个错误当时看了大概10来分钟,还是没搞好,今天才来搞好了. 错误信息如下 08:34:43,302 DEBUG getTeacher ...
- Ubuntu查看系统版本的方法
1. less /etc/issue 2. less /proc/version 3. uname -a 4. lsb_release -a
- RDLC报表总结
这2天纠结的报表基本上已近完成大部分功能.现在总结一下自己近期的学习成果 首先制作微软RDLC报表由以下三部分构成:1.制作自己的DateSet集合(就是报表的数据集):2.制作自己的报表文件.rdl ...
- python元组声明要带逗号
python元组声明要带逗号 t2, t3, t4 = (2), (2,),() print(type(t2),type(t3), type(t4)) #<class 'int'> < ...
- 使用jconsole监控远程JVM
使用jconsole监控远程JVM 学习了:https://www.linuxidc.com/Linux/2015-02/113420.htm https://www.cnblogs.com/thin ...
- jquery-mobile 学习笔记之二(表单创建)
绪上 一.注意事项 1. <form> 元素必须设置 method 和 action 属性 2. 每一个表单元素必须设置唯一的 "id" 属性. 该 id 在网站的页面 ...