html表单验证问题对错6,Django-Form表单(验证、定制、错误信息、Select)

eb4be2086cd23a744a63a34dd584b6fd.png

Django form 流程

1、创建类,继承form.Form

2、页面根据类的对象自动创建html标签

3、提交,request.POST

封装到类的对象里,obj=UserInfo(request.POST)

4、用户输入是否合法

obj.is_valid()

5、全部合法,获取全部内容

obj.clean()

6、只有有不合法

obj.errors

首先关闭跨站请求

#'django.middleware.csrf.CsrfViewMiddleware',

a9a60361e8e16e484f047463f274956b.png

2566859b1ec1aa820cc32a8eb551862c.png

有错误会阻止提交,并提示错误信息

69c88d95e2d607a4966b946cc8ca532e.png

成功提交,可以获取到提交的值

99cdda3a3d047d1d94a492bccea129f6.png

Form定制化

定制错误信息

mail = forms.EmailField(error_messages={'required':u'邮箱不能为空'})

定制错误规则

mobile = forms.CharField(validators=[mobile_validate,],

error_messages={'required':u'手机不能为空'})

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

from django.shortcutsimport render

from djangoimport forms

import re

from django.core.exceptionsimport ValidationError

def mobile_validate(value):

mobile_re= re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')

if not mobile_re.match(value):

raise ValidationError('手机号码格式错误')

class UserInfo(forms.Form):

email= forms.EmailField(error_messages={'required':u'邮箱不能为空'})

host= forms.CharField(error_messages={'required':u'主机不能为空'})

port= forms.CharField(error_messages={'required':u'端口不能为空'})

mobile= forms.CharField(validators=[mobile_validate,],#定义错误规则函数

error_messages={'required':u'手机不能为空'},

widget=forms.TextInput(attrs={'class':'form-control',#定义class

'placeholder':u'请输入手机号'}))

beizhu= forms.CharField(required=False,#备注允许为空

widget=forms.Textarea(attrs={'class':'form-control',#定义为多行输入框

'placeholder':u'请输入备注'}))

user_type_choice= (

(0,u'普通用户'),

(1,u'高级用户'),

)

user_type= forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice,attrs={'class':'form-control'}))

69e70cb8baa4f57115fcf8e1431bb27b.png

555f1d6e050fb6534de05f7da11842ff.png

保存用户输入内容

obj = AccountForm.LoginForm(request.POST)

Form表单验证以及错误信息

错误信息格式:

普通格式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

from django.shortcutsimport render,HttpResponse

from web.formsimport account as AccountForm

def login(request):

obj= AccountForm.LoginForm(request.POST)

if request.method== 'POST':

if obj.is_valid():

all_data= obj.clean()

else:

#用于Form表单提交

error= obj.errors

#print error['username'][0]

#print error['password'][0]

return render(request,'account/login.html',{'obj':obj,'error':error})

return render(request,'account/login.html',{'obj':obj})

创建一个simple_tag,使其输 error['username'][0]

7359679e6890f56113765fac4cafb11e.png

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

{% load xx %}

{{ obj.username }}

{% error_msg error.username %}

{{ obj.password }}

{% error_msg error.password %}

0add25ea97c75b969685ca1e7044b699.png

JSON格式

1

2

3

4

5

6

7

8

9

10

11

12

def login(request):

obj= AccountForm.LoginForm(request.POST)

if request.method== 'POST':

if obj.is_valid():

all_data= obj.clean()

else:

#用于Ajax

error= obj.errors.as_json()

#print error

return HttpResponse(error)

return render(request,'account/login.html',{'obj':obj,'error':error})

return render(request,'account/login.html',{'obj':obj})

Form生成select标签

2d1cb08548b1887c4c5ff14feff0bd68.png

2b8271f3a43385181ddaf4fbc5dc9ef2.png

2dac2b2031d5e18650f2be7ad7d9a5d4.png

静态select

5dc3c93d33d745a10ab8961376dbd47a.png

动态select

71b767909976a4ddc8d6bb9d1e0b9ab8.png

当增加数据库数据时

212d8bcab1b974122f77dad17de03a5a.png

7181b30d46238816180d0fbe10cfe573.png

不会更新,除非关闭程序,重新载入才会更新

1b124f4506f8b69b65d0f0eef9034b83.png

83c00ca7a797431008df1446b4fa4095.png

解决方法:利用面向对象类的静态字段

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

from djangoimport forms

import json

class ImportForm(forms.Form):

#静态select

HOST_TYPE_LIST= (

(0,'物理机'),

(1,'虚拟机'),

)

host_type= forms.IntegerField(

widget=forms.Select(choices=HOST_TYPE_LIST)

)

hostname= forms.CharField()

#动态select

# admin_dic = ((1,'yangmv'),(1,"bob"),)

# w_obj = open('db_admin','w')

# w_obj.write(json.dumps(admin_dic))

# w_obj.close()

f_obj= open('db_admin','r')

data= f_obj.read()

data_tuple= json.loads(data)

admin= forms.IntegerField(

widget=forms.Select(choices=data_tuple)

)

def __init__(self,*args,**kwargs):

super(ImportForm,self).__init__(*args,**kwargs)

tmp= open('db_admin')

data= tmp.read()

data_tuple= json.loads(data)

self.fields['admin'].widget.choices= data_tuple

再次增加数据库数据,直接刷新页面即可读取到新数据

c34b9ec07936623216e29fb372521e4d.png

2b5da3979bb1086ab791fe2db6d4c626.png

优化后代码

1

2

3

4

5

6

7

8

9

10

11

from djangoimport forms

import json

class ImportForm(forms.Form):

admin= forms.IntegerField(widget=forms.Select())

def __init__(self,*args,**kwargs):

super(ImportForm,self).__init__(*args,**kwargs)

tmp= open('db_admin')

data= tmp.read()

data_tuple= json.loads(data)

self.fields['admin'].widget.choices= data_tuple

使用models获取select数据

(models操作,后面一偏文章会详细介绍)

1

2

3

class Select(models.Model):

username= models.CharField(max_length=16)

password= models.CharField(max_length=32)1

2

3

4

5

{{ obj.admin }}

1

2

3

def home(request):

obj= HomeForm.ImportForm()

return render(request,'home/home.html',{'obj':obj})

381fa943fee99ed70c7d170e30a859ab.png

models.Select.objects.all().values_list('id','username')

c180d8be7ace5595769511129decc9fe.png

f71b4522eceaadf21ddb27c932546770.png

标签:obj,Form,admin,request,Django,forms,error,data,Select

来源: https://blog.csdn.net/bbwangj/article/details/90522721

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值