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('注销成功')
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。