基于Django用户认证系统详解

 更新时间:2018年02月21日 20:10:11   作者:Blog的猿序程个一  
下面小编就为大家分享一篇基于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)

以上这篇基于Django用户认证系统详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python中np.where()的使用方式

    Python中np.where()的使用方式

    这篇文章主要介绍了Python中np.where()的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python实现的选择排序算法示例

    Python实现的选择排序算法示例

    这篇文章主要介绍了Python实现的选择排序算法,结合实例形式分析了Python选择排序的概念、原理及简单实现技巧,需要的朋友可以参考下
    2017-11-11
  • tensorflow的ckpt及pb模型持久化方式及转化详解

    tensorflow的ckpt及pb模型持久化方式及转化详解

    今天小编就为大家分享一篇tensorflow的ckpt及pb模型持久化方式及转化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 使paramiko库执行命令时在给定的时间强制退出功能的实现

    使paramiko库执行命令时在给定的时间强制退出功能的实现

    这篇文章主要介绍了使paramiko库执行命令时,在给定的时间强制退出,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 基于Python实现简单排行榜功能

    基于Python实现简单排行榜功能

    排行榜是一种常见的功能,它可以用于展示和比较数据的排名或分数,本文将详细介绍如何使用Python实现排行榜功能,感兴趣的小伙伴可以了解一下
    2024-02-02
  • Django admin组件的使用

    Django admin组件的使用

    这篇文章主要介绍了Django admin组件的使用,帮助大家更好的理解和学习Django框架,感兴趣的朋友可以了解下
    2020-10-10
  • python抖音表白程序源代码

    python抖音表白程序源代码

    这篇文章主要为大家详细介绍了python抖音表白程序源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python爬虫JSON及JSONPath运行原理详解

    Python爬虫JSON及JSONPath运行原理详解

    这篇文章主要介绍了Python爬虫JSON及JSONPath运行原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Django记录操作日志与LogEntry的使用详解

    Django记录操作日志与LogEntry的使用详解

    我们既知道如何记录变更日志,也知道如何获取变更日志,那么如何才能够在admin后台方便地查看操作日志呢?这篇文章主要给大家介绍了关于Django记录操作日志与LogEntry使用的相关资料,需要的朋友可以参考下
    2022-01-01
  • pycharm安装和首次使用教程

    pycharm安装和首次使用教程

    这篇文章主要为大家详细介绍了PyCharm安装使用教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论