AbstractUser
定义用户信息模块的时候,可继承django自带的AbstractUser模块进行自定义用户信息表
- 导入:from django.contrib.auth.models import AbstractUser
- 在models.py模块中创建自定义用户类,代码如下:
SEX_CHOICES = (
('0', '男'),
('1', '女'),
)
class UserInfo(AbstractUser):
cellphone = models.CharField(max_length=11, null=False, verbose_name='手机')
realname = models.CharField(max_length=50, null=False, verbose_name='姓名')
uidentity = models.CharField(max_length=18, null=False, verbose_name='身份证')
address = models.CharField(max_length=150, null=False, verbose_name='地址')
sex = models.CharField(choices=SEX_CHOICES, default='0', max_length=10, verbose_name='性别') #verbose_name设置管理系统中该字段的名称
def __str__(self):
return self.username
class Meta:
db_table = 'Users'
verbose_name = '用户信息表'
verbose_name_plural = verbose_name
- 在settings.py文件中设置自定义模块的位置:
AUTH_USER_MODEL = 'userinfo.Userinfo'
AbstractUser模块自带的字段名
这些字段名不用我们专门设置便可使用
admin管理
如果需要在后台管理用户信息,则在admin.py文件中进行设置
- 导入:from .models import *
- 写类(如果不进行高级管理,则可直接略过)
class UsersAdmin(admin.ModelAdmin):
list_display = ['username']
fields = ['username', 'password', 'realname']
- 注册
如果不进行第二步,则注册代码如下
admin.site.register(UserInfo)
否则
admin.site.register(UserInfo,UsersAdmin)
authenticate
django框架提供了两个函数方法进行验证和登陆操作,分别是authenticate()和login()
- 导入:
from django.contrib import auth
- 在views.py中使用,代码如下:
def login_(request):
if request.method == "POST":
username = request.POST.get('username', '')
password = request.POST.get('userpwd', '')
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return redirect('/')
else:
return render(request, 'login.html', {'message':"用户名或密码错误"})
authenticate()方法对用户名和密码进行验证,如果用户名和密码正确则返回一个user对象,进行使用login()方法登录操作;否则返回None。
注意:user.is_active是用来判断用户名是否有效
3. 退出使用logout()方法
def logout_(request):
auth.logout(request)
return redirect('/')
- user.is_authenticated:始终返回True。这是判断用户是否已通过身份验证的一种方式。这并不意味着任何权限,也不会检查用户是否处于活动状态 –它仅表示用户提供了有效的用户名和密码
def register(request):
if request.user.is_authenticated():
return redirect('/')
else:
return render(request, 'register.html')
make_password
django自带的注册加密方法
- 导入:
from django.contrib.auth.hashers import make_password, check_password
- 语法:
make_password('要加密的字符串',"",加密方法)
第二个参数写固定的字符串,使每次生成的加密相同
第三个参数为加密方法,有:pbkdf2_sha256
pbkdf2_sha1
bcrypt_sha256
bcrypt
sha1
unsalted_md5
crypt
代码例子如下:
new_user.password = make_password(request.POST.get('userpwd'), "hehe", 'pbkdf2_sha1')