Django自带用户验证框架

一  分析源码 User

 

Django的标准库存放在 django.contrib 包中。每个子包都是一个独立的附加功能包。

这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包,其中django.contrib.auth 为Django的用户验证框架

1.  导入方法

from django.contrib.auth.models import User

2.  分析User继承链

User --> AbstractUser  --> (AbstractBaseUser, PermissionsMixin)

UserManger  -->  BaseUserManager

其中类AbstractUser内部中 username、first_name、last_name、email、is_staff、is_active、objects = UserManager()

类UserManager内部中 create_user()和create_superuser()

类AbstractBaseUser内部中 password、last_login、is_authenticated、set_password()

3.  小结

模仿 AbstractUser继承 AbstractBaseUser,调用UserManager(),实现账号定制

二  账号定制
# 用来创建用户
class MyUserManager(BaseUserManager):
    def create_user(self, email, name, password=None):
        if not email:
            raise ValueError(‘Users must have an email address‘)
        user = self.model(
            email=self.normalize_email(email),
            name=name,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, name, password):
        user = self.create_user(
            email,
            password=password,
            name=name,
        )
        user.is_admin = True
        user.save(using=self._db)
        return user

# 定制账号基本信息
class Account(AbstractBaseUser):

    email = models.EmailField(
        verbose_name=‘email address‘,
        max_length=255,
        unique=True,
    )
    name = models.CharField(max_length=32)
    role = models.ForeignKey("Role", blank=True, null=True)
    customer = models.OneToOneField("Customer", blank=True, null=True)

    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = MyUserManager()

    USERNAME_FIELD = ‘email‘
    REQUIRED_FIELDS = [‘name‘]

    # 其他基本信息......

参考链接  https://docs.djangoproject.com/en/1.11/topics/auth/customizing/

三  登录与退出

1.  导入方法

from django.contrib.auth.decorators import login_required

from django.contrib.auth import authenticate, login, logout

2.  分析模块

@login_required 验证需要登录的页面,否则跳转找配置里的登录页面 LOGIN_URL = ‘/login/‘

authenticate(username=username, password=password),认证通过返回user对象,否则None

login(request, user) 写入登录sessioin

logout(request) 清除登录session

3.3  示例

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, logout

@login_required
def dashboard(request):
    return render(request, ‘dashboard.html‘)

def account_login(request):
    if request.method == "POST":
        username = request.POST.get(‘username‘)
        password = request.POST.get(‘password‘)
        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
            return redirect(request.GET.get(‘next‘) or ‘/dashboard/‘)
    return render(request, ‘login.html‘)

def account_logout(request):
    logout(request)
    return redirect(‘/login/‘)

  

时间: 2024-10-12 20:36:53

Django自带用户验证框架的相关文章

django 自带用户是否登录

如何判断是否已经登录: from django.contrib.auth.decorators import login_required from django.contrib.auth import authenticate,login,logout     因为是用django来加密的,所以要用django的来验证,authenticate 在models.py文件里创建表结构   用户加密 from django.contrib.auth.models import User class

Mongodb带用户验证的Replica Set配置

Replica Set配置好之后,发现启用auth选项之后就不能同步了,应该是身份验证的部分漏掉了哪些步骤. 后来发现是少了keyFile的配置,于是就生成一个. keyFile其实没有什么神秘的,只要 是base64字符集中的字符, 长度在6~1024之间就可以了, 空白字符会被MongoDB删除掉, 每一个节点都要使用相同的keyFile文件, linux环境需要修改keyFile权限(chmod 600 mongodb-keyfile). 由于MongoDB官方文档的示例是使用openss

django 的用户验证及登录状态保持

一.用户验证功能 Django自带用户验证及登录功能,引入模块为: from django.contrib.auth import authenticate 其中方法authenticate()的接收参数为: def authenticate(request=None, **credentials): 传入参数: user = authenticate(username=login_user, password=login_password) authenticate方法自动在数据库中匹配.验证

Django 框架篇(十): django自带的认证系统

Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. 回到顶部 auth模块 from django.contrib import auth auth中提供了许多实用方法: authenticate()

2.4、使用Django自带的admin用户管理,权限管理

如何创建项目请参考2.2.创建项目. 通常web服务会要求注册的用户通过用户名和密码登录,然后才可能管理自己的信息或者对一些页面进行授权,判断用户是否拥有执行某种操作的权限. Django已经提供了一个django.contrib.auth应用来处理登录,登出和权限验证,同时还提供了django.contrib.admin应用来管理用户.可以参考你的虚拟python环境的/lib/python27/site-packges/django/contrib/admin里面的文件和源码. 我们要做的就

Django中间件进行用户登陆验证

通常情况下我们在django中设置登陆验证,使用装饰器来检验是否登陆过.这种情况,我们所有的视图函数都需要加上,太low. 下面我们使用中间件来进行登陆验证~~~ 我们先做出登陆页面: 1.models.py #先在models中设置用户名密码字段 from django.db import models class UserInfo(models.Model): # nid = models.AutoField(primary_key=True) # nid = models.BigAutoF

struts2学习笔记(三)—— 在用户注冊程序中使用验证框架

实现目标: 1.使用验证框架对用户注冊信息进行验证 2.验证username.password.邮箱不能为空 3.验证username.password长度 4.验证邮件地址格式 详细实现 一.Struts2应用的基础配置 这里不做具体阐述,具体为web.xml.相关jar包的配置 二.将页面显示的文本内容放到资源文件里 1.查看用户注冊程序中的全部页面,找到全部能够显示的文本内容,将它们分离出来放到资源文件里. 2.与相关的Action类同名,以.preperties为扩展名,与Action类

Django 类方式view进行进行用户验证

问题: Django中,view的书写方式有两种,一种是def函数方式,一种是class方式,函数方式通过@login_required装饰器标记函数,就必须通过用户验证,而类,则没办法通过此方法进行标记 那,如何解决这个问题? 利用类的继承方式,写一个基类,需要验证的class view类,首先继承这个基类,后面所有通过此类的url都需要进行用户验证登录,因为可能有许多的view需要使用该类,需要独立出来,建立在utils目录下,起名mixin_is_login.py,然后在各种需要的view

Django 中的用户认证

Django 自带一个用户认证系统,这个系统处理用户帐户.组.权限和基于 cookie 的 会话.本文说明这个系统是如何工作的. 概览 认证系统由以下部分组成: 用户 权限:控制用户进否可以执行某项任务的二进制(是/否)标志. 组:一种为多个用户加上标签和权限的常用方式. 消息:一种为指定用户生成简单消息队列的方式. Deprecated in Django 1.2: 认证系统的消息部分将会在 Django 1.4 版中去除. 安装 认证系统打包在 Django 的 django.contrib