南京工程建设招聘信息网站,郑州知名网站推广,辽宁建设工程信息网外网公示时间,常见的搜索引擎Auth模块
我们在创建好一个Django项目后执行数据库迁移命令会自动生成很多表
其中有auth_user等表
Django在启动之后就可以直接访问admin路由#xff0c;需要输入用户名和密码#xff0c;数据参考的就是auth_user表#xff0c;并且必须是管理员才能进入
依赖于a…Auth模块
我们在创建好一个Django项目后执行数据库迁移命令会自动生成很多表
其中有auth_user等表
Django在启动之后就可以直接访问admin路由需要输入用户名和密码数据参考的就是auth_user表并且必须是管理员才能进入
依赖于auth_user表完成用户相关的所有功能 创建超级用户管理员 python manage.py createsuperuser 比对密码和用户名是否正确 括号内必须同时传入用户名和密码 user_obj auth.authenticate(request, usernameusername, passwordpassword) 保存用户状态 auth.login(request, user_obj) # 类似于request.session[key]user_obj
# 只要执行了该方法你就可以在任何地方通过request.user获取到当前登录的对象 判断用户当前是否登录 request.user.is_authenticated() 获取当前登录用户 request.user 校验用户是否登录装饰器 from django.contrib.auth.decorators import login_requiredlogin_required(login_url/login/) # 局部配置:用户没有登录跳转到login_url后面指定的网址 #全局配置
LOGIN_URL/login/ 比对密码 request.user.check_password(old_password) # 返回bool 修改密码 # 设置新密码
request.user.set_password(new_password) # 仅仅修改对象的属性
# 操作数据库
request.user.save() 注销 auth.logout(request) 注册 User.objects.create_user(usernameusername,passwordpasswordfrom django.contrib.auth.models import User urls.py from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns [path(admin/, admin.site.urls),#登录功能path(login/, views.login),#判断用户是否登录path(home/, views.home),#修改密码path(set_password/,views.set_password),#注销功能path(logout/,views.logout),#注册功能path(reg/,views.reg)
]views.py
from django.shortcuts import render, redirect, HttpResponse
from django.contrib import auth# 使用auth模块要用就用全套
def login(request):if request.method POST:username request.POST.get(username)password request.POST.get(password)# 去用户表中校验数据# 1.表如何获取# 2.密码如何比对user_obj auth.authenticate(request, usernameusername, passwordpassword)if user_obj:# 保存用户状态auth.login(request, user_obj) # 类似于request.session[key]user_obj# 只要执行了该方法你就可以在任何地方通过request.user获取到当前登录的对象return redirect(/home/)1.自动查找auth_user标签2.自动给密码加密再比对该方法注意事项括号内必须同时传入用户名和密码不能只传用户名return render(request, login.html)from django.contrib.auth.decorators import login_required
1.如果全局也配置了优先级 局部全局
2.全局配置不需重复写代码但是跳转单一。局部配置好处在于不同的视图函数在用户没有登录的情况下可以跳到不同页面
login_required(login_url/login/) # 局部配置:用户没有登录跳转到login_url后面指定的网址
def home(request):print(request.user) # 用户对象 如果django_session表中没有数据就拿到AnonymousUser匿名用户# print(request.user.is_authenticated()) #匿名用户返回False用来判断当前用户是否登录# 自动去django_session表中查看用户对象给你封装到request.user中return HttpResponse(ok)login_required(login_url/login/)
def set_password(request):if request.method POST:username request.POST.get(username)old_password request.POST.get(old_password)new_password request.POST.get(new_password)# 对比新旧密码是否一致if old_password new_password:# 校验老密码is_right request.user.check_password(old_password) # 返回boolif is_right:# 设置新密码request.user.set_password(new_password) # 仅仅修改对象的属性# 操作数据库request.user.save()return render(request, set_password.html, locals())
login_required
def logout(request):auth.logout(request)return redirect(/login/)
from django.contrib.auth.models import User
def reg(request):if request.methodPOST:username request.POST.get(username)password request.POST.get(password)#操作auth_user表写入数据#User.objects.create() 不能用create密码没有加密处理#创建普通用户User.objects.create_user(usernameusername,passwordpassword)return render(request,reg.html)
auth模块表扩展
models.py
from django.db import models
from django.contrib.auth.models import User,AbstractUser
# Create your models here.
class UserInfo(AbstractUser):如果继承了AbstractUser那么在执行数据库迁移命令的时候auth_user就不会被创建出来了而UserInfo表中会出现auth_user所有的字段 外加自己扩展的字段这样你能直接点击你自己的表更加快速的完成操作和扩展前提1.在继承之前没有执行过数据库迁移命令auth_user没有被创建如果当前库已经创建了那么就重新换个库2.继承的类里面不要覆盖AbstractUser里面的字段名表里面所有的字段都不要动只要扩展字段即可3.需要在配置文件中告诉Django你要用UserInfo代替auth_userAUTH_USER_MODELapp01.UserInfo应用名.表名phonemodels.BigIntegerField()
#替换了auth_user表auth模块还是正常使用参考的表页从原来的auth_user变成了UserInfo