django Form表单验证

Django中的表单:
1、HTML中的表单:用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言
2、Django中的表单:
①渲染表单模板
②表单验证数据是否合法
3、Django中表单使用流程:
①app下新建forms.py文件,内容如下:
from django import forms # 注意是django下的forms

①、定义一个表单

class MessageBoardForm(forms.Form):
# error_messages字段,可以自定义某字段提交时出现错误的时候,显示的错误信息
title = forms.CharField(max_length=100, label='标题', min_length=2, error_messages={"min_length": '标题字符段不符合要求!'})
content = forms.CharField(widget=forms.Textarea, label='内容')
email = forms.EmailField(label='邮箱')
reply = forms.BooleanField(required=False, label='回复')

②views.py文件内容如下:
from one.forms import MessageBoardForm
from django.views.generic import View

②、定义GET或者POST方法:根据是GET还是POST请求来做相应的操作

class IndexView(View):
# 如果是GET请求,那么返回一个空的表单
def get(self, request):
form = MessageBoardForm()
return render(request, 'one/index.html', {'form': form})
# 如果是POST请求,那么将提交上来的数据进行校验
def post(self, request):
form = MessageBoardForm(request.POST)
if form.is_valid():
title = form.cleaned_data.get('title')
content = form.cleaned_data.get('content')
email = form.cleaned_data.get('email')
reply = form.cleaned_data.get('reply')
print('=' * 30)
print(title)
print(content)
print(email)
print(reply)
print('='*30)
return HttpResponse('success')
else:
# 点上get_json_data()它,打印的错误信息会以json方式显示
print(form.errors.get_json_data())
return HttpResponse('fail')

③index.html文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<table>
{{ form.as_table }}
<tr>
<td></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
在使用GET请求的时候,我们传了一个form给模板,那么以后模板就可以使用form来生成一个表单的html代码;
在使用POST请求的时候,我们根据前端上传上来的数据,构建一个新的表单,这个表单是用来验证数据是否合法的;
如果数据都验证通过了,那么我们可以通过cleaned_data来获取相应的数据。在模板中渲染表单的HTML代码如下:

<form action="" method="post">
<table>
{{ form.as_table }}
<tr>
<td></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
我们在最外面给了一个form标签,然后在里面使用了table标签来进行美化,
在使用form对象渲染的时候,使用的是table的方式,当然还可以使用ul的方式(as_ul),也可以使用p标签的方式(as_p),
并且在后面我们还加上了一个提交按钮。这样就可以生成一个表单了
④urls.py加入路由:
path('', IndexView.as_view()),

4、用于表单验证常用的Field
CharField:
max_length:这个字段值的最大长度
min_length:这个字段值的最小长度
required:这个字段是否必须,默认是必须的
error_messages:在某个条件验证失败的时候,给出错误信息

EmailField:用来接收邮件,会自动验证邮件是否合法

FloatField:用来接收浮点类型,并且如果验证通过后,会将这个字段的值转换为浮点类型
max_value:最大的值
min_value:最小的值

IntegerField:用来接收整形,并且验证通过后,会将这个字段的值转换为整形
max_value:最大的值
min_value:最小的值

URLField:用来接收url格式的字符串

5、在验证某个字段的时候,可以传递一个validators参数用来指定验证器,进一步对数据进行过滤。
验证器有很多,但是很多验证器我们其实已经通过这个Field或者一些参数就可以指定了。
比如EmailValidator,我们可以通过EmailField来指定,
比如MaxValueValidator,我们可以通过max_value参数来指定。以下是一些常用的验证器:
MaxValueValidator:验证最大值
MinValueValidator:验证最小值
MinLengthValidator:验证最小长度
MaxLengthValidator:验证最大长度
EmailValidator:验证是否是邮箱格式
URLValidator:验证是否是URL格式
RegexValidator:如果还需要更加复杂的验证,那么我们可以通过正则表达式的验证器:RegexValidator
eg:比如现在要验证手机号码是否合格,那么我们可以通过以下代码实现:
forms.py文件内容如下:
class MyForm(forms.Form):
telephone = forms.CharField(
validators=[validators.RegexValidator("1[345678]\d{9}",
message='请输入正确格式的手机号码!')]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容