-
auth认证模块
-
auth认证相关模块及操作
-
扩展auth_user表
auth认证模块
django自带一个admin路由 但需要我们自己填写管理员账号和密码 如果想要使用admin后台管理 需要先创建表 然后创建管理员账号
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表
python39 manage.py makemigrations
python39 manage.py migrate
python39 manage.py createsuperuser
登录、校验用户是否登录、修改密码、注销登录等
auth认证相关模块及操作
from django.contrib import auth
from django.contrib.auth.models import User
res = User.objects.filter(username=username)
User.objects.create_user(username=username,password=password)
'''views.py'''
def register_func(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
con_pwd = request.POST.get('con_pwd')
if not password == con_pwd:
return HttpResponse('两次密码不一致')
res = User.objects.filter(username=username)
if res:
return HttpResponse('用户名已存在')
User.objects.create_user(username=username, password=password)
return render(request, 'registerPage.html')

user_obj = auth.authenticate(request, username=username, password=password)
auth.login(request, user_obj)
'''views.py'''
def login_func(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = auth.authenticate(request, username=username, password=password)
if user_obj:
auth.login(request, user_obj)
'''
当执行完上述操作之后 我们就可以通过request.user直接获取当前登陆用户的对象数据
'''
return HttpResponse(f'{username}登陆成功')
return render(request, 'loginPage.html')


我们可以使用request.user来查看登陆的用户是谁,如果已登录,那么print(request.user)的结果就是用户名,未登录就是AnonymousUser
同样我们也可以用request.user.is_authenticated将是否登陆用布尔值表示:如果已有用户登录,print(request.user.is_authenticated)结果是True,未登录则是Flase
模拟博客园效果:当用户登陆时,展示用户的姓名,当用户未登录时,展示的是注册和登陆两个标签
'''views.py'''
def home_func(request):
return render(request, 'homePage.html', locals())
'''homePage.html'''
<body>
{% if request.user.is_authenticated %}
<h1>{{ request.user.username }}</h1>
{% else %}
<a href="">注册</a>
<a href="">登陆</a>
{% endif %}
</body>


如果某个页面只有登录之后才能查看,根据昨天学习的内容我们可以写一个装饰器并且在路由后面加一个问号再加一个键值对来表示本来想要访问的页面。在auth模块中这些内容都已被封装好
首先导入模块:
from django.contrib.auth.decorators import login_required
如果登录页面的路由和我们制定的不一样,我们可以在括号内指定登陆路由:
@login_required(login_url='/login/')
def index_func(request):
return HttpResponse('index页面,只有登录才能查看')
如果很多个函数的登陆路由都一样,那么我们可以直接在setting.py中写:
LOGIN_URL = '/login/'
在视图函数中就无须重复指定登陆路由:只要被该装饰器装饰的函数没有登陆之前都会跳转到指定登陆的页面
@login_required
def index_func(request):
return HttpResponse('index页面,只有登录才能查看')

request.user.check_password(old_pwd)
request.user.set_password(new_pwd)
request.user.save()
'''views.py'''
@login_required
def set_pwd_func(request):
if request.method == 'POST':
old_pwd = request.POST.get('old_pwd')
new_pwd = request.POST.get('new_pwd')
confirm_pwd = request.POST.get('confirm_pwd')
if not confirm_pwd == new_pwd:
return HttpResponse('两次密码不一致')
is_right = request.user.check_password(old_pwd)
if not is_right:
return HttpResponse('原密码不正确')
request.user.set_password(new_pwd)
request.user.save()
return render(request, 'setPwdPage.html')

auth.logout(request)可以自动将sessioon表中的对应关系删除
'''views.py'''
@login_required
def logout_func(request):
auth.logout(request)
return HttpResponse('成功退出登录')
扩展auth_user表
还想使用auth模块的功能 并且又想扩展auth_user表的字段
方法1: 编写一对一表关系
方法2:类继承(推荐)
步骤1:模型层编写模型类继承AbstractUser
from django.contrib.auth.models import AbstractUser class
UserInfo(AbstractUser):
phone = models.BigIntegerField()
desc = models.TextField()
步骤2:一定要在配置文件中声明替换关系
AUTH_USER_MODEL = 'app01.UserInfo'
ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理