Auth模块是Django自带的宇哥用户认证模块,里面包括:用户认证,用户登录,用户认证,注销,修改密码等功能。
它内置统一的认证体系--auth:它默认使用auth_user 表来存储用户数据
from django.contrib import auth
提供用户认证功能,及用户名和密码是否争取。需要username,password两个关键字参数
用法
user = authenticate(username='usernamer',password='password')
用法:
form django.contrib import auth
def auth_login(request):
if request.method =='POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 认证用户输入的用户名和密码是否正确
user_obj = auth.authenticate(username=username,password=password)
if user_obj:
# 记录用户的状态,一旦认证成功可以在任何地方通过request.user来获取当前的登录的用户
# request.senssion['name']='jasong'
auth.login(request,user_obj) # 内部自动生成一个相关的session值,把用户信息放入到session中
return HttpResponse('login successfully')
return render(request,'auth_log.html')
# 只要登录成功执行了 auth.login(request,user)
# 之后再任何视图函数中都可以通过request.user 获取当前用户对象
# 当没有执行auth.login, request.user打印出来的都是匿名用户
# 如何判断用户是否通过auth.login登录?
# request.auth.is_auth
def logout(request):
auth.logout(request)
return HttpResponse('ok')
from django.contrib.auth.decorators import login_required
@login_required(login_url='/auth_login/') # 局部配置
def auth_home(request):
return HttpResponse('home必须登录才能访问')
# 在setting配置文件中指定auth登录不合法的统一跳转路径
LOGING_URL = '/login/' # 既可以局部配置,也可以全局配置
@login_required
def auth_home(request):
return HttpRespionse('ok')
from django.contrib.auth.models import User
def register(request):
User.objects.create() # 不能使用,这个产生的密码是名文
User.objects.createuser() # 创建普通用户
user.objects.createsuperuser() # 创建超级用户
def set_password(request):
old_password = request.POST.get(old_password)
new_password = request.POST.get(new_password)
# 校验输入的旧密码是否与现有密码一致
is_res = request.user.check_password(old_password)
if is_res:
# 修改密码为新密码
request.user.set_password('new_password')
# 下面的保存操作千万不能忘记
request.user.save()
return HttpResoponse('ok')
一对一关联
from dajango.contrib.auth.model import User
class UserDetail(models.Model):
phone = models.Charfield(max_length=11)
user = models.OneToOneField(to=User)
面向对象继承
from django.contrib.auth.models import User,AbstractUser
class UserInfo(abstractUser):
phone = models.Charfield(maxlength=32)
# 需要在settings文件中指定不再使用auth_user表,而是使用我自己创建的user_info
AUTH_USER_MODEL = 'app名.models里面对应的模型表名'
"""
自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。
库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现
"""
原文:https://www.cnblogs.com/king-home/p/11061663.html