30Django扩展内建用户系统
我们自己创建用户表通常是这样的:
#这个是我们自己建的用户模型类 class User(models.Model): username = models.CharField('手机号', max_length=11, unique=True) password = models.CharField('密码', max_length=150) address = models.CharFiels('常用地址',max_length=100,blank=True) email = models.EmailField(_('email address'), blank=True) is_superuser = models.BooleanField('是否是管理员',default=False) is_staff = models.BooleanField('是否可以访问admin页面'default=False) is_active = models.BooleanField('是否是有效用户'default=True) date_joined = models.DateTimeField('用户创建的时间', default=timezone.now) last_login = models.DateTimeField('上一次的登录时间', default=timezone.now)
Django内建用户系统官方文档:
https://docs.djangoproject.com/zh-hans/4.0/topics/auth/
模型类的位置:from django.contrib.auth.models import User
基本模型操作:
创建普通用户:
from django.contrib.auth.models import User user=User.objects.create_user(username='zhangsan',password='123456')
创建超级用户:
from django.contrib.auth.models import User user=User.objects.create_superuser(username='zhangsan',password='123456')
删除用户
from django.contrib.auth.models import User try: user = User.objects.get(username='zhangsan') user.is_active = False #标记当前用户无效 user.save() print('删除普通用户成功') except: print('伤处普通用户失败')
密码校验:
如果用户名密码校验成功则返回对应的user对象,否则返回None
from django.contrib.auth import authenticate user=authenticate(username=username,password=password)
修改密码:
from django.contrib.auth.models import User try: user=User.objects.get(username='zhangsan') user.set_password('123456') user.save() return HttpResponse('密码修改成功') except: return HttpResponse('面膜修改失败')
登录状态保持:
from django.contrib.auth import login #伪代码 def login_view(request): user=authenticate(username=username,password=password) login(request,user)
登录状态校验:
例如后台管理的增删改查都是需要校验登录状态的,在云笔记中我们自己定义的校验装饰器,这里则不用
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)
内建用户字表-扩展字段:
方案1:通过建立新表,跟内建表做1对1映射(应用成本高,不推荐)
方案2:继承内建的抽象user模型类
以下三步就是要告诉Django,以后就要用我的这个表替换你系统内置的User表
步骤: 1添加新的应用 2定义模型类,继承AbstractUser 3setting.py中指明AUTH_USER_MODEL='应用名.类名' 注意:此操作要在第一个migrate之前进行
示例:
#1定义模型类 from django.db import models from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): phone=models.CharField(max_length=11, default='') #2在setting里配置AUTH_USER_MODEL='应用名.类名 AUTH_USER_MODEL = 'user.UserInfo' #3执行新创建项目后的第一个migrate python manage.py migrate #4小试牛刀添加用户 from user.models import UserInfo UserInfo.objects.create_user(username='zhangsan', password='123456',phone='17600588787')

浙公网安备 33010602011771号