最简单的web开发在一定程度上,应该就是与数据库的各种交互。增删改查并将结果友好的展示到页面上。 在完成了用户表的设计之后,今天就需要完成数据的插入工作了。
打开register.html
,可以看到<form method="POST">
。也就是注册的内容会以表单的形式进行提交。
那我们新建一个forms.py
文件进行表单的校验。
首先是用户名的约束条件:用户名长度要大于5,用户名长度要小于20,用户名不能为空
1username = forms.CharField(label='用户名', max_length=20, min_length=5,
2 error_messages={"min_length": "用户名长度要大于5", "max_length": "用户名长度要小于20",
3 "required": "用户名不能为空"}
4 )
同理密码和再次输入密码也差不多
1password = forms.CharField(label='密码', max_length=20, min_length=6,
2 error_messages={"min_length": "密码长度要大于6", "max_length": "密码长度要小于20",
3 "required": "密码不能为空"}
4 )
5 password_repeat = forms.CharField(label='确认密码', max_length=20, min_length=6,
6 error_messages={"min_length": "密码长度要大于6", "max_length": "密码长度要小于20",
7 "required": "密码不能为空"}
8 )
email由于数据库有限制了,所以这边就做个非空的校验好了
1email = forms.EmailField(required=True,
2 error_messages={'required': "邮箱不能为空"})
我们需要验证第一次输入的密码和再次输入的密码是一致的,所以增加clean函数
所以整个forms.py
文件为:
1import re
2from django import forms
3from .models import User
4
5
6class RegisterForm(forms.Form):
7 username = forms.CharField(label='用户名', max_length=20, min_length=5,
8 error_messages={"min_length": "用户名长度要大于5", "max_length": "用户名长度要小于20",
9 "required": "用户名不能为空"}
10 )
11 password = forms.CharField(label='密码', max_length=20, min_length=6,
12 error_messages={"min_length": "密码长度要大于6", "max_length": "密码长度要小于20",
13 "required": "密码不能为空"}
14 )
15 password_repeat = forms.CharField(label='确认密码', max_length=20, min_length=6,
16 error_messages={"min_length": "密码长度要大于6", "max_length": "密码长度要小于20",
17 "required": "密码不能为空"}
18 )
19 email = forms.EmailField(required=True,
20 error_messages={'required': "邮箱不能为空"})
21
22 def clean(self):
23 cleaned_data = super().clean()
24 passwd = cleaned_data.get('password')
25 passwd_repeat = cleaned_data.get('password_repeat')
26
27 if passwd != passwd_repeat:
28 raise forms.ValidationError("两次密码不一致")
下面是对post接口的代码编写
注册页面 输入一些正确的注册参数后,点击注册,触发post接口,记得要在post函数的第一行打上断点:
断点 这样就可以看到request拿到的东西了
request的内容
很容易的可以看出,我们需要的东西都在request.POST
里面了
request.POST
我们用类似字典取值的方式【get
】拿出我们需要的几个值
1use_key = ['username', "password", "password_repeat", "email"]
2dict_data = {}
3for i in use_key:
4 dict_data[i] = request.POST.get(i)
接下来实例化表单验证:
form = RegisterForm(data=dict_data)
使用form.is_valid()
就可以进行验证了
以下是几个测试的结果:
通过测试
不通过测试1
不通过测试2
可以看到如果输入符合要求的内容表单会自动校验并返回True。 真是省心省力的一个东西。 接下来就是把东西插入数据库了
1username = form.cleaned_data.get('username')
2password = form.cleaned_data.get('password')
3email = form.cleaned_data.get('email')
4user = User.objects.create(username=username, password=password, email=email)
5user.save()
6return render(request, 'login/index.html')
使用create
插入数据,使用save
把操作生效。打开数据库可以看到效果。在完成注册后会自动跳转到登录界面。
数据库
这里面的调用关系请直接查阅源码: https://github.com/zx490336534/Zxapitest