django-form表單

1,新建一個form.py文件,新建數據結構

Snipaste_2019-06-18_16-47-18

2對視圖模塊作修改,

  • 在頂部要導入咱們寫的forms模塊:from . import formshtml

  • 對於非POST方法發送數據時,好比GET方法請求頁面,返回空的表單,讓用戶能夠填入數據;前端

  • 對於POST方法,接收表單數據,並驗證;django

  • 使用表單類自帶的is_valid()方法一步完成數據驗證工做;安全

  • 驗證成功後能夠從表單對象的cleaned_data數據字典中獲取表單的具體值;數據結構

  • 若是驗證不經過,則返回一個包含先前數據的表單給前端頁面,方便用戶修改。也就是說,它會幫你保留先前填寫的數據內容,而不是返回一個空表!函數

    3,修改html文件

    Snipaste_2019-06-19_15-14-49
    {{ login_form }}就直接完成了表單內容的生成工做!login_form這個名稱來自你在視圖函數中生成的form實例的變量名!ui

  • 可是,它不會生成3d

    ...
    標籤,這個要本身寫;

  • 使用POST的方法時,必須添加{% csrf_token %}標籤,用於處理csrf安全機制;code

  • Django自動爲每一個input元素設置了一個id名稱,對應label的for參數orm

  • 註冊連接和登陸按鈕須要本身寫,Django不會幫你生成!
    Django的form表單功能,自動生成了下面部分的代碼:

<tr><th><label for="id_password">密碼:</label></th><td><input type="password" name="password" maxlength="256" required id="id_password"></td></tr> 
  <tr><th><label for="id_username">用戶名:</label></th><td><input type="text" name="username" maxlength="128" required id="id_username"></td></tr>

可是這種生成的但沒有渲染效果很差看,以下

Snipaste_2019-06-19_15-49-04

四、手動渲染表單字段

能夠經過{{ login_form.name_of_field }}獲取每個字段,而後分別渲染,以下例所示:

<div class="form-group">
  {{ login_form.username.label_tag }}
  {{ login_form.username}}
</div>
<div class="form-group">
  {{ login_form.password.label_tag }}
  {{ login_form.password }}
</div>

這樣Bootstrap4不會生效!仔細查看最終生成的頁面源碼,你會發現,input元素裏少了form-control的class,以及placeholder和autofocus,

在form類裏添加attr屬性便可,以下所示修改login/forms.py

from django import forms


class UserForm(forms.Form):
    username = forms.CharField(label="用戶名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': "Username",'autofocus': ''}))
    password = forms.CharField(label="密碼", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder': "Password"}))
相關文章
相關標籤/搜索