【Django】 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页面
<body>
    <h1>Hello World</h1>
    <form action="" method="post">
        {% csrf_token %}  <!--处理POST提交-->
        {{ form.as_p }}  <!--获取表单元素-->
        <input type="submit" vlaue="提交"/>
    </form>
</body>
  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组件的流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值