上一篇博文學習了Django的View和urls,接下來是對django form 和 template的學習。
1 django form
django form為我們提供了便捷的方式來創建一些HTML獲取數據的元素標簽。Django form內建widget請點這里
我們用django form來構建一個十分常見的用戶注冊的form表單,首先在myBlog文件目錄下新建一個forms.py
文件,並且添加如下內容:
from django import forms #導入forms
class RegisterForm(forms.Form):
"""用戶注冊時,用於獲取用戶基礎信息的表單."""
SEX_CHIOCES=(
(1,'男'),
(2,'女'),
)
username=forms.CharField (label='用戶名',max_length=50)
Email=forms.EmailField(label='郵箱地址',required=False)#required如果不指定則默認為Ture(該項)必須填寫,required=False允許不填寫
password=forms.CharField(label='密碼',max_length=50,widget=forms.PasswordInput)
password_check=forms.CharField(label='密碼確認',max_length=50,widget=forms.PasswordInput)
gender=forms.ChoiceField(label='性別',widget=forms.Select,choices=SEX_CHIOCES)
上面的代碼,我們首先導入了django的forms,然后自定義了一個名為RegisterForm的表單類。這里需要強調的是和自定義視圖類相似,自定義form表單必須要繼承forms.Form這個類。
2. template模板
首先在myBlog文件目錄下新建一個myBlogTemplate的文件目錄。在myBlogTemplate下新建一個register.html的文件,添加下面的內容:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>用戶注冊頁面</title>
</head>
<body>
<form class="" action="index.html" method="post">
{{ reg_form }}<!--占位符-->
<button type="submit" name="sub_btn">確認注冊</button>
</form>
</body>
</html>
3 設置template模板路徑
打開項目文件目錄下的setting.py文件,找到TEMPLATES的list,在前面添加template模板路徑變量,並且把模板路徑添加到匹配路徑中:
BLOG_TEMPLATE=os.path.join(BASE_DIR,'myBlog/BlogTemplate')#定義模板的路徑
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BLOG_TEMPLATE],#把模板路徑添加到匹配路徑list中
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
4 在views.py中使用自定義form和template
編輯myBlog文件目錄下的view.py文件。首先引入我們剛才自定義的form表單:
from myBlog.forms import RegisterForm#導入我們在forms.py自定義的form表單
接着添加下面的代碼,作用是定義一個名為RegisterView的視圖類,並且定義了GET請求的處理方法:
class RegisterView(View):
"""用於處理用戶注冊相關的請求"""
def get(self,request):
template_name='register.html'#模板名稱
form=RegisterForm()#獲取一個RegisterForm的實例
return render(request,template_name,{'reg_form':form}) #返回請求的響應,並且渲染模板
還記得我們在新建的register.html文件中有一個占位符{{ reg_form }}
么?
參數中的字典{'reg_form':form}
意思是用form這個后台傳回的實例取代模板中的占位符。
5 設置路由urls.py
編寫完視圖類,接下來就是配置路由了,編輯myBlog下的urls.py文件進行映射:
from django.contrib import admin
from django.urls import path
from myBlog.views import HollowView , RegisterView#導入RegisterView
urlpatterns = [
path('admin/', admin.site.urls),
path('',HollowView.as_view()),
path('registe',RegisterView.as_view()),#把url請求映射到RegisterView
]
接下來就可以啟動服務python manage.py runserver
,用瀏覽器訪問127.0.0.1:8000/blog/regist
就可以看到我們自定義的form顯示在瀏覽器上了:
.
我們再來測試一下,往里面填入一下內容然后點擊‘提交’:
.
可以看出密碼部分是隱藏了輸入內容的,而且郵箱格式不對的話會自動提示!
那么,Django form表單和HTML表單到底有什么不一樣呢?實際上是一樣的。我們可以用瀏覽器查看網頁的HTML代碼(按F12,調出開發者工具,點擊上面的Elements查看當前頁面元素),點開body節點和form節點可以看到:
。
Django form已經轉化成了html格式的代碼。