創建Form類時,最重要的部分是定義表單的字段。每個字段都有自定義驗證邏輯,以及一些其他鉤子。本文圍繞可以在表單中使用的各種字段以及與 Django Forms 相關的各種功能和技術展開。表單基本上用於以某種方式從用戶那裡獲取輸入,並將該信息用於數據庫的邏輯操作。例如,通過輸入用戶的姓名、電子郵件、密碼等來注冊用戶。Django 將 Django 表單中定義的字段映射到 HTML 輸入字段。Django 處理表單中涉及的三個不同部分的工作:
請注意,由 Django 表單完成的所有類型的工作都可以使用高級 HTML 內容完成,但 Django 使它更容易和高效,尤其是驗證部分。一旦你掌握了 Django 表單,你就會忘記 HTML 表單。語法: Django Fields 像 Django Model Fields 一樣工作,語法如下:
field_name = forms.FieldType(**options)
例子:
from django import forms
# creating a form
class GeeksForm(forms.Form):
title = forms.CharField()
description = forms.CharField()
使用 Django 表單
要使用 Django Forms,需要有一個項目和一個在其中工作的應用程序。啟動應用程序後,您可以在 app/forms.py 中創建一個表單。在開始使用表單之前,讓我們檢查一下如何啟動項目並實現 Django Forms。
創建 Django 表單
在 Django 中創建表單與創建模型完全相似,需要指定表單中存在哪些字段以及類型。例如,要輸入注冊表單,可能需要名字 (CharField)、卷號 (IntegerField) 等。 句法:
from django import forms
class FormName(forms.Form):
# 每個字段都將被映射為 HTML 中的輸入字段
field_name = forms.Field(**options)
創建表單,在 geeks/forms.py 中輸入代碼,
# import the standard Django Forms
# from built-in library
from django import forms
# creating a form
class InputForm(forms.Form):
first_name = forms.CharField(max_length = 200)
last_name = forms.CharField(max_length = 200)
roll_number = forms.IntegerField(
help_text = "Enter 6 digit roll number"
)
password = forms.CharField(widget = forms.PasswordInput())
渲染 Django 表單
Django 表單字段有幾種內置方法可以簡化開發人員的工作,但有時需要手動實現一些東西來自定義用戶界面(UI)。表單帶有 3 個內置方法,可用於呈現 Django 表單字段。
- {{ form.as_table }}會將它們呈現為包裹在 <tr> 標簽中的表格單元格
- {{ form.as_p }}會將它們呈現在 <p> 標簽中
- {{ form.as_ul }}會將它們呈現在 <li> 標簽中
要將此表單呈現為視圖,請移至 views.py 並創建一個 home_view,如下所示。
from django.shortcuts import render
from .forms import InputForm
# Create your views here.
def home_view(request):
context ={}
context['form']= InputForm()
return render(request, "home.html", context)
在視圖中,只需在 forms.py 中創建上面創建的表單類的一個實例。現在讓我們編輯模板 > home.html
<form action = "" method = "post">
{% csrf_token %}
{{form }}
<input type="submit" value=Submit">
</form>
現在,訪問http://localhost:8000/
從模型創建 Django 表單
Django ModelForm 是一個用於將模型直接轉換為 Django 表單的類。如果您正在構建一個數據庫驅動的應用程序,那麼您很可能擁有與 Django 模型緊密映射的表單。現在,當我們准備好項目後,在 geeks/models.py 中創建一個模型,
# import the standard Django Model
# from built-in library
from django.db import models
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
# fields of the model
title = models.CharField(max_length = 200)
description = models.TextField()
last_modified = models.DateTimeField(auto_now_add = True)
img = models.ImageField(upload_to = "images/")
# renames the instances of the model
# with their title name
def __str__(self):
return self.title
要直接為此模型創建表單,請進入 geeks/forms.py 並輸入以下代碼:
# import form class from django
from django import forms
# import GeeksModel from models.py
from .models import GeeksModel
# create a ModelForm
class GeeksForm(forms.ModelForm):
# specify the name of model to use
class Meta:
model = GeeksModel
fields = "__all__"
現在訪問http://127.0.0.1:8000/,