zoukankan      html  css  js  c++  java
  • Django表单

    1.构建一个Django表单的步骤:

    (1)定义一个Form类

    #forms.py
    
    from django import forms
    
    class NameForm(forms.Form):
        your_name = forms.CharField(label='Your name', max_length=100)
    

    (2)定义一个视图函数 

    #views.py
    
    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    from .forms import NameForm
    
    def get_name(request):    
        if request.method == 'POST':
            #如果表单提交的是POST请求,视图将创建一个表单实例
    #并使用请求中的数据填充它(即绑定数据至表单) form = NameForm(request.POST)
    if form.is_valid(): # process the data in form.cleaned_data as required # ... # redirect to a new URL: return HttpResponseRedirect('/thanks/') #如果访问视图的是一个GET请求,它将创建一个空的表单实例并将它放置到要渲染的模板的上下文中。
    #这是我们在第一次访问该URL时预期发生的情况。 else: form = NameForm() #如果之前的表单验证没通过,也将使用绑定数据的表单重新渲染模板。 return render(request, 'name.html', {'form': form})

    Form 的实例具有一个is_valid() 方法,它为所有的字段运行验证的程序。当调用这个方法时,如果所有的字段都包含合法的数据,它将:

    • 返回True
    • 将表单的数据放到cleaned_data 属性中。

    (3)定义一个视图模板

    <form action="/your-name/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>
    
    • Django 原生使用“csrf_token” 模板标签支持简单易用的跨站请求伪造的防护
    • 如果你的表单包含URLFieldEmailField 或其它整数字段类型,Django 将使用urlemailnumber 这样的HTML5 输入类型。默认情况下,浏览器可能会对这些字段进行它们自身的验证,这些验证可能比Django 的验证更严格。如果想禁用这个行为,设置form 标签的novalidate 属性,或者指定一个不同的字段,如TextInput

    2.表单字段

    • 每个表单字段都有一个对应的Widget 类,它对应一个HTML 表单Widget,例如<input type="text">在大部分情况下,字段都具有一个合理的默认Widget。例如,默认情况下,CharField 具有一个TextInput Widget,它在HTML 中生成一个<input type="text">如果你需要<textarea>,在定义表单字段时你应该指定一个合适的Widget,例如 message = forms.CharField(widget=forms.Textarea)

    3.表单数据

    • 验证后的表单数据将位于form.cleaned_data 字典中。这些数据已经转换好为Python 的类型。
    if form.is_valid():
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        sender = form.cleaned_data['sender']
    

    4.表单模板

    • {{form.as_table}} 以表格的形式将它们渲染在<tr> 标签中;{{ form.as_p }}  将它们渲染在<p> 标签中;{{ form.as_ul }} 将它们渲染在<li> 标签中。注意,必须自己提供<table><ul> 元素。 
  • 相关阅读:
    html5 canvas 小例子 旋转的时钟
    用深度学习(CNN RNN Attention)解决大规模文本分类问题
    生成式对抗网络GAN 的研究进展与展望
    linux 系统信息查看
    cmd 更改字体
    查看sbt版本
    机器学习算法汇总
    spark 大数据 LR测试
    spark
    hadoop生态圈介绍
  • 原文地址:https://www.cnblogs.com/pemp/p/6105551.html
Copyright © 2011-2022 走看看