首页 > 其他分享 >from组件

from组件

时间:2022-12-22 19:34:47浏览次数:60  
标签:form 校验 forms length 组件 data

一.Django的forms组件应用场景

1.应用

  • 一般应用于前端的登入、注册界面, 对用户输入的字段进行校验, 快速的判断用户输入的内容是否合法, 并返回信息

2.为何不在前端直接使用JS进行校验

  • 前端的校验可以没有, 但后端的校验必须要有
  • 因为前端的校验弱不禁风, 有很多种方式可以伪装成浏览器发送请求传递数据
  • 或者通过爬虫程序绕过前端页面直接朝后端提交数据

二.forms组件的基本使用(步骤)

  • 导入forms组件
  • 定义一个类, 并继承Form
  • 在类中书写要校验的字段, 字段的属性就是要校验的规则
  • 实例化得到一个Form对象, 把要校验的数据传入
  • 调用[form对象].is_valid( )方法进行校验, 校验通过返回True
  • 校验通过调用[form对象].cleaned_data获得校验后的数据
  • 校验失败调用[form对象].errors获得错误信息

三.forms组件基本使用示例

简单的用户注册界面示例

1.常用字段属性

属性 释义
min_length 最小长度
max_length 最大长度
require 该字段必须得填
label 该字段的标签

2.组件文件 form.py

  • 建议在应用文件夹下创建一个专门存放forms组件的文件 (不创建直接写在views.py中也可以)
  • 导入组件并创建类
from django import forms


class RegisterForm(forms.Form):
    # 校验name字段,最大长度为8,最短为3,下面的字段类似
    name = forms.CharField(max_length=8, min_length=3, lable='用户名')
    password = forms.CharField(max_length=10, min_length=4, lable='密码')
    re_password = forms.CharField(max_length=10, min_length=4, lable='确认密码')
    email = forms.EmailField(lable='邮箱')

3.视图层 views.py 文件

  • 实例forms对象, 使用对方法进行校验
from app01.myform import RegisterForm


def register(request):
    if request.method == 'POST':
        # 实例得到form对象,将需要校验的数据传入(数据可以是前端传过来的数据,也可以是自己后端已有的数据)
        # dic = {'name':'alex','password':'1111','re_password':'1111','email':'[email protected]'}
        # form_data = RegisterForm(dic)  # 示例:直接将已有的数据传入
        form_data = RegisterForm(request.POST)  # 将前端post请求的数据传入

        # 进行校验 is_valid()
        if form_data.is_valid():
            print('校验成功')
            # 获得校验成功的数据 cleaned_data
            print(form_data.cleaned_data)
            return HttpResponse('校验成功')
        else:
            print('检验失败')
            # 获得检验失败的错误提示 errors
            print(form_data.errors)

    # forms组件可以自动生成HTML代码,因此可以直接在页面上进行显示
    form_data = RegisterForm()  # 先产生form空对象,再将其传给前端
    return render(request, 're_form.html', {'form': form_data})

ps : cleaned_data属性必须是经过is_valid( )校验之后才产生的, 在校验之前使用会报错 : 属性不存在

 

4.路由层 urls.py 文件

path('re_form/', views.register)

5.模板层 re_form.html 文件

<div class="container">
    <div class="row">
        <div class="col-md-4">
            <div class="panel panel-info">
                <div class="panel-heading">注册页面</div>
                <div class="panel-body">
                    <form action="" method="post">
                        <p>用户名:{{ form.name }}</p>
                        <p>密码:{{ form.password }}</p>
                        <p>确认密码:{{ form.re_password }}</p>
                        <p>邮箱:{{ form.email }}</p>
                        <br>
                        <input type="submit" class="btn btn-block btn-success" value="注册">
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

 

标签:form,校验,forms,length,组件,data
From: https://www.cnblogs.com/chen-ao666/p/16999450.html

相关文章