xadmin使用(二)用户登陆

1,创建static存放静态文件

xadmin使用(二)用户登陆_第1张图片

2,创建用户模型类继承 AbstractUser

# 用户模型类
class UserProfile(AbstractUser):
    # 这个字段在后台是可以下拉的选项
    gender_choices = (
        ('male', '男'),
        ('female', '女'),
    )
    nick_name = models.CharField('昵称', max_length=50, default='')
    birthday = models.DateField('生日', null=True, blank=True)
    gender = models.CharField('性别', max_length=12, choices=gender_choices, default='female')
    adress = models.CharField('地址', max_length=100, default='')
    mobile = models.CharField('手机号', max_length=11, null=True, blank=True)

    # Django 模型中的verbose_name我们常常可能需要使用。
    # 比如将数据库里面的数据导出成csv文件,那么csv文件的表头的名字可以通过取每个字段的verbose_name来获取,
    # 数据可以通过queryset语句来获取。 这样制作出来的csv表就能想数据库一样,字段名和字段值一一对应了。
    class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name

    def __str__(self):
        # AbstractUser这个类里面有 username这个属性
        return self.username


'''
为什么要继承AbstractUser这个类来做user呢,这个类在django里面已经注册过了,
系统已经自带了很多属性,上面使我们主动添加的属性,等下看数据库就知道了
'''

在setting.py中重载这个user

# 重载
AUTH_USER_MODEL = "users.UserProfile"

执行迁移文件命令后查看数据库
xadmin使用(二)用户登陆_第2张图片
在这里插入图片描述

我们可以看到数据库中创建的表是xadmin的,而且这个用户表很多字段不是我们创建,是因为我们呢继承了 AbstractUser

定义一个注册的页面


<html lang="en">
{% load staticfiles %}
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
注册<br>
<form action="{% url 'register' %}" method="post">
    用户名 <input type="text" name="username" value=""><br>
    密码   <input type="text" name="password" value=""><br>
    <input type="submit" value="注册"><br>
    {
    { msg }}
    {% csrf_token %}
form>
body>
html>

msg 是注册弹出来的信息,输入是否合理,是否注册成功

url

    path('register/', RegisterView.as_view(), name="register"),

view视图

class RegisterView(View):
    def get(self,request):
        return render(request,'register.html',{
     })
    def post(self, request):
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            username = request.POST.get("username")
            password = request.POST.get("password")
            if UserProfile.objects.filter(username=username):
                return render(request,'register.html', {
     'msg':"用户已经存在"})
            else:
                user = UserProfile()
                user.username = username
                user.password = make_password(password)
                user.is_active= False
                user.save()
                return  render(request, 'register.html', {
     "msg":"注册成功"})
        else:
            return render(request, 'register.html', {
     "msg": "输入不正确"})

注意这里的make_password 是调用from django.contrib.auth.hashers import make_password包下的方法,不至于让密码很明显的看到,这样一来,在数据库里面也看不到密码信息,其次这里的RegisterForm是对输入的内容进行校验,是否满足相关要求,这里就这几道app下面的一个forms.py文件下的内容了,没有的话创建一个

class RegisterForm(forms.Form):
    # 给注册的输入框设置格式
    username = forms.CharField(required=True)
    password = forms.CharField(required=True,min_length=5)
    # 也就是说,username和password不能为空 required就是这个意思,其次 密码最小是5位,如果不满足此要求会有提示信息

xadmin使用(二)用户登陆_第3张图片
xadmin使用(二)用户登陆_第4张图片
xadmin使用(二)用户登陆_第5张图片

从上面的截图我们可以看到,只有当输入是合理的时候才会注册成功,这里所谓的合理就是RegisterForm里面来决定的

查看数据库

在这里插入图片描述
我们可以看到. 这里已经把刚才的数据库存进去了,并且是不会显示密码的,但是密码就在数据库里面

更多内容请看下一篇播客…

你可能感兴趣的:(django,python,xadmin,用户登陆,Form的使用,认证)