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 ...
随机推荐
- ceph 简介
Ceph 存储集群 数据的存储 伸缩性和高可用性 CRUSH 简介 集群运行图 高可用监视器 高可用性认证 智能程序支撑超大规模 动态集群管理 关于存储池 PG 映射到 OSD 计算 PG ID 互联 ...
- mybatis源码阅读-执行一个sql的流程(九)
图解 图片来源:https://my.oschina.net/zudajun/blog/670373 Mapper接口调用原理 我们整合成Spring 直接使用Mapper就能执行对应的sql 表现 ...
- scrapy——中间件UserAgent代理
pip install fake-useragent 使用说明:from fake_useragent import UserAgent# 实例化一个UserAgent对象ua = UserAgent ...
- Build Tools主流是什么?为什么要使用它?
Build Tools 即构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk).构建包括编译.连接跟把代码打包成可用的或可执行的形式. 1.构建工具的作用 ...
- MYSQL常用的性能指标
(1) QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql > show global status like 'Questio ...
- [JavaEE] Testing the Java EE Application : Basic Arquillian integration test
We have model like this: package com.pluralsight.bookstore.model; import javax.persistence.*; import ...
- MyEclipse 9.0 正式版公布新闻 下载
MyEclipse 9.0 正式版公布 新闻 ============================================================================ ...
- HDU 5100 Chessboard 用 k × 1 的矩形覆盖 n × n 的正方形棋盘
pid=5100">点击打开链接 Chessboard Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- LeetCode 160. Intersection of Two Linked Lists (两个链表的交点)
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- 【Eclipse提高开发速度-插件篇】安装VJET插件,JS等提示开发插件
1.安装Apache Batik CSS 一般安装VJET插件会出现 Cannot complete the install because one or more required items co ...