首页 > 其他分享 >auth模块

auth模块

时间:2023-05-06 15:45:03浏览次数:36  
标签:登录 request auth user 模块 login password

目录

一、auth认证模块

前戏:在刚学习django的时候我们发现django自带一个admin路由,但是需要我们提供管理员账号和密码,接下去学习的过程中,我们又发现数据库迁移后创建了十多张新的表,大部分我们都没有研究,其中的一张表就是专门用来配合Auth模块做用户的登录、校验用户是否登录、修改密码、注销登录等功能的。

如果想要使用admin后台管理 需要先创建表 然后创建管理员账号。

直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表。

创建超级管理员的命令

	python38 manage.py createsuperuser

image

基于auth_user表编写用户相关的各项功能

  • 登录、校验用户是否登录、修改密码、注销登录等都是在这张表完成的.

二、auth认证相关模块及操作

功能及方法介绍

说在前面

auth封装了很多方法,他让我们不需要自己编写逻辑判断用户信息是否正确(不止这个一个功能哦).

部分属性功能介绍

字段 释义
id ID
password 密码
last_login 最后登录时间
is_superuser 是否是管理员
username 用户名
first_name
last_name
email 邮箱
is_staff 是否是工作人员
is_active 是否激活
date_joined 创建时间

导入auth模块

from django.contrib import auth

在执行auth模块相关操作前要先导入数据库中的表

from django.contrib.auth.models import User

用户注册功能(即用户创建)

User.objects.create_user(username=username, password=password)

判断用户名和密码是否正确

from django.contrib.auth.models import User
1.普通用户
user = User.objects.create_user(username='用户名',password='密码',...)
2.管理员用户,必须要有email
user = User.object.create_superuser(username='用户名',password='密码',email='邮箱',...)

判断用户是否登录

request.user.is_authenticated

如果登陆了,结果为布尔值Ture,否则为False

获取登录用户对象数据

request.user

用户信息可以在user中用点的方式获取

校验用户是否登录装饰器

	from django.contrib.auth.decorators import login_required
    我们如果不指定这里的url,就不会跳转到我们制作的登陆页面.
    @login_required(login_url='/login/')  局部配置 
    @login_required						全局配置
 	 配置文件中LOGIN_URL = '/login/'
     配置文件中修改,会让全局的@login_required影响下的视图函数/类全都跳转向一个页面

校验原密码是否正确

request.user.check_password(原密码)

修改密码

	request.user.set_password(新密码)
 	request.user.save()

退出登录

auth.logout(request)

部分功能操作代码展示

		'''判断当前用户有没有登录操作'''
		html
		    <form method="post">
		        {% csrf_token %}
		        <p>username:<input type="text" name="username"></p>
		        <p>password:<input type="text" name="password"></p>
		        <input type="submit">
		    </form>
		    
		views
			def login(request):		
			    print(request.user)
			    '''
			        用户登录成功之后执行Auth.login 该方法返回当前登录用户对象  admin
			        用户没有登录成功没有执行Auth.login 该方法返回匿名用户对象  AnonymousUser
			    '''
			    print(request.user.is_authenticated)    # 判断当前用户是否登录 返回True False
			    if request.method == 'POST':
			        username = request.POST.get('username')
			        password = request.POST.get('password')
			        # 现在遇到一个问题就是怎么通过models.的方式去操作auth_user表格呢? 这个时候就有auth模块了
			        res = auth.authenticate(request, username=username, password=password)
			        # print(res.username, res.password,
			        #       res.pk)  # admin pbkdf2_sha256$150000$4NZp3wuIgf9A$7hfw7pcm35QosjTRWFpj9U3F5SoGTRqUv/H8DpBp308= 2
			        '''数据正确的情况下会有一个返回值是数据对象 数据错误的情况下返回的是None'''
			        if res:
			            auth.login(request, res)    # 自动操作Cookie与Session
			    return render(request, 'login.html')


		'''
		用户登录装饰器
		当用户没有登录的情况下跳转到注册界面 在settings文件中设置跳转的页面地址 LOGIN_URL = '/login/'
		'''
		
		from django.contrib.auth.decorators import login_required

		@login_required
		def index(request):
		    return HttpResponse('Form index view')
		
		@login_required
		def func(request):
		    return HttpResponse('Form func view')

		'''重置密码'''
		views
			@login_required
			def set_password(request):
			    if request.method == 'POST':
			        old_password = request.POST.get('old_password')
			        new_password = request.POST.get('new_password')
			        '''校验原密码是否正确 自定加密并检验'''
			        is_right = request.user.check_password(old_password)
			        if is_right:
			            request.user.set_password(new_password)  # 修改密码
			            request.user.save()  # 保存数据
			    return render(request, 'set_password.html')
		html
			<form action="" method="post">
			    {% csrf_token %}
			    <p>old_password:<input type="text" name=""></p>
			    <p>new_password:<input type="text" name=""></p>
			    <input type="submit">
			</form>
		
		'''自动清除Cookie与Session'''
		views
			@login_required
				def loginout(request):
				    auth.logout(request)  # 自动清楚cookie和Session
				    return HttpResponse('清除成功!!!')

		'''创建用户'''
		views
			from django.contrib.auth.models import User
			
			def register(request):
			    User.objects.create(username='Like', password=123, email='[email protected]')	# 这里创建的是普通用户 不能登录管理员系统
			    return HttpResponse('注册成功!!!')

image

三、扩展auth_user表

如果我们既想使用auth模块的功能,并且又想扩展auth_user表的字段,有以下两种方式:

  • 思路1:一对一字段关联

因为操作相对繁琐,不建议使用.

image

  • 思路2:替换auth_user表

我们点进调入的User表查看源码,我们发现他只是继承了AbstractUser模块,然后点进AbstractUser源码,我们发现他就相当于一张模型表,配置了auth需要使用的表的具体内容.因此我们可以自己定义一个模型表,只要导入父类AbstractUser即可自定义功能.

操作简单,推荐使用.

	步骤1:模型层编写模型类继承AbstractUser
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
        # 填写AbstractUser表中没有的字段
        phone = models.BigIntegerField()
        desc = models.TextField()
 	步骤2:一定要在配置文件中声明替换关系(把表替换成我们自定义的模型表)
        AUTH_USER_MODEL = 'app01.UserInfo'
	ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建)


标签:登录,request,auth,user,模块,login,password
From: https://www.cnblogs.com/zhihuanzzh/p/17377574.html

相关文章

  • 自动化框架——日志模块
    日志模块的使用(python的logging模块)一:简单使用   学习原因:学习logging模块是为了更直观的调试代码,虽然有prin语句可以调试,但是在批量执行自动化用例时需要logging模块来调试。如何简单使用:导入日志模块设置basicConfig就行,设置日志级别,日志格式,日志写入模式,日志文件名就可......
  • OAuth2.0 第三方登录
    本篇内容以用户访问百度,通过新浪微博的第三方登录百度过程讲解用户:资源拥有者百度:客户端新浪微博:认证服务器前置条件:百度已经向新浪微博申请注册,分配给百度的client_id是2512457640地址流程图如下1.用户(资源拥有者)访问百度(客户端)2.点击新浪微博(认证服务器)登录,浏览......
  • spring cloud、gradle、父子项目、微服务框架搭建---搭建父子级多模块项目,并注册到Eu
    一、新建一个父级gradl模块1.在桌面或新建文件里面,右键,打开IDEA选择Flie>NEW>Module选择Gradle,选择ModuleSDK1.8,选择Java创建完成后,idea中会多出一个项目,如下图示例然后直接关闭当前idea,进入刚才创建好的文件下,再次打开项目可以直接删除src目录二、新建子级gradl模......
  • 使用Node.js调用Sqlite3模块写的大数据查询接口
    使用Node.js调用Sqlite3模块写的大数据查询接口constsqlite3=require('sqlite3');consthttp=require('http');consturl=require('url');constSqliteDb=async(dbFile)=>{constpri={};pri.db=newsqlite3.Database(dbFile);......
  • K8S:4种鉴权模块不知道怎么选?看看这篇你就懂了。
    鉴权模块在K8S中,鉴权模块有4种,分别是:Node、ABAC、RBAC、Webhook。功能分别如下:Node:验证节点的身份以确保其具有所需的权限来加入集群。ABAC:基于用户的属性(如用户名或组名)来控制其对集群资源的访问权限。RBAC:基于角色的权限来控制用户对集群资源的访问权限。Webhook:允许管理......
  • 4-2 UserDetails、UserDetailsService和jdbcAuthentication
          ......
  • navicate:2059 Authentication plugin caching_sha2_password
    场景:navicate连接远程数据库失败,报:2059Authenticationplugincaching_sha2_password解决:showvariableslike'default_authentication_plugin';然后看全部用户的密码模式selecthost,user,pluginfrommysql.user;之前全部是caching_sha2_password这个是修改过的......
  • 声音检测报警模块方案解析
    需求分析 声音作为一个常用的获取信息的渠道,它包含的信息十分广泛。随着数字化进程的不断推进,声音的检测和报警这方面的需求越来越多了。比如,声音分贝值大于一定程度的报警,检测到声音之后报警。鉴于此,团队根据市场的变化,及时推出了一款标准化的模块,方便系统集成厂商集成和运用,......
  • springboot,maven多模块打jar包踩坑
    父工程msgdemo中msgdemoimpl依赖gson_enum模块。在msgdemoimpl中有controller接口代码一开始在该pom中使用了import指定了该依赖的范围,所以打包失败。使用默认的范围即可。......
  • 利用 captcha 模块完成验证码图片生成
    生成单张验证码图片并显示fromcaptcha.imageimportImageCaptchaimportmatplotlib.pyplotaspltimportnumpyasnpimportrandomimportstring#characters为验证码上的字符集,10个数字加26个大写英文字母#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZstr类型characters=......