最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • django如何处理表单数据

    正文概述    2020-03-29   259

    django如何处理表单数据

    使用表单

    假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素:

    <form action="/your-name/" method="post">
        <label for="your_name">Your name: </label>
        <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
        <input type="submit" value="OK"></form>

    <form action="/your-name/" method="post">这一行定义了我们的发送目的地/your-name/和HTTP方法POST。form元素内部还定义了一个说明标签<label>和一个发送按钮‘submit’,以及最关键的接收用户输入的<input>元素。

    一、编写表单类

    我们可以通过Django提供的Form类来自用生成上面的表单,不再需要手动在HTML中编写。

    首先,在你当前app内新建一个forms.py文件(这个套路是Django的惯用手法,就像views.py,models.py等等),然后输入下面的内容:

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

    提前导入forms模块所有的表单类都要继承forms.Form类每个表单字段都有自己的字段类型比如CharField,它们分别对应一种HTML语言中的<form>元素中的表单元素。这一点和Django模型系统的设计非常相似。例子中的label用于设置说明标签max_length限制最大长度为100。它同时起到两个作用,一是在浏览器页面限制用户输入不可超过100个字符,二是在后端服务器验证用户输入的长度不可超过100。

    每个Django表单的实例都有一个内置的is_valid()方法,用来验证接收的数据是否合法。如果所有数据都合法,那么该方法将返回True,并将所有的表单数据转存到它的一个叫做cleaned_data的属性中,该属性是以个字典类型数据。

    当我们将上面的表单渲染成真正的HTML元素,其内容如下:

    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" maxlength="100" required />

    二、视图处理

    需要在视图中,实例化我们编写好的表单类。

    # views.py
    
    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    
    from .forms import NameForm
    
    def get_name(request):
        # 如果form通过POST方法发送数据
        if request.method == 'POST':
            # 接受request.POST参数构造form类的实例
            form = NameForm(request.POST)
            # 验证数据是否合法
            if form.is_valid():
                # 处理form.cleaned_data中的数据
                # ...
                # 重定向到一个新的URL
                return HttpResponseRedirect('/thanks/')
    
        # 如果是通过GET方法请求数据,返回一个空的表单
        else:
            form = NameForm()
    
        return render(request, 'name.html', {'form': form})

    要点是:

    对于GET方法请求页面时,返回空的表单,让用户可以填入数据;

    对于POST方法,接收表单数据,并验证;

    如果数据合法,按照正常业务逻辑继续执行下去;

    如果不合法,返回一个包含先前数据的表单给前端页面,方便用户修改。

    通过表单的is_bound属性可以获知一个表单已经绑定了数据,还是一个空表。

    三、模板处理

    在Django的模板中,我们只需要按下面处理,就可以得到完整的HTML页面:

    <form action="/your-name/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>

    要点:

    <form>...</form>标签要自己写;

    使用POST的方法时,必须添加{% csrf_token %}标签,用于处理csrf安全机制;

    {{ form }}代表Django为你生成其它所有的form标签元素,也就是我们上面做的事情;

    提交按钮需要手动添加!

    提示:默认情况下,Django支持HTML5的表单验证功能,比如邮箱地址验证、必填项目验证等等。


    起源地下载网 » django如何处理表单数据

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者
    © 2021 - qiyuandi.com All rights reserved 湘ICP备18024139号-3 XML地图

    本站注明原创资源内容转载时请注明来源,其他资源均收集于网络,并已标明来源出处,如有侵权请联系我们!

         

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元