Django之用户认证功能
2017-09-03 20:42
567 查看
前言
做web应用对登录做用户身份认证,然后设置session是必不可少的,因为我们就需要把有权限访问本站视图的用户,单独建一张表记录到数据库里;
Django作为一个大而全的框架,已经为我们做好了这些准备;
def log_in(request): if request.method=='GET': nextpath=request.GET.get('next','/index/') return render(request,'login1.html',locals()) else: username=request.POST.get('username') password=request.POST.get('password') #密码zhanggen123.com valid_code=request.POST.get('valid_code') #设置统一报错信息 ajax_response = {"user": None, "errors": ""} #如果验证和 session中设置的验证码一致, if valid_code.upper()==request.session.get('valid_code').upper(): # 进行用户验证 user=authenticate(username=username,password=password) if user: login(request,user) ajax_response['user']=user.username else: ajax_response['errors'] ='用户名/密码错误' else: ajax_response['errors'] = '验证码错误' return HttpResponse(json.dumps(ajax_response))View Code
3、 logout(request) 注销用户
用户注销:删除当前登录用户的session信息
该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错
def log_out(request): logout(request) return redirect('/index/')
4、user对象的 is_authenticated() 和@login_required
检查当前用户是否验证过?返回布尔值 true和flase
要求:
1 用户登陆后才能访问某些页面,
2 如果用户没有登录就访问该页面的话直接跳到登录页面
3 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址
方法1:
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
方法2:
from django.contrib.auth.decorators import login_required @login_required 就不用在一个个视图函数中做is_authenticated()验证了。
def my_view(request): ...
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ '
(这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递 当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
LOGIN_URL = '/login/ '
二、用户操作相关User 对象方法
2.1 is_authenticated()
如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。
通过认证并不意味着用户拥有任何权限,甚至也不检查该用户是否处于激活状态,这只是表明用户成功的通过了认证。 这个方法很重要, 在后台用request.user.is_authenticated()判断用户是否已经登录,如果true则可以向前台展示request.user.name
2.2 创建用户
使用 create_user 辅助函数创建用户:
models.UserInfo.objects.create_user(username=username,password=password,email=email,avatar=avatar) #注意create_user中的_
2.3 修改用户密码
set_password(passwd)
def set_password(request): if request.method=='GET': return render(request,'set_password.html') else: oldpwd=request.POST.get('oldpwd') newpwd = request.POST.get('newpwd') user=request.user if user.check_password(oldpwd): user.set_password(newpwd) user.save() return redirect('/login/')
2.4 check_password(passwd)
2.5 修改密码实例
使用 set_password() 来修改密码
def set_password(request): if request.method=='GET': return render(request,'set_password.html') else: oldpwd=request.POST.get('oldpwd') newpwd = request.POST.get('newpwd') user=request.user if user.check_password(oldpwd): user.set_password(newpwd) user.save() return redirect('/login/')
参考链接:http://www.cnblogs.com/yuanchenqi/articles/7439088.html#3770465 二龙湖浩哥
相关文章推荐
- 利用Django内置的认证视图实现用户密码重置功能详解
- gitlab取消用户注册时需要管理员认证功能
- Django用户认证系统 authentication system----登陆访问限制@login_required
- django 1.8 官方文档翻译: 13-1-1 Django 中的用户认证
- Django的用户认证
- django用户认证
- Linux下Squid代理服务器的安装与配置,带用户认证功能
- SharePoint【学习笔记】-- SharePoint 2010 启用Form认证并增加用户注册功能
- django的用户认证
- 深入理解Django中内置的用户认证
- Django实战之用户认证(初始配置)
- Django自定义用户认证系统Customizing authentication
- 验证django 用户认证auth模块常见方法使用.
- Django自定义用户认证系统之自定义用户模型
- ActiveMQ开启用户认证及消息持久化到数据库功能
- [Django实战] 第3篇 - 用户认证(初始配置)
- django 用户认证
- 9、Django实战第9天:用户注册功能
- Laravel 5.3 使用内置的 Auth 组件实现多用户认证功能以及登陆才能访问后台的功能的一种实现方法
- Django内置的用户认证