form算是和一个和安全问题有关的一个东西了。
用来设置一些规则,对用户提交的字段进行一些筛选。
把不符合要求的字段过滤在外,这个一般前端也会做相应的处理。
但是有时候是可以被绕过的,比如提交正常的POST数据,然后拦截数据包,修改后,再POST。
新建<path-to-your-app>/forms.py
比如我登录认证的表单中含有username和password两个字段,那我可以定义这两个字段的规则。
它的使用方式有点像我们定义models一样,都是前面变量为关键字段名,后面跟着字段类型和属性。
以下设置了两个字段为必填项,并且对长度做了一些限制
1 2 3 4 5 6
| from django import forms
class LoginForm(forms.Form): username = forms.CharField(required=True, max_length=50) password = forms.CharField(required=True, min_length=6)
|
然后可以在具体的逻辑中引用它
如我在前面一个文章中提到的登录验证中
调用它is_valid()
方法来认证
views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class LoginView(View): def get(self, request): return render(request, 'login.html')
def post(self, request): login_form = LoginForm(request.POST) if login_form.is_valid(): user_name = request.POST.get('username', '') pass_word = request.POST.get('password', '') user = authenticate(request, username=user_name, password=pass_word) if user is not None: login(request, user) return render(request, 'index.html') else: return render(request, 'login.html', {"msg": "用户或密码错误"}) else: return render(request, 'login.html', {"login_form": login_form})
|
结果传递给页面,页面可以处理,并展示它的返回错误信息之类的。
如模板中遍历它错误的值,打印出来。
1
| {% for key,value in login_form.errors.items %}{{ value }}{% endfor %}
|