Django2.2丨表单

Django的Form类

Django表单系统的核心组件是Form类。Form类描述一张表单并决定它如何工作及呈现。

类似于模型类的字段映射到数据库字段的方式,表单类的字段会映射到HTML表单的<input>元素。

构建一张表单

示例

<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>

浏览器将表单返回给URL/your-name/,并使用POST方法。

提交表单时,发送给服务器的POST请求将包含表单数据。

在Django中构建一张表单

# forms.py
from django import forms

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

表单实例有一个is_valid()方法,该方法为其所有字段运行验证。如果所有字段包含有效数据,它将返回

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

视图

# views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render

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)是绑定数据到表单。

通过调用表单的is_valid()方法;如果不为True,将带着表单回到模板。

如果为True,就能在其cleaned_data属性中找到所有通过验证的表单数据。

详解Django Form类

所有表单类都作为django.forms.Form或者django.forms.ModelForm的子类来创建。

绑定的和未绑定的表单实例

  • 未绑定的表单没有与其关联的数据。当渲染给用户的时候,它会是空的或者包含默认值。

  • 绑定的表单拥有已提交的数据,因此可以用来判断数据是否合法。

字段数据

无论用表单提交了什么数据,一旦通过调用is_valid()验证成功,已验证的表单数据将被放到form.cleaned_data字典中。

示例

  • 在视图中处理表单数据
from django.core.mail import send_mail

if form.is_valid():
    subject = form.cleaned_data['subject']
    message = form.cleaned_data['message']
    sender = form.cleaned_data['sender']
    cc_myself = form.cleaned_data['cc_myself']

    recipients = ['info@example.com']
    if cc_myself:
        recipients.append(sender)

    send_mail(subject, message, sender, recipients)
    return HttpResponseRedirect('/thanks/')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值