Django(part45)--forms模块(django setting)

网友投稿 313 2022-08-31


Django(part45)--forms模块(django setting)

学习笔记,仅供参考

文章目录

​​Django中的forms模块​​

​​使用forms模块的步骤​​​​定义表单类的语法​​​​在模板中解析form对象​​​​内置小部件widget​​​​举个例子​​

Django中的forms模块

在Django中提供了forms模块,用forms模块可以自动生成form表单的内部的表单控件,同时,在服务器端可以用对象的形式接收并操作客户端表单元素,并能对表单的数据进行服务器端验证。

forms模块的作用

通过forms模块,允许将表单与class相结合,允许通过class生成表单

使用forms模块的步骤

在应用中创建forms.py模块

导入django提供的forms

import django import forms

定义表单类(一个class会生成一个表单)

class FormName(forms.Form): pass

在表单类中增加类属性

一个类属性对应表单中的一个控件。

利用forms.Form类型的对象自动(或手动)生成表单内容

读取form表单并进行验证数据

定义表单类的语法

类属性 = forms.Field类型(参数)

Field类型

class ClassName(froms.Form): forms.CharField() #文本框 forms.ChoiceField() #下拉选项框

参数

label#控件前的文本widget#指定小部件initial#控件的初始值(主要针对文本框类型)required#是否为必填项,值为(True/False),默认为True

在模板中解析form对象

解析form对象

在视图中创建form对象,并将其发送到模板文件中进行解析:

def viewsName(request): form = forms.FormName() return render(request,'xx.html',locals())

在模板文件中解析:

{% for field in form %}{{field.label}}: {{field}}{% endfor %}{{form.as_p}}{{form.as_ul}}{{form.as_table}}

内置小部件widget

什么是小部件

小部件是指,生成在网页上的控件以及一些html属性。

常用的小部件类型

widget名称

对应和type类值

TextInput

type=‘text’

PasswordInput

type=‘password’

NumberInput

type=“number”

EmailInput

type=“email”

URLInput

type=“url”

HiddenInput

type=“hidden”

CheckboxInput

type=“checkbox”

CheckboxSelectMultiple

type=“checkbox”

RadioSelect

type=“radio”

Textarea

textarea标记(大文本框)

Select

select标记

SelectMultiple

select multiple 标记

小部件的使用

语法1:

类属性 = forms.CharField( label='xxx', widget=forms.小部件类型)

语法2(在指定控件类型的基础之上还能指定控件的一些html属性值):

类属性 = forms.CharField( label='xxx', widget=forms.小部件类型( attrs={ 'html属性名':'值', 'html属性名':'值', } ))

举个例子

首先,我们在userinfo应用下创建一个表单模块forms.py:

在forms.py模块中,我们敲入如下代码:

# -*- coding: utf-8 -*-from django import formsclass RegForm(forms.Form): username = forms.CharField(label = "输入昵称") password = forms.CharField(label = "输入密码") passwordRepeat = forms.CharField(label = "再次输入密码") #

在userinfo应用的模板文件夹templates下创建一个新的模板test_form.html:

在userinfo应用的urls.py文件中,我们添加一个路由:

from django.urls import re_pathfrom . import viewsurlpatterns = [ re_path(r'^test_form/', views.test_form), ]

在userinfo应用的views.py模块中,我们添加一个视图函数:

def test_form(request): if request.method == "GET": myform = forms.RegForm() #创建对象 return render(request, 'userinfo/test_form.html', locals()) else: print("其他请求")

在test_form.html模板中,我们敲入如下代码:

form表单

{% csrf_token %} {{myform.as_p}} {# 自动生成form表单的内部的表单控件 #}

我们向html> form表单

{% csrf_token %} {{myform.as_p}} {# 自动生成form表单的内部的表单控件 #}

在forms.py模块中,我又添加了一个手机号输入框,并设置此框内容可为空:

from django import formsclass RegForm(forms.Form): username = forms.CharField(label = "输入昵称") password = forms.CharField(label = "输入密码") passwordRepeat = forms.CharField(label = "再次输入密码") tele = forms.CharField(label = "手机号", required = False) #

我们再次向html> form表单

现在,我们给我们的表单加一些小部件,比如将文本框改为密码输入框:

from django import formsclass RegForm(forms.Form): username = forms.CharField(label = "输入昵称") password = forms.CharField(label = "输入密码", widget=forms.PasswordInput) passwordRepeat = forms.CharField(label = "再次输入密码", widget=forms.PasswordInput) tele = forms.CharField(label = "手机号", required = False) email = forms.CharField(label = "邮箱", required = False, widget=forms.EmailInput)

我们再次向http://127.0.0.1:8000/userinfo/test_form/发起请求:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django(part46)--form表单验证(django form)
下一篇:Django(part44)--制作分页(django分页器)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~