Django2.0-表单(1)-Form使用

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/abc666666_6/article/details/84103402

笔记在知了课堂-Django开发的基础上更改

Django中的表单

Django中的表单丰富了传统的HTML语言中的表单。在Django中的表单,主要做以下两件事:

  1. 渲染表单模板。(不常用,容易前后端耦合)
  2. 表单验证数据是否合法。

Django中表单使用流程

在一个app中新建一个forms.py,定义一个表单类,继承自django.forms.Form

Field字段名称在html中对应的是<input type="text" name="field_name" >中input标签的name属性

比如title字段在html中就是<input type="text" name="title">

from django import forms

class FormTable(forms.Form):
    # label是渲染字段的名称(默认是变量名),error_messages的键值对是{"'code'对应的值": "你想要显示的内容"}
    title = forms.CharField(min_length=5, max_length=100, label="标题",
                            error_messages={"min_length": "字符至少5个,至多100个"})
    content = forms.CharField(widget=forms.Textarea, label="内容",
                              error_messages={"required": "要有content内容"})
    email = forms.EmailField(label="邮箱", error_messages={"required": "必须是邮箱格式"})
    reply = forms.BooleanField(required=False, label="是否回复")

在视图中,根据是GET还是POST请求来做相应的操作。如果是GET请求,那么返回一个空的表单,如果是POST请求,那么将提交上来的数据进行校验。

# views.py
from django.shortcuts import render,HttpResponse
from django.views.generic import View  # 加载视图类
from .forms import FormTable  # 加载表单类
# Create your views here.

# from django.forms.utils import ErrorDict  # 这个是表单类的errors的类型


class MessageForm(View):
    def get(self, request):
        form = FormTable()
        return render(request, "index.html", context={"form": form})

    def post(self, request):
        form = FormTable(request.POST)
        if form.is_valid():  # 如果各个字段合法
            title = form.cleaned_data.get("title")
            content = form.cleaned_data.get("content")
            email = form.cleaned_data.get("email")
            reply = form.cleaned_data.get("reply")
            print("title: {}\ncontentL {}\nemail: {}\nreply: {}\n".format(title,content,email,reply))
            return HttpResponse("success")
        else:
            print(type(form.errors))
            print(form.errors.get_json_data())
            return HttpResponse("failure")

在使用GET请求的时候,我们传了一个form给模板,那么以后模板就可以使用form来生成一个表单的html代码。在使用POST请求的时候,我们根据前端上传上来的数据,构建一个新的表单,这个表单是用来验证数据是否合法的,如果数据都验证通过了,那么我们可以通过cleaned_data来获取相应的数据。在模板中渲染表单的HTML代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <table>
        {{ form.as_table }}
        <tr>
            <td></td>
            <td><input type="submit" name="提交" ></td>
        </tr>
    </table>
</form>
</body>
</html>

我们在最外面给了一个form标签,然后在里面使用了table标签来进行美化,在使用form对象渲染的时候,使用的是table的方式,当然还可以使用ul的方式(as_ul),也可以使用p标签的方式(as_p),并且在后面我们还加上了一个提交按钮。这样就可以生成一个表单了

下面是表单类.errors.get_json_data()方法返回的值

{'title': [{'message': 'Ensure this value has at least 5 characters (it has 4).', 'code': 'min_length'}], 'content': [{'message': 'This field is required.', 'code': 'required'}], 'email': [{'message': 'This field is required.', 'code': 'required'}]

在表单类(这里是FormTable)中给各个字段添加errors_message添加键值对后可修改错误提示

{'title': [{'message': '字符至少5个,至多100个', 'code': 'min_length'}], 'content': [{'message': '要有content内容', 'code': 'required'}], 'email': [{'message': '必须是邮箱格式', 'code': 'required'}]}

猜你喜欢

转载自blog.csdn.net/abc666666_6/article/details/84103402