用户认证
auth模块
from django.contrib import auth
django.contrib.auth提供了很多方法,接下来主要介绍三个:authenticate()、login(HttpRequest,user)、logout(request)
authenticate()
提供了用户认证,即验证用户名以及密码是否正确,一般需要username、password两个关键字参数
如果认证信息有效,会返回一个User对象,authenticate()会在User对象上设置一个属性标识认证后端认证了该用户,且该信息在后面的登录过程中是需要的。
当我们试图登录一个从数据库中直接取出来不经过authenticate()的User对象是会报错的
user = auth.authenticate(username='name', password='pwd')
login(HttpRequest,user)
该函数接受一个HttpRequest对象,以及一个认证了的User对象。此函数使用django的session框架给某个已认证的用户附加上session id等信息
from django.contrib import auth def login(request): name = request.POST.get("username") pwd = request.POST.get("pwd") user = auth.authenticate(username=name, password=pwd) if user is not None: auth.login(request,user) return redirect('/index/') else: return HttpResponse('login failed!')
logout(request)注销用户
该函数会接受一个HttpRequest对象,无返回值,当调用该函数时,当前请求的session信息会全部清除,该用户即使没有登录,使用该函数也不会报错.
from django.contrib import auth def logout(request): auth.logout(request) return redirect('/login/')
User对象
User对象属性:username,password(必填项)。password用哈希算法保存到数据库
is_staff:用户是否拥有网站的管理权限
is_active:是否允许用户登录,设置为"false",可以不用删除用户来禁止用户登录
is_authenticated()
如果是真正的User对象,返回值恒为True,用于检查用于是否已经通过了认证。通过认证并不意味着用户拥有任何权限,甚至也不检查该用户是否处于激活状态,这只是表名用户成功的通过了认证。
示例
from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required #方法一 def index(request): ''' 用户登录后才能访问该页面 如果用户没有登录就访问该页面的话直接跳转到登录页面 用户在跳转的登录页面完成登陆后,自动访问跳转到之前访问的地址 ''' if not request.user.is_authenticated(): return redirect('%s?next=%s'%(settings.LOGIN_URL, request.path)) #若用户没有登录,则会跳转到django默认的登录URL'/accounts/login/'(这个值可以在settings文件中通过LOGIN_URL进行更改) #并传递当前访问url的绝对路径(登录成功后,会重定向到该路径) return render(request, 'index.html') #方法二 #Django为我们设计好了一个用于此种情况的装饰器:login_required() @login_required def index(request): pass
创建用户
from django.contrib.auth.models import User def reg(request): user = User.objects.create_user(username='lary', password='123') user.save() return HttpResponse('ok')
check_password(password)
用户需要修改密码的时候,首先要让他输入原来的密码,如果给定的字符串通过了密码检查,返回True
修改密码
from django.contrib.auth.models import User def change_pwd(request): user=User.objects.get(username='lary') user.set_password(password='321') user.save() return HttpResponse('OK')
projectDemo
https://github.com/Leila2Utopia/authDemo