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