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('注销成功')
相关推荐
benchmark_cc14 分钟前
策略临时需要一批股票的最新价格,先查行情还是先建股票池?——从量化策略执行逻辑看数据获取顺序
python·数据分析·pandas·量化交易·股票数据·quantdash
成为深度学习高手15 分钟前
XLinear:用一个轻量 MLP,带外生变量做长期时间序列预测
python·深度学习·时序数据库
啊吧怪不啊吧29 分钟前
LangChain之模型调用
python·langchain
溪语流沙31 分钟前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
行百里er31 分钟前
轻量级 Spring 监测工具——Spring Insight 发布了
spring boot·后端·监控
烂蜻蜓38 分钟前
Django入门教程(二十):博客项目实战(一)——环境搭建与第一个Django页面
django
夜雪一千40 分钟前
如何使用BeautifulSoup库来提取HTML中的特定元素
python
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐:基于大数据的城市空气污染物浓度数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·python·信息可视化·数据挖掘·数据分析·课程设计·数据可视化
程序员阿黄1 小时前
基于 Django 与 Vue 3 的智能实验室预约系统设计与实现
后端·python·mysql·django·vue·毕设
光影少年1 小时前
Koa 为什么使用洋葱模型
后端·node.js·koa