Django之forms组件:校验字段、渲染标签、常用字段与插件、局部钩子与全局钩子、组件源码分析


一、 forms组件之校验字段

# 第一步:定义一个类,继承forms.Form
# 第二步:在类中写字段,要校验的字段,字段属性就是校验规则
# 第三步:实例化得到一个Form对象,把要校验的数据传入
# 第四步:调用register_form.is_valid()校验,校验通过就是True
# 第五步:校验通过有register_form.cleaned_data
# 第六步:校验不通过 register_form.errors

校验手动渲染示例html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册用户</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="col-md-6 col-md-offset-3">
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">注册功能</h3>
        </div>
        <div class="panel-body">
            <h1 class="text-center">注册</h1>
            <form action="" method="post">
                <p>用户名:<input type="text" name="name" class="form-control"></p>
                <p>密码:<input type="password" name="password" class="form-control"></p>
                <p>确认密码:<input type="password" name="re_password" class="form-control"></p>
                <p>邮箱:<input type="text" name="email" class="form-control"></p>
                <input id="id_btn" type="submit" class="btn btn-primary btn-block">
        </div>
    </div>
</div>
</body>
</html>

创建用户表models.py

class User(models.Model):
    name = models.CharField(max_length=32,verbose_name='用户名')
    password = models.CharField(max_length=32,verbose_name='密码')
    email = models.EmailField(verbose_name='邮箱')

views.py

from django.shortcuts import render
from django import forms

#定义类
class RegisterForm(forms.Form):
    # name字符串类型最大8位,最小3位
    name = forms.CharField(max_length=8, min_length=3, label='用户名')
    # password字符串类型最大8位,最小3位
    password = forms.CharField(max_length=8, min_length=3, label='密码')
    # re_password字符串类型最大8位,最小3位
    re_password = forms.CharField(max_length=8, min_length=3, label='确认密码')
    # email必须符合邮箱格式,xxx@xx.com
    email = forms.EmailField(label='邮箱')
   

#在视图中使用
register_form = RegisterForm(request.POST)
if register_form.is_valid():
      # 校验通过,存
      # 取出校验通过的数据
      print('校验通过')
      print(register_form.cleaned_data)
    
        # 存储前先删除多余的字段
        register_form.cleaned_data.pop('re_password')
       # 将数据存入数据库的user表中
       models.User.objects.create(**register_form.cleaned_data)
        
else:
     # 校验不通过
     print('校验不通过')
     print(register_form.errors)

二、 forms组件之渲染标签

视图层:views.py

def login(request):
    # 1.先生成一个对象
    form_obj = MyForm()
    # 2.将该对象传递给html页面
    return render(request,'login.html',locals())          

渲染方式一

简单粗暴 一次性渲染label文本和input框

<h2>form渲染</h2>
<form action="" method="post">
    {
   {
    form.as_p }}
    {
   #    {
   { form.as_table }}#}
    {
   #    {
   { form.as_ul }}#}
</form>
"""
	优点:速度快 代码书写极少
	缺点:封装程度高 不便于扩展 一般情况下只在本地测试使用
"""

渲染方式二

一步步需要自己书写字段对象



<h2>form渲染</h2>
<form action="" method="post">
    {
   {
    form_obj.username.label }}
    {
   {
    form_obj.username }}

<input type="submit" value="提交"></form>

"""
    优点:字段之间相互解耦
    缺点:字段多的时候书写麻烦
"""

渲染方式三

推荐使用,代码书写简单,并且可扩展性强

<h2>form渲染(基本用这种)</h2>

<form action="" method="post">
    {
   % for form in form_obj %}
        <p>{
   {
    form.label }}:{
   {
    form }}</p>                    
    {
   % endfor %}
<input type="submit" value="提交"><span style="color: red">{
   {
    error }}</span>
# forms组件无法渲染提交按钮和form标签都需要你自己编写
</form>

三、 forms组件之展示提示信息

from django import forms
from django.forms import widgets

class RegisterForm(forms.Form):
    name = forms.CharField(max_length=8, min_length=3, label='用户名',
                           error_messages
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值