UU Blog

Django使用form处理表单信息

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 %}

给作者打一针鸡血