djangoForm组件

https://www.cnblogs.com/jabbok/p/9273786.html

在之前学习了html form信息传递到django,然后进行处理,但是这很不方便。

django有自己的组件Form

1 django Form的验证思路

前端:还是提交form表单

后端:在app.views的函数里,把请求传递到forms.py的forms.Form类,进行匹配,得到正确和错误信息。

主要有三部分只是,views里的响应机制,form.py里创建响应的表单类,html里的模板信息

views:

def user_login(request):
    if request.method == 'POST':    #当收到POST请求
        form = AddForm(request.POST)    #实例化表单类,将接受到的数据通过AddForm验证

        if form.is_valid():     #验证请求的内容是否验证通过。通过是True,否则False。
            a = form.cleaned_data['a']      #cleaned_data类型是字典,里面是提交成功后的信息
            b = form.cleaned_data['b']      #从表单类中获取的数据赋值给a,b。
            return HttpResponse(str(int(a) + int(b)))

    else:   #当收到GET请求
        form = AddForm()    #实例化表单类,展示表单类中的字段,表现到HTML就是<form>元素,实质就是渲染一张空表单,让用户填数据

    return render(request,'index.html',{'form':form})

def get_name(request):
    if request.method == 'POST':
        form = NameForm(request.POST)
        print(type(form),form)
        if form.is_valid():
                return HttpResponse('good!')
    else:
        form = NameForm()
        print(type(form),form)

    return render(request,'name.html',{'form':form})

  

forms

from django import forms

class AddForm(forms.Form):
    a = forms.IntegerField()    #表单类的字段会映射到HTML表单的<input>元素
    b = forms.IntegerField()    #这和models类似
    c = forms.IntegerField()    #forms可选多种字段类型,对应不同的HTML输入元素

class NameForm(forms.Form):
    your_name = forms.CharField(label='your name',max_length=120)

  

html

user_login:

{#    这是一个表单渲染#}
    <form method="post">
{#        防伪保护#}
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="提交">
    </form>

  

{{ form }}在get和post时,都会渲染为:

<tr><th><label for="id_a">A:</label></th><td><input type="number" name="a" required id="id_a"></td></tr>
<tr><th><label for="id_b">B:</label></th><td><input type="number" name="b" required id="id_b"></td></tr>
<tr><th><label for="id_c">C:</label></th><td><input type="number" name="c" required id="id_c"></td></tr>

  

getname:

<form action="/getname/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="提交">
</form>

  

{{ form }}在get和post的渲染,post多了一个value。

<tr><th><label for="id_your_name">your name:</label></th><td><input type="text" name="your_name" maxlength="120" required id="id_your_name"></td></tr>
<tr><th><label for="id_your_name">your name:</label></th><td><input type="text" name="your_name" value="jab" maxlength="120" required id="id_your_name"></td></tr>

  

 2 表单功能

 

posted @ 2018-10-12 14:53  jabbok  阅读(151)  评论(0编辑  收藏  举报