Django自定义用户认证示例详解,Django用户认证种

作者: 韦德国际1946手机版  发布:2019-06-03

壹. 验证种类概要

一. 认证系统概要

  • create_user 创立用户
  • authenticate 验证登入
  • login 记住用户的报到状态
  • logout 退出登录
  • is_authenticated 决断用户是还是不是登陆
  • login_required 剖断用户是还是不是登入的装饰器

1. 验证系统概要

  • create_user 创立用户
  • authenticate 验证登六
  • login 记住用户的报到状态
  • logout 退出登入
  • is_authenticated 判定用户是不是登入
  • login_required 决断用户是不是登6的装饰器

前言

create_Django自定义用户认证示例详解,Django用户认证种类。user 创立用户

2. 创造用户和注明登陆

  1. 当用户注册的时候用create_user(username,password,email)私下认可情形下is_active=True,is_staff=False,is_superuser=False

    • 底层将password用hash算法加密之后存储到数据库中。
  2. 当用户登入的时候用authenticate(username=username,password=password)表明登6,决断数据库中是不是留存用户输入的账号和密码,重回3个user对象。

    • 底层将password用hash算法加密后和数据库中password举办对照。

2. 创造用户和表明登入

  1. 当用户注册的时候用create_user(username,password,email)暗许情况下is_active=True,is_staff=False,is_superuser=False

    • 底层将password用hash算法加密之后存款和储蓄到数据库中。
  2. 当用户登入的时候用authenticate(username=username,password=password)表达登入,剖断数据库中是或不是留存用户输入的账号和密码,再次来到2个user对象。

    • 底层将password用hash算法加密后和数据库中password进行对照。

Django附带的验证对于绝大大多左近景色来说早已丰裕了,不过什么在 Django 中运用自定义的数据表举办用户认证,有一种较为笨蛋的主意正是自定义好数据表后,使用OnetoOne来跟 Django 的表展开关联,类似于如此:

authenticate 验证登入

三. 记住用户的报到景况

当用户登6的时候用login(request,user)来记住用户的登陆状态,私下认可将用户的id存款和储蓄在session中。

  • login有八个参数二个是request,一个是user,user的来源必须是authenticate返回的。也就是说用login事先必须先调用authenticate

三. 记住用户的报到状态

当用户登入的时候用login(request,user)来记住用户的记名状态,暗许将用户的id存款和储蓄在session中。

  • login有多个参数贰个是request,贰个是user,user的来源必须是authenticate返回的。也正是说用login事先务必先调用authenticate
from django.contrib.auth.models import User
class UserProfile(models.Model):
 """
 用户账号表
 """
 user = models.OneToOneField(User)
 name = models.CharField(max_length=32)
 def __str__(self):
  return self.name
 class Meta:
  verbose_name_plural = verbose_name = "用户账号"
  ordering = ['id']

login 记住用户的登陆状态

肆. 退出登入

当用户注销的时候用logout(request),只须要一个参数request。

四. 退出登陆

当用户注销的时候用logout(request),只必要1个参数request。

这么做即使能够回顾、飞速的达成,不过有三个难题就是大家在和煦的表中创制3个用户就亟须再跟 admin 中的3个用户进行关联,那差十分少是不得以忍受的。

logout 退出登入

5. 判别用户是不是登入

  1. 在后台的视图函数里能够用request.user.is_authenticated()看清用户是不是登6
  2. 在前者页面中得以用{% if user.is_authenticated %}{% endif %}看清用户是或不是登入

5. 决断用户是还是不是登入

  1. 在后台的视图函数里能够用request.user.is_authenticated()决断用户是还是不是登6
  2. 在前者页面中得以用{% if user.is_authenticated %}{% endif %}剖断用户是或不是登入

admin替代暗许User model

is_authenticated 决断用户是还是不是登入

陆. 装饰器决断用户是不是登陆

  1. 依照普通的视图函数能够使用@login_required来装点,可是依靠类视图的get和post方法不能够一向选择@login_required来装饰。
  2. 基于类视图的装潢有以下两种:

    • 首先种:在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)
      
    • 其两种:自定义2个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)
      

6. 装饰器判定用户是或不是登入

  1. 听说普通的视图函数能够运用@login_required来装饰,不过依据类视图的get和post方法不能够一直利用@login_required来装饰。
  2. 依附类视图的点缀有以下二种:

    • 首先种:在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)
      

写大家自定义的 models 类来创制用户数据表来替代私下认可的User model,而不与django admin的进展关联,相关的法定文书档案在此地

login_required 推断用户是还是不是登入的装饰器

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:Django自定义用户认证示例详解,Django用户认证种

关键词: 日记本 韦德国际