南京建站平台,网页设计与制作模板图,江苏省建筑网监督信息平台,python在线编程游戏文章目录 一、auth介绍auth认证相关模块及操作扩展auth_user表 一、auth介绍
Django自带一个admin路由#xff0c;但是需要我们提供管理员账户和密码#xff0c;如果想要使用admin后台管理#xff0c;需要先创建表#xff0c;然后创建管理员账户。 直接执行数据类迁移命令… 文章目录 一、auth介绍auth认证相关模块及操作扩展auth_user表 一、auth介绍
Django自带一个admin路由但是需要我们提供管理员账户和密码如果想要使用admin后台管理需要先创建表然后创建管理员账户。 直接执行数据类迁移命令即可产生默认的auth_user表该表就是admin后台管理默认的认证表 1.创建超级管理员 python38 manage.py createsuperuser
在执行创建管理员命令后运行环境会提示我们输入用户名邮箱选填密码等信息依次输入即可。这样我们的auth_user表中就会添加一条数据这条数据就是管理员用户信息。
auth认证相关模块及操作
基于auth_user 表编写相关的各项功能登录、校验用户是否登录、修改密码、注销登录等
from django.contrib import auth
from django.contrib.auth.models import User
1.用户注册功能
User.objects.create_user(usernameusername, passwordpassword)
2.判断用户名和密码是否正常
user_obj auth.authenticate(request,usernameusername,passwordpassword)
3.判断用户是否登录
request.user.is_authenticated
4.获取登录用户对象数据
request.user
5.校验用户是否登录装饰器
from django.contrib.auth.decorators import login_requiredlogin_required(login_url/login/) 局部配置 login_required 全局配置def is_login():pass配置文件中LOGIN_URL /login/ 括号里面的可以控制跳转的页面全局配置需要再配置文件中填写如果有全局配置和局部配置局部配置的函数会遵循局部配置的路由
6.校验原密码是否正确
request.user.check_password(原密码)
7.修改密码
request.user.set_password(新密码)
8.退出登录
auth.logout(request)代码实现
1.views视图
from django.contrib import auth
from django.contrib.auth.models import User# 用户注册
def register_func(request):if request.method POST:usernamerequest.POST.get(username)passwordrequest.POST.get(password)# 1.校验用户名是否已经存在resUser.objects.filter(usernameusername)if res:return HttpResponse(用户已经存在)# 2.注册用户# User.objects.create(usernameusername,passwordpassword) # auth模块不能自己创建因为密码无法实现加密操作User.objects.create_user(usernameusername,passwordpassword)return render(request,registerPage.html)# 用户登录
def login_func(request):print(request.user)if request.method POST:usernamerequest.POST.get(username)passwordrequest.POST.get(password)# 1.校验用户名和密码是否正确 无法比对密码必须借助于auth模块提供的方法user_objauth.authenticate(request,usernameusername,passwordpassword)print(user_obj.username)print(user_obj.password) 用户名和密码正确周返回的是数据对象不正确则放回Noneif user_obj:#2. 用户登录成功(返回给客户登录的凭证、令牌、随机字符串auth.login(request,user_obj) # 自动操作django_session表当执行完上述的操作之后我们就可以通过request.user直接获取到当前登录用户数据对象return HttpResponse(登录成功)return render(request, loginPage.html)from django.contrib.auth.decorators import login_required# 用户修改密码
login_required() # 校验用户是否登录的装饰器
def set_pwd_func(request):if request.methodPOST:old_pwd request.POST.get(old_pwd)new_pwd request.POST.get(new_pwd)confirm_pwd request.POST.get(confirm_pwd)if not new_pwdconfirm_pwd:return HttpResponse(两次密码不正确)# 1.判断原密码是否正确is_right request.user.check_password(old_pwd)if not is_right:return HttpResponse(原密码不正确)#2.修改密码request.user.set_password(new_pwd)request.user.save() # 一定要保存return render(request,setPwdPage.html)login_required
def logout_func(request):auth.logout(request) # 自动去session表删除数据return HttpResponse(退出登录)2.html
form action methodpost{% csrf_token %}pusername:input typetext nameusername/pppassword:input typetext namepassword/pinput typesubmit
/form问题1 要想实现上述的操作使用的是request.user.is_authenticated
1.html
{% if request.user.is_authenticated %}
h{{ request.user.username }}/h{% else %}a href注册/aa href登录/a
{% endif %}
2.views
def home_func(request):print(request.user)return render(request,homePage.html,locals())扩展auth_user表
在原来的基础authmok的功能并且又想扩展auth_user表的字段
思路1一对一字段关联(不推荐)
from django.contrib.auth.models import User
class OtherUser(models.Model):user models.OneToOneField(toUser) 将User表与OtherUser的字段一一对应操作起来很麻烦思路2替换auth_user表推荐
步骤1模型层编写模型类继承AbstractUserfrom django.contrib.auth.models import AbstractUserclass UserInfo(AbstactUser): # 填写AbstactUser表中没有的字段phonemodels.BinIntegerField()descmodels.TextField()
步骤2一定要配置文件中声明替换关系AUTH_USER_MODELapp01.UserInfo# 告诉orm 使用app01 下的UserInfo表替换原先的auth_user表ps:替换还有一个前提就是数据库迁移命令没有执行过(auth相关表没有创建)用全新的库替换完成之后再重新执行数据库迁移命令进行刷新。