1,建立static存放靜态檔案
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的,而且這個使用者表很多字段不是我們建立,是因為我們呢繼承了 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
是對輸入的内容進行校驗,是否滿足相關要求,這裡就這幾道app下面的一個
RegisterForm
檔案下的内容了,沒有的話建立一個
forms.py
class RegisterForm(forms.Form):
# 給注冊的輸入框設定格式
username = forms.CharField(required=True)
password = forms.CharField(required=True,min_length=5)
# 也就是說,username和password不能為空 required就是這個意思,其次 密碼最小是5位,如果不滿足此要求會有提示資訊
從上面的截圖我們可以看到,隻有當輸入是合理的時候才會注冊成功,這裡所謂的合理就是RegisterForm裡面來決定的
檢視資料庫
我們可以看到. 這裡已經把剛才的資料庫存進去了,并且是不會顯示密碼的,但是密碼就在資料庫裡面
更多内容請看下一篇播客…