django的form表单(继续学习钩子day79)
先在视图函数里定义一个类,让他继承django的表单样式 (from django import forms)
类里面继承forms.Form (和创建表格类似)
接下来创建要传到html文件的对象(input框 或者 select选择框),例如让他在html文件中渲染一个input框是,而且规定了框内输入的类型,长度等
from django import forms class NameForm(forms.Form): your_name = forms.CharField(label='Your name', max_length=100)
接下来就在视图函数中调用这个函数先去实现一下get请求,先渲染出整个页面的请求。
from django.shortcuts import render from django.http import HttpResponseRedirect from .forms import NameForm def get_name(request): form = NameForm() return render(request, 'name.html', {'form': form})
<form action="/your-name/" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Submit" /> </form>

点击提交后执行post请求,
from django.shortcuts import render from django.http import HttpResponseRedirect from .forms import NameForm def get_name(request): # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: form = NameForm(request.POST) # check whether it's valid: if form.is_valid(): # process the data in form.cleaned_data as required # ... # redirect to a new URL: return HttpResponseRedirect('/thanks/') # if a GET (or any other method) we'll create a blank form else: form = NameForm() return render(request, 'name.html', {'form': form})
form = NameForm(request.POST) 在创建一个表单实例,用拿到数据去填充他。这叫做绑定数据至表单。
如果form.is_valid()是个True,说明输入的内容符合我们的规定
如果为false,说明不符合我们设置的规定(任何一条不符合规定都是false)。就到最后一步直接render到页面中,此时的form已经不会像在get请求一样里面的填充为空值,所以在渲染页面时会
保留我们之前的不符合规定的内容,方便我们再次去修改。
这是点击完提交后(因为我们设置了里面的最短值)
Widgets:
input标签的name就是user

Widgets:每个字段都有一个对应的widget,用来设置标签的属性,通常有默认的值。
一些内置的插件:
TextInput(Input)
NumberInput(TextInput)
EmailInput(TextInput)
URLInput(TextInput)
PasswordInput(TextInput)
HiddenInput(TextInput)
Textarea(Widget)
DateInput(DateTimeBaseInput)
DateTimeInput(DateTimeBaseInput)
TimeInput(DateTimeBaseInput)
CheckboxInput
Select
NullBooleanSelect
SelectMultiple
RadioSelect
CheckboxSelectMultiple
FileInput
ClearableFileInput
MultipleHiddenInput
SplitDateTimeWidget
SplitHiddenDateTimeWidget
SelectDateWidget
常用的选择插件:
# 单radio,值为字符串
# user = fields.CharField(
# initial=2,
# widget=widgets.RadioSelect(choices=((1,'上海'),(2,'北京'),))
# )
# 单radio,值为字符串
# user = fields.ChoiceField(
# choices=((1, '上海'), (2, '北京'),),
# initial=2,
# widget=widgets.RadioSelect
# )
# 单select,值为字符串
# user = fields.CharField(
# initial=2,
# widget=widgets.Select(choices=((1,'上海'),(2,'北京'),))
# )
# 单select,值为字符串
# user = fields.ChoiceField(
# choices=((1, '上海'), (2, '北京'),),
# initial=2,
# widget=widgets.Select
# )
# 多选select,值为列表
# user = fields.MultipleChoiceField(
# choices=((1,'上海'),(2,'北京'),),
# initial=[1,],
# widget=widgets.SelectMultiple
# )
# 单checkbox
# user = fields.CharField(
# widget=widgets.CheckboxInput()
# )
# 多选checkbox,值为列表
# user = fields.MultipleChoiceField(
# initial=[2, ],
# choices=((1, '上海'), (2, '北京'),),
# widget=widgets.CheckboxSelectMultiple
# )
比如我们一起提交了多个input框,在验证完成后,我们可以去取里面的值。
form.cleaned_data:输入符合规定值
form.errors:不符合规定的值
例如:
# self.cleaned_data={"pwd":"12312412"}
# self.errors={"user":"yuan",}
得到的都是一个字典

上图有我们设置的一些常用的错误信息,我们可以利用填充后的数据在html中显示出来。



浙公网安备 33010602011771号