Django基礎三(form和template)


上一篇博文學習了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格式的代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM