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中显示出来。

 

posted @ 2017-12-14 21:15  hello沃德  阅读(74)  评论(0)    收藏  举报