栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Django】 Form组件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Django】 Form组件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • Form组件使用
  • 局部钩子和全局钩子
  • 总结


Django Form 组件用于对页面进行初始化,生成 HTML 标签,此外还可以对用户提交对数据进行校验(显示错误信息)。

Form组件使用
  1. 创建Fom组件类
# TestDB 文件夹下的 app_example.py
from django import forms
from django.core.exceptions import ValidationError  # 错误校验
class MyForm(forms.Form):

	# label表示生成的html输入框前的文字描述
	# error_messages表示错误信息
    name = forms.CharField(min_length=4, label="姓名", error_messages={"min_length": "长度不能小于4", "required": "该字段不能为空"})
    age = forms.IntegerField(label="年龄")
    salary = forms.IntegerField(label="工资")
    r_salary = forms.IntegerField(label="确认工资")
  1. 定义路由
# 使用路由分发的方式
# HelloDJango为项目根  urls.py
from django.urls import path, include
urlpatterns = [
    # forms组件
    path("testdb/", include("TestDB.urls")),
]

# TestDB 文件夹下的 urls.py
from django.urls import path
from TestDB import views

urlpatterns = [
    # forms组件
    path("add_info/", views.addInfo)
]
  1. 定义处理函数
# TestDB 下的views.py
def addInfo(request):
	# 直接发送请求为GET,渲染页面
    if request.method == "GET":
        form = MyForm()
        return render(request, "index.html", {"form": form})
    else: 
    	# 处理表单提交
        form = MyForm(request.POST)
        if form.is_valid():  # 如果校验成功
            data = form.cleaned_data  # 校验成功的数据放在cleaned_data中
            print(data)

            return HttpResponse(json.dumps(data, ensure_ascii=False), 'application/json')
        else:
            print(form.errors)
            clean_errors = form.errors.get("__all__")
        return render(request, "index.html", {"form": form, "clean_errors": clean_errors})

  1. html页面

    

Hello World

{% csrf_token %} {{ form.as_p }}
  1. 运行结果

可以通过clean_data获取校验成功后的数据
校验不通过可以obj.errors获取错误

局部钩子和全局钩子

可以通过钩子对字段进行错误校验,使用form提供的ValidationError,导入:

from django.core.exceptions import ValidationError
  • 钩子的定义:局部钩子 -》 clean_字段名,如
 # 定义局部钩子, 以clean_字段名 方式定义
  def clean_name(self):
      value = self.cleaned_data.get("name")
      if value.isdigit():
          raise forms.ValidationError("用户名不能纯数字")
      else: 
          return value
  • 全局钩子
def clean(self):
     salary = self.cleaned_data.get("salary")
     r_salary = self.cleaned_data.get("r_salary")

     if salary == r_salary:
         return self.cleaned_data
     else:
         raise ValidationError("请确认工资一致")
总结

简单记录实现forms组件的流程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号