用户认证组件
1 from django.contrib import auth 2 3 从auth_user表中获取对象,没有返回None,其中密码为密文,使用了加密算法 4 user = auth.authenticate(username=user, password=pwd) 5 6 7 让上边找到的user对象赋给request.user使其成为全局变量,方便之后调用 8 给已认证的用户附加上seession id 等信息 9 auth.login(request, user) # request.user:当前登陆对象 10 11 12 from django.contrib.auth import logout 13 注销用户:删除session表对应的记录 14 logout(request)
User对象
用于检查用户是否已经登陆True/False(user/) user.is_authenticated user.is_amonymous # 是不是匿名用户 若是没有登陆,跳转到登陆界面,登录成功在跳转回来 一、自定义 def my_view(request): if not request.user.is_authenticated: return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) 二、django内置 from django.contrib.auth.decorators import login_required @login_required def my_view(request): ... 咱们须要配置登陆界面路径LOGIN_URL="/login/"
auth_user表操做
1 from django.contrib.auth.models import User 2 -------------建立新用户------------------- 3 user = User.objects.create_user(username='',password='',email='') 4 User.objects.create_superuser() 5 ---------------------检查密码正误----- 6 用户须要修改密码的时候 首先要让他输入原来的密码 ,若是给定的字符串经过了密码检查,返回 True 7 print("raw_pwd", user.check_password(pwd))
8 -------------------------修改密码--------
9 user = User.objects.get(username='')
10 user.set_password(password='')
11 user.save
1 def sign_up(request): 2 3 state = None 4 if request.method == 'POST': 5 6 password = request.POST.get('password', '') 7 repeat_password = request.POST.get('repeat_password', '') 8 email=request.POST.get('email', '') 9 username = request.POST.get('username', '') 10 if User.objects.filter(username=username): 11 state = 'user_exist' 12 else: 13 new_user = User.objects.create_user(username=username, password=password,email=email) 14 new_user.save() 15 16 return redirect('/book/') 17 content = { 18 'state': state, 19 'user': None, 20 } 21 return render(request, 'sign_up.html', content)
1 @login_required 2 def set_password(request): 3 user = request.user 4 state = None 5 if request.method == 'POST': 6 old_password = request.POST.get('old_password', '') 7 new_password = request.POST.get('new_password', '') 8 repeat_password = request.POST.get('repeat_password', '') 9 if user.check_password(old_password): 10 if not new_password: 11 state = 'empty' 12 elif new_password != repeat_password: 13 state = 'repeat_error' 14 else: 15 user.set_password(new_password) 16 user.save() 17 return redirect("/log_in/") 18 else: 19 state = 'password_error' 20 content = { 21 'user': user, 22 'state': state, 23 } 24 return render(request, 'set_password.html', content)
扩展auth表
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): tel = models.CharField(max_length=32) 在setting配置AUTH_USER_MODEL = "app01.UserInfo"
from django.contrib.auth.models import User class UserInfo(User): tel = models.CharField(max_length=32) class Meta:
super(User.Meta)
。。。。
不用再配置里更改了