博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django组件-forms组件
阅读量:4699 次
发布时间:2019-06-09

本文共 5416 字,大约阅读时间需要 18 分钟。

forms组件

校验字段功能

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

模型:models.py

class UserInfo(models.Model):    name=models.CharField(max_length=32)    pwd=models.CharField(max_length=32)    email=models.EmailField()    tel=models.CharField(max_length=32)

 

模板: register.html:

    
Title
{
% csrf_token %}

视图函数:register

# forms组件from django.forms import widgetswid_01=widgets.TextInput(attrs={
"class":"form-control"})wid_02=widgets.PasswordInput(attrs={
"class":"form-control"})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 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 HttpResponse("OK") form=UserForm() return render(request,"register.html",locals())

渲染标签功能 

渲染方式1

    
Title

注册页面

{
% csrf_token %}
{
{ form.name }}
{
{ form.pwd }}
{
{ form.r_pwd }}
{
{ form.email }}

 

渲染方式2

{
% csrf_token %} {
% for field in form %}
{
{ field }}
{
% endfor %}

渲染方式3

{
% csrf_token %} {
{ form.as_p }}

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

视图

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())

模板

{
% csrf_token %} {
% for field in form %}
{
{ field }}
{
{ field.errors.0 }}
{
% endfor %}

 

局部钩子与全局钩子

模板

# forms组件from django.forms import widgetswid_01=widgets.TextInput(attrs={
"class":"form-control"})wid_02=widgets.PasswordInput(attrs={
"class":"form-control"})from django.core.exceptions import ValidationErrorclass 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())

视图

{
% csrf_token %} {
% for field in form %}
{
{ field }}
{
% if field.label == 'R pwd' %} {
{ clean_error.0 }}
{
% endif %} {
{ field.errors.0 }}
{
% endfor %}

 

转载于:https://www.cnblogs.com/xihuxiangri/p/9897369.html

你可能感兴趣的文章
基于深度学习的目标检测研究进展
查看>>
python运算学习之Numpy ------ 数组操作:连接数组、拆分数组 、广播机制、结构化数组、文件贮存与读写、np.where、数组去重...
查看>>
无熟人难办事?—迪米特法则
查看>>
POJ 1469 COURSES 二分图最大匹配
查看>>
13.python中的字典
查看>>
算法竞赛入门经典_3.1_数组_逆序输出_开灯问题
查看>>
android中Stub Proxy答疑
查看>>
jQuery的表单验证
查看>>
Postman 安装与使用
查看>>
二下文理 1 A
查看>>
Codeforces Round #315 (Div. 1) A. Primes or Palindromes? 暴力
查看>>
Codeforces Beta Round #97 (Div. 1) C. Zero-One 数学
查看>>
Linux IO模式及 select、poll、epoll详解
查看>>
MVC3和MVC4内置Razor引擎的差异
查看>>
shell编程基础
查看>>
英语月份星期和简写
查看>>
uva_1422 Processor
查看>>
GIT Learning
查看>>
数据结构学习笔记(树、二叉树)
查看>>
迭代器 in C++
查看>>