当前位置: 首页 > news >正文

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 Usertry: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 authuser = auth.authenticate(username=u_name,password=p_word)if user is not  None:# 进行正确的动作auth.login(request, user)  # 不写这个加了@login_required,就登录不了了,也添加了sessionrequest.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 authauth.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)  # 用户名密码正确返回的是用户对象,错误返回Noneif 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('注销成功')

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【计算机毕业设计】基于Springboot的B2B平台医疗病历交互系统【源码+lw+部署文档】
  • NetCore Grpc拦截
  • java并发编程概述
  • Blender 中导出模型fbx
  • 如何利用python进行统计显著性检验
  • 浅谈React
  • SpringBoot项目架构实战之“网关zuul搭建“
  • 机器学习筑基篇,​Ubuntu 24.04 快速安装 PyCharm IDE 工具,无需激活!
  • 景联文科技打造高质量图文推理问答数据集,赋能大语言模型提升推理能力
  • Java内存划分详解:从基础到进阶
  • C++命名空间详细介绍
  • iOS多target时怎么对InfoPlist进行国际化
  • 流程图编辑框架LogicFlow-vue-ts和js
  • spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716
  • 好玩的珠玑妙算-加作弊带概率空间+日志存储240705mindMaster
  • 《剑指offer》分解让复杂问题更简单
  • Fastjson的基本使用方法大全
  • FineReport中如何实现自动滚屏效果
  • Java知识点总结(JavaIO-打印流)
  • Sublime text 3 3103 注册码
  • Vue 动态创建 component
  • WePY 在小程序性能调优上做出的探究
  • yii2中session跨域名的问题
  • 安卓应用性能调试和优化经验分享
  • 搞机器学习要哪些技能
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 开源地图数据可视化库——mapnik
  • 聊聊flink的TableFactory
  • 扑朔迷离的属性和特性【彻底弄清】
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 异步
  • ​Python 3 新特性:类型注解
  • ​水经微图Web1.5.0版即将上线
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (4) PIVOT 和 UPIVOT 的使用
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)共用体union的用法举例
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)c52学习之旅-简单了解单片机
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (译)2019年前端性能优化清单 — 下篇
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .Net Memory Profiler的使用举例
  • .Net接口调试与案例
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET性能优化(文摘)
  • .project文件
  • @Bean, @Component, @Configuration简析
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @NestedConfigurationProperty 注解用法