创建 Form 类时,最重要的部分是定义表单的字段。每个字段都有自定义验证逻辑,以及一些其他钩子。本文围绕可以在表单中使用的各种字段以及与 Django Forms 相关的各种功能和技术展开。表单基本上用于以某种方式从用户那里获取输入,并将该信息用于数据库的逻辑操作。例如,通过输入用户的姓名、电子邮件、密码等来注册用户。
Django 将 Django 表单中定义的字段映射到 HTML 输入字段。Django 处理表单中涉及的三个不同部分的工作:
准备和重组数据以使其准备好进行渲染
为数据创建 HTML 表单
接收和处理客户提交的表格和数据
请注意,由 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/,
评论