Django之登录权限系统

本文参考链接django之auth模块(用户认证) - chchcharlie、 - 博客园 (cnblogs.com)

执行完迁移命令,会自动生成admin表,迁移命令如下:

python manage.py makemigrations

python manage.py migrate

相关模块

复制代码
from django.contrib import auth  # 导入auth模块,用于鉴权
from django.contrib.auth.models import User  # 导入auth_user表对象,用于创建用户
from django.contrib.auth.decorators import login_required  # 校验用户是否登陆的装饰器

1)注册创建用户

复制代码
User.objects.create(username=username, password=password)  # 创建普通用户,密码不加密(不推荐使用)
User.objects.create_user(username=username, password=password)  # 创建普通用户,密码加密(推荐使用)
User.objects.create_superuser(username=username, password=password, email='123@qq.com')  # 创建超级用户,但是必须填写邮箱事项,要不报错

举例 用户注册代码

复制代码
def register_action(request):
    u_name = request.GET['username']
    p_word = request.GET['password']
    # 开始 联通django用户表
    from django.contrib.auth.models import User
    try:
        user = User.objects.create_user(username=u_name,password=p_word)
        user.save()
        return HttpResponse('注册成功!')
    except:
        return HttpResponse('注册失败~用户名好像已经存在了~')

2)登录验证用户

auth.authenticate(request, username=username, password=password) # 用户名密码正确返回的是用户对象,错误返回None
auth.login(request, user_obj)

只要执行了此代码,之后在任意可以获取到request对象的地方,都可以通过request.user获取到当前登录的用户对象

request.user.is_authenticated() # 判断是否登陆 request.user # 登陆用户对象

举例用户登录代码

复制代码
def login_action(request):
    u_name = request.GET['username']
    p_word = request.GET['password']
    # 开始 联通 django 用户库,查看用户名密码是否正确
    from django.contrib import auth
    user = auth.authenticate(username=u_name,password=p_word)
    if user is not  None:
        # 进行正确的动作
        auth.login(request, user)  # 不写这个加了@login_required,就登录不了了,也添加了session
        request.session['user'] = u_name  # 这个是设置session,上面已经添加了,这个没有用
        return HttpResponse('成功')
    else:
        # 返回前端告诉前端用户名/密码不对
        return HttpResponse('失败')

3)修改密码

复制代码
# 先校验旧密码是否正确
request.user.check_password(old_password)  # 返回的是布尔值
# 修改密码
request.user.set_password(new_password)
request.user.save()  # 一定要保存

4)注销登录

auth.logout(request)

举例用户注销

复制代码
# 注销
def logout(request):
    from django.contrib import auth
    auth.logout(request)
    return HttpResponseRedirect('/login/')

5)校验用户是否登陆,未登录情况下自动跳转到自定义的登录界面

复制代码
@login_required
def welcome(request):
    print('进来了')
    # return HttpResponse('欢迎来到主页')
    return render(request,'welcome.html')

path('accounts/login/', login),  # 未注册重定向

使用auth模块写一个注册、登陆、修改密码、注销登陆功能

复制代码
from django.contrib import auth  # 导入auth模块
from django.contrib.auth.models import User  # 导入auth_user表对象
from django.contrib.auth.decorators import login_required  # 校验用户是否登陆的装饰器


# 注册功能
def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        User.objects.create_user(username=username, password=password) 
        return HttpResponse('注册成功!')
 
     return render(request, 'register.html')

# 登录功能
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 数据库校验用户名和密码是否正确
        user_obj = auth.authenticate(request, username=username, password=password)
        # print(res)  # 用户名密码正确返回的是用户对象,错误返回None
        if user_obj:
            # 保存用户登录状态
            auth.login(request, user_obj)
            return HttpResponse('登陆成功!')
    return render(request, 'login.html')


# 登陆之后可以查看的页面
@login_required
def get_user(request):
    print(request.user)
    print(request.user.is_authenticated)
    return HttpResponse('get_user页面')


# 登陆之后可以查看的页面
@login_required
def login_after01(request):
    return HttpResponse('我是login_after01页面')


# 登陆之后可以查看的页面
@login_required
def login_after02(request):
    return HttpResponse('我是login_after02页面')


# 登陆之后可以查看的页面
@login_required
def login_after03(request):
    return HttpResponse('我是login_after03页面')


# 修改密码功能
@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')


# 注销功能
@login_required
def logout(request):
    auth.logout(request)
    return HttpResponse('注销成功')
相关推荐
陈天伟教授2 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
2301_764441333 小时前
Aella Science Dataset Explorer 部署教程笔记
笔记·python·全文检索
爱笑的眼睛113 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
BoBoZz193 小时前
ExtractSelection 选择和提取数据集中的特定点,以及如何反转该选择
python·vtk·图形渲染·图形处理
liwulin05063 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
木头左3 小时前
LSTM量化交易策略中时间序列预测的关键输入参数分析与Python实现
人工智能·python·lstm
电子硬件笔记4 小时前
Python语言编程导论第七章 数据结构
开发语言·数据结构·python
HyperAI超神经4 小时前
【vLLM 学习】Prithvi Geospatial Mae
人工智能·python·深度学习·学习·大语言模型·gpu·vllm
逻极4 小时前
Python MySQL防SQL注入实战:从字符串拼接的坑到参数化查询的救赎
python·mysql·安全·sql注入