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='请输入正确格式的手机号码!')]