Django组件-forms组件

技术Django组件-forms组件 Django组件-forms组件Django组件-forms组件
forms组件
校验字段功能
针对一个实例:注册用户讲解。
模型:models.pyclass U

Django组件表格组件

Django组件表格组件

forms组件

校验字段功能

针对一个实例:注册用户讲解。

模型:模型py .

类用户信息(模型。型号):

名称=型号。字符字段(最大长度=32)

pwd=模型。字符字段(最大长度=32)

电子邮件=模型EmailField()

电话=型号。字符字段(最大长度=32)

模板: register.html:

!DOCTYPE html

html lang='en '

meta charset='UTF-8 '

标题标题/标题

/head

身体

表单操作='方法='发布'

{% csrf_token %}

差异

"="用户的标签用户名/标签

pinput类型='text' name='name' /p

/div

差异

='pwd '的标签密码/标签

pinput类型='password' name='pwd' /p

/div

差异

='r_pwd '的标签确认密码/标签

pinput类型='password' name='r_pwd' /p

/div

差异

='电子邮件'的标签邮箱/标签

pinput type=' text ' name=' email '/p

/div

输入类型="提交"

/form

/body

/html

视图函数:注册

#表单组件

从django.forms导入小部件

wid _ 01=小部件TextInput(attrs={ ' class ' : ' form-control ' })

wid _ 02=小部件密码输入(attrs={ ' class ' : ' form-control ' })

类用户表单(表单。表格):

名称=表格.CharField(最大长度=32,

widget=wid_01

)

pwd=表单CharField(max_length=32,widget=wid_02)

r _ pwd=表单CharField(max_length=32,widget=wid_02)

电子邮件=表单EmailField(widget=wid_01)

电话=表格.CharField(max_length=32,widget=wid_01)

极好的寄存器(请求):

if request.method=='POST':

表单=用户表单(请求。开机自检)

if form.is_valid():

打印(表单。已清理_数据)#所有干净的字段以及对应的值

else:

打印(表单。已清理_数据)#

打印(表格。错误)#错误字典: { '校验错误的字段':['错误信息',]}

打印(表格。错误。get(' name ')#错误列表['错误信息',]

返回"确定"

表单=用户表单()

返回渲染(请求、‘register.html’,本地人())

渲染标签功能

渲染方式1

!DOCTYPE html

html lang='en '

meta charset='UTF-8 '

标题标题/标题

!-最新版本的引导程序核心半铸钢钢性铸铁(铸造半钢)文

件 --
link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"
/head
body
h3注册页面/h3
div class="container"
div class="row"
div class="col-md-6 col-lg-offset-3"
form action="" method="post"
{% csrf_token %}
div
label for=""用户名/label
{{ form.name }}
/div
div
label for=""密码/label
{{ form.pwd }}
/div
div
label for=""确认密码/label
{{ form.r_pwd }}
/div
div
label for="" 邮箱/label
{{ form.email }}
/div
input type="submit" class="btn btn-default pull-right"
/form
/div
/div
/div
/body
/html

渲染方式2

form action="" method="post"
                    {% csrf_token %}
                    
                    {% for field in form %}
                        div
                            label for=""{{ field.label }}/label
                            {{ field }}
                        /div
                    {% endfor %}
                    input type="submit" class="btn btn-default pull-right"
                
/form

渲染方式3

form action="" method="post"
    {% csrf_token %}
    
    {{ form.as_p }}
    input type="submit" class="btn btn-default pull-right"
/form

显示错误与重置输入信息功能

视图

def register(request):
    if request.method=="POST":
        form=UserForm(request.POST)
        if form.is_valid():
            print(form.cleaned_data)       # 所有干净的字段以及对应的值
        else:
            print(form.cleaned_data)       #
            print(form.errors)             # ErrorDict : {"校验错误的字段":["错误信息",]}
            print(form.errors.get("name")) # ErrorList ["错误信息",]
        return render(request,"register.html",locals())
    form=UserForm()
    return render(request,"register.html",locals())

模板

form action="" method="post" novalidate
    {% csrf_token %}
    
    {% for field in form %}
        div
            label for=""{{ field.label }}/label
            {{ field }} span class="pull-right" style="color: red"{{ field.errors.0 }}/span
        /div
    {% endfor %}
    input type="submit" class="btn btn-default"
/form

局部钩子与全局钩子

模板

# forms组件
from django.forms import widgets
wid_01=widgets.TextInput(attrs={"class":"form-control"})
wid_02=widgets.PasswordInput(attrs={"class":"form-control"})
from django.core.exceptions import ValidationError
class UserForm(forms.Form):
    name=forms.CharField(max_length=32,
                         widget=wid_01
                         )
    pwd=forms.CharField(max_length=32,widget=wid_02)
    r_pwd=forms.CharField(max_length=32,widget=wid_02)
    email=forms.EmailField(widget=wid_01)
    tel=forms.CharField(max_length=32,widget=wid_01)
    # 局部钩子
    def clean_name(self):
        val=self.cleaned_data.get("name")
        if not val.isdigit():
            return val
        else:
            raise ValidationError("用户名不能是纯数字!")
    # 全局钩子
    def clean(self):
        pwd=self.cleaned_data.get("pwd")
        r_pwd=self.cleaned_data.get("r_pwd")
        if pwd==r_pwd:
            return self.cleaned_data
        else:
            raise ValidationError('两次密码不一致!')
def register(request):
    if request.method=="POST":
        form=UserForm(request.POST)
        if form.is_valid():
            print(form.cleaned_data)       # 所有干净的字段以及对应的值
        else:
            clean_error=form.errors.get("__all__")
        return render(request,"register.html",locals())
    form=UserForm()
    return render(request,"register.html",locals())

视图

 form action="" method="post" novalidate
            {% csrf_token %}
            {% for field in form %}
                div
                    label for=""{{ field.label }}/label
                    {{ field }}
                    span class="pull-right" style="color: red"
                          {% if field.label == 'R pwd' %}
                          span{{ clean_error.0 }}/span
                          {% endif %}
                          {{ field.errors.0 }}
                    /span
                /div
            {% endfor %}
            input type="submit" class="btn btn-default"
/form

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/143777.html

(0)

相关推荐

  • 鳄鱼属于哺乳动物吗,为什么说鳄是最高等的爬行动物

    技术鳄鱼属于哺乳动物吗,为什么说鳄是最高等的爬行动物提起鳄鱼,大家就会想到它是很凶猛的动物鳄鱼属于哺乳动物吗。生活在热带地区的非洲鳄,长达5米,重约1吨。它们有时会突然咬住到河边饮水的牛、羚羊、鹿,用力地把它们拖入水中,

    生活 2021年10月23日
  • C#内存泄露问题分析

    技术C#内存泄露问题分析这篇文章主要介绍“C#内存泄露问题分析”,在日常操作中,相信很多人在C#内存泄露问题分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#内存泄露问题分析”的疑惑有

    攻略 2021年11月29日
  • debian如何安装mysql

    技术debian如何安装mysql这篇文章主要介绍了debian如何安装mysql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。debian安装mysql

    攻略 2021年11月26日
  • java中怎么去掉List集合中重复的元素

    技术java中怎么去掉List集合中重复的元素本篇内容介绍了“java中怎么去掉List集合中重复的元素”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年10月29日
  • 香港云与VPS的区别云服务器香港

    技术香港云与VPS的区别云服务器香港任何稳运行的网站都需要的云服务器与VPS服务器平台的基石。如果不了解这些云服务器和VPS,选择合适的网络托管类型可能既乏味又耗时。下面就来简单介绍一下二者的区别什么是香港云服务器? 云

    礼包 2021年12月17日
  • 怎么进行Spring中的环绕增强

    技术怎么进行Spring中的环绕增强怎么进行Spring中的环绕增强,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。通过前置增强和后置增强可以很方便的在目标方

    攻略 2021年12月2日