Django内建的用户系统
自建模型类位置
from django.contrib.auth.models import User
mysql - auth_user
基本字段:
- username
- password
- first_name
- last_name
- is_superuser 是否管理员账号
- is_staff 是否可以访问admin管理界面
- is_active 是否活跃用户,伪删除,True、False
- last_login 上次用户登录时间
- date_joined 创建时间
基本操作
必填项用户名密码,自动hash
创建用户
from django.contrib.auth.models import User
from django.contrib.auth import login
user = User.objects.create_user(username='用户名',password='密码',……)
# 创建用户后就保持登录,要调用login写session
login(request,user)
创建超级用户
from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用户名',password='密码',……)
删除用户
使用伪删除
from django.contrib.auth.models import User
try:
user = User.objects.get(username='用户名')
user.is_active = False
user.save()
print('删除用户成功')
except:
print('删除普通用户失败')
用户密码校验
from django.contrib.auth import authenticate
user = authenticate(username=username,password=password)
说明:
如果用户名密码校验成功,返回user对象,否则返回None
用户密码修改
from django.contrib.auth.models import User
try:
user = User.objects.get(username='用户名')
user.set_password('newpassword')
user.save()
print('修改密码成功')
except:
print('修改密码失败')
登录状态保持
只存session,时间不可控
from django.contrib.auth import login
def login_view(request):
user = authenticate(username=username,password=password)
login(request,user)
登录状态校验
系统内建了装饰器,没登录跳转地址在settings.py中修改
from django.contrib.auth.decorators import login_required
@login_required
def index_view(request):
# 要求在登陆状态下才可以访问
# 当前登录用户可以通过request.user获取
login_user = request.user
登录状态取消
from django.contrib.auth import logout
def logout_view(request):
logout(request)
案例
用户登录,视图校验登录后才能访问首页
def login_view(request):
#登录
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
username = request.POST['USERNAME']
password = request.POST['password']
# 调用内建用户校验
user = authenticate(username=usrname,password=password)
if not user:
# 用户名或密码错误
return HttpResponse('---用户名或密码错误---')
else:
# 校验成功,保持会话状态
login(request,user)
return HttpResponseRedirect('/index')
@login_required
def index_view(request):
# 首页,必须登录才能访问(有session)
# 无session跳转值settings.py里面的LOGIN_URL
user = request.user
return HttpResponse('测试首页,欢迎用户%s'%(user.username))
内建用户表字段扩建
继承内建的抽象user模型类,将所有字段继承过来,django调用继承丰富后的新表,实现步骤
- 添加新的应用
- 定义模型类继承 AbstractUser
- settings.py中指明AUTH_USER_MODEL = ‘应用名.类名’.
上述步骤必须在第一次migrate之间进行
user/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
phone = models.CharField(max_length=11,default='')
setting.py添加配置
AUTH_USER_MODEL = ‘user.UserInfo’
migrate!!
添加用户
from user.models import UserInfo
UserInfo.objects.create_user(username='xx',password='xxxx',phone='1233333')