1.在我学习django的过程中,我学习到了一个关于表单验证的问题
2.我们从前端post一个表单,通过urls配置,传给对应的view方法
3.然后再传给Form验证
4.一开始我是很好奇,在view是传整个querydict,那Form是怎么从这个字典里面取的值呢
5.后面经过反复试验,原来是根据我们在Form里面定于的字段来取的
view.py def insert(request): if request.method == "POST": form=RegistrationForm(request.POST) print(request.POST) print(type(request.POST)) if form.is_valid(): username = form.cleaned_data["username"] password = form.cleaned_data["username"] message.objects.create(username=username, password=password) else: return render(request, "insert.html",{"error": form.errors, "form": form}) return render(request,"insert.html")
form.py from django import forms from django.forms import Field from django.http import QueryDict import os,django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "HelloWorld.settings")# project_name 项目名称 django.setup() class RegistrationForm(forms.Form): sender = forms.CharField(label="username", required=True, min_length=6, max_length=20, error_messages={'required': '密码不能为空1.', 'min_length': '至少6位', 'max_length': '小于20位'}) message = forms.CharField(label="password",required=True, min_length=6, max_length=30, error_messages={'required': '密码不能为空2.', 'min_length': '至少6位', 'max_length': '小于20位'}) if __name__=="__main__": a=QueryDict('username=testtest&password=testtest') b={'subject': 'hello', 'message': 'Hi there', 'sender': 'foo@example.com', 'cc_myself': True} RE=RegistrationForm(b) print(RE) print(RE.data)
6.下面我们就来验证验证一下
我来运行一下form文件,结果和输出,没有抛出错误,因为sender的值大于6
7.第二次实验,我们很明显看到了提示,因为subject的值只有五位,不足六位,所以有对应的提示。我们两次实验呢,只是更改了一个字段,就是类里面第一个赋值(定义)的字段。但是这个字段却影响了结果输出,由此得出结论。
其实我也想认真的看源码,奈何看不懂,所以只能猜测,望大神看了指点一二