Django自带Auth模块
目录
# 创建超级用户
python manage.py createsuperuser
# 使用auth模块,要用就全用
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
# Create your views here.
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) # 必须同时传入用户名和密码,返回用户对象或者None
if user_obj:
# 保存用户状态
auth.login(request,user_obj) #类似于request.session[''] = user_obj,执行后就可以使用request.user获取当前登录的用户对象
return redirect('home')
return render(request,'login.html')
@login_required(login_url='/login/') # 局部指定登录页面,优先级高于settings.py中的全局配置
def home(request):
# if request.user.is_authenticated(): # 判断是否登录
# return HttpResponse('你登录了,这里是你的主页')
return HttpResponse('这里是主页')
@login_required
def modify_pwd(request): # 修改密码
if request.method == 'POST':
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
confirm_password = request.POST.get('confirm_password')
if new_password == confirm_password:
is_right = request.user.check_password(old_password) # 自动加密比对数据库
if is_right:
request.user.set_password(new_password) #修改对象属性
request.user.save() # 操作数据库
return render(request,'modify_pwd.html',locals())
@login_required
def logout(request): # 注销
auth.logout(request) # 类似request.session.flush()
return redirect('/login/')
def register(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# User.objects.create(username=username,password=password) # 会明文存储密码
User.objects.create_user(username=username,password=password) # 创建普通
# 创建超级用户create_superuser
return render(request,'register.html')
auth模块小结
# 比对用户名和密码
user_obj = auth.authenticate(request,username=username,password=password) # 必须同时传入用户名和密码,返回用户对象或者None
# 保存用户状态
auth.login(request,user_obj) #类似于request.session[''] = user_obj,执行后就可以使用request.user获取当前登录的用户对象
# 判断当前用户是否登录
request.user.is_authenticated() # 判断是否登录
# 获取当前登录用户
request.user
# 校验用户是否登录装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/') # 局部指定登录页面,优先级高于settings.py中的全局配置
# settings.py LOGIN_URL = '/login/' 全局配置
# 修改密码
is_right = request.user.check_password(old_password) # 自动加密比对数据库
request.user.set_password(new_password) #修改对象属性
request.user.save() # 操作数据库
# 注销
auth.logout(request)
# 注册
from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password) # 创建普通用户
拓展auth_user表
class UserInfo(AbstractUser):
'''
如果继承了AbstractUser,在执行数据库迁移命令时就不会创建auth_user表,而会在userinfo表中包含所有auth_user表
的字段,并包含自己拓展的字段
但是:
1。需要在数据库设计阶段就明确不适用auth_user表,如果当前库已经创建了auth_user表,则该库不可执行以上继承
2.继承的类不要覆盖Abstract类中的字段名
3.需要在配置文件中声明用userinfo替换auth_user
AUTH__USER_MODEL = 'app01.UserInfo' 应用名.类名
'''
phone = models.CharField(max_length=16)