django自带认证系统

板块

用户
权限
密码哈希系统
表单和视图工具

django内置认证系统不支持的板块

密码强度     ---->我们通过第三方包解决
限制登录次数   ----> 自定义中间件解决
第三方验证,如qq登录 微信登录等  --->第三方包与对应的开发者文档
对象级权限    --->django只支持到模型级

认证app

django 自带的认证系统  实际上就是一个app  我们可以在settings里找到对应的 django.contrib.auth 这个app 。 里面封装的就是django内置的认证系统

注册功能

创建普通用户

from django.contrib.auth import models    #导入auth app中的模型类
用户信息储存在模型类的User表中。可以使用django auth 封装的create_user方法创建普通用户
models.User.objects.create_user(username='用户名',password='密码',email='邮箱')

创建超级用户

原理同上,通过create_superuser方法创建超级用户
models.User.objects.create_superuser(username='用户名',password='密码',email='邮箱')

登录功能

从app 中导入authenticate 验证方法

from django.contrib.auth import authenticate
通过传入用户名和密码,判断用户是否注册,如注册会返回用户名,如未注册会返回NONE

记录登录状态

from django.contrib.auth import login   #导入login函数
login(request对象,经过authenticate判断过的对象) 

该函数接受一个HttpRequest对象,以及一个经过认证的User对象。上面就是把认证过的User对象封装到request.user中
我们可以通过request.user我们封装的认证对象的信息
该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。
def post(self,request):   #post请求
    username=request.POST.get('username')     #获取用户名
    password=request.POST.get('password')     #获取密码

    p=authenticate(username=username,password=password) #账号名密码进行验证

    if p is not None:           #判断是否验证成功
        login(request,p)        #记录登录状态
        return redirect("/index")   #跳转到index页面
    else:
        return HttpResponse("110")  #验证失败

退出登录

from django.contrib.auth import logout
该函数接受一个HttpRequest对象,无返回值。

当调用该函数时,当前请求的session信息会全部清除也就是清除前面我们封装的User对象。该用户即使没有登录,使用该函数也不会报错。
def logout(request):
    auth.logout(request)
    return redirect('/login/')

判断当前请求是否通过了认证

from django.contrib.auth import is_authenticated
def my_view(request):
  if not request.user.is_authenticated():
    return redirect('/index')

装饰器版认证工具

auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。
from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径,这个需要我们在登录页面设置)。
如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
在setting中加上
LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由

扩展功能

这内置的认证系统这么好用,但是auth_user表字段都是固定的那几个,我在项目中没法拿来直接使用啊!
比如,我想要加一个存储用户手机号的字段,怎么办?
聪明的你可能会想到新建另外一张表然后通过一对一和内置的auth_user表关联,这样虽然能满足要求但是有没有更好的实现方式呢?
答案是当然有了。
我们可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。
这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    """
    用户信息表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)

    def __str__(self):
        return self.username
注意
按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

原文地址:https://www.cnblogs.com/luyi84895838/p/12180408.html

时间: 2024-11-06 07:36:32

django自带认证系统的相关文章

Django中的认证系统

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

Django Authentication 用户认证系统

一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否是合法用户,权限管理则是决定一个合法用户具有哪些权限.这里,"身份验证"这个词同时代指上面两部分的含义. 系统主要包括: 用户 许可 组 可配置的密码哈希系统 用于用户登录或者限制访问的表单和视图工具 可插拔的后端 类似下面的问题,请使用第三方包: 密码强度检

django(权限、认证)系统—— 基于Authentication backends定制

在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发. Django实现的这套permission体系,在底层被抽象为authentication backends.Django auth backends的默认的内置的实现,就是我们前4篇blog所描述的,基于三个数据库模型User,Permission,Group.在实际开发中,很有可能我们的用户标示或者是密码并非存在于User表中,比如说存放在LDAP中,再

Django 自带认证功能auth模块和User对象的基本操作

一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username,password两个关键字参数. 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的. user = au

Django自定义用户认证系统Customizing authentication

扩展已有的用户模型Extending the existing User model 有两种方法来扩展默认的User Model而不用重写自己的模型.如果你不需要改变存储在数据库中的字段,而只是需要改变Model的行为,您可以创建一个基于User的代理Model.允许的行为包括默认的ordering,custom managers, 或者 custom model methods. 如果你想存储与User有关的信息,可以使用一个OneToOneField字段关联到一个存储额外信息的Model.这

django(权限、认证)系统——第三方组件实现Object级别权限控制

在我的系列blog<Django中内置的权限控制>中明确提及到,Django默认并没有提供对Object级别的权限控制,而只是在架构上留了口子.在这篇blog中,我们探讨一个简单流行的Django组件django-guardian来实现Object level permission. 安装配置django-guardian 首先需要安装django-guardian,一般我们喜欢用virtualenv创建一个虚拟环境: >>virtualenv --distribute venv

django扩展User认证系统

第一种方法proxy 如果你对Django提供的字段,以及验证的方法都比较满意,没有什么需要改的.但是只是需要在他原有的基础之上增加一些操作的方法.那么建议使用这种方式.示例代码如下: #在model.py下 class Person(User): class Meta: proxy = True def get_blacklist(self): return self.objects.filter(is_active=False) 在以上,我们定义了一个Person类,让他继承自User,并且

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

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

05 - Django自带的认证系统

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