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('注销成功')
相关推荐
kfaino2 小时前
码农的AI翻身(三)你好,我叫 Embedding
后端·ai编程
葫芦和十三3 小时前
图解 MongoDB 18|复制集拓扑:Primary、Secondary 和 Arbiter 的分工
后端·mongodb·面试
爱勇宝3 小时前
大多数人不是在使用 AI 赚钱,而是在帮 AI 公司赚钱
前端·后端·程序员
程序员cxuan6 小时前
虽迟但到!GPT-5.6 终于来了!
人工智能·后端·程序员
IT_陈寒8 小时前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
金銀銅鐵8 小时前
[Python] 扩展欧几里得算法
python·数学·算法
Duckdblab9 小时前
DuckDB 性能调优终极指南:打造闪电般的分析体验
python
葫芦和十三9 小时前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试
葫芦和十三9 小时前
图解 MongoDB 16|压缩:snappy、zstd 和 zlib 的取舍
后端·mongodb·面试
苍何9 小时前
终于找到免费开源TTS模型,克隆声音不要钱,本地电脑也能跑
后端