天天看點

xadmin使用(二)使用者登陸

1,建立static存放靜态檔案

xadmin使用(二)使用者登陸

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使用(二)使用者登陸
xadmin使用(二)使用者登陸
我們可以看到資料庫中建立的表是xadmin的,而且這個使用者表很多字段不是我們建立,是因為我們呢繼承了 AbstractUser

定義一個注冊的頁面

<!DOCTYPE html>
<html lang="en">
{% load staticfiles %}
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</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

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使用(二)使用者登陸
xadmin使用(二)使用者登陸
xadmin使用(二)使用者登陸
從上面的截圖我們可以看到,隻有當輸入是合理的時候才會注冊成功,這裡所謂的合理就是RegisterForm裡面來決定的

檢視資料庫

xadmin使用(二)使用者登陸

我們可以看到. 這裡已經把剛才的資料庫存進去了,并且是不會顯示密碼的,但是密碼就在資料庫裡面

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