美文网首页程序员Django
Django的注册功能(五)

Django的注册功能(五)

作者: 测试游记 | 来源:发表于2019-02-28 23:48 被阅读18次

    最简单的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()就可以进行验证了
    以下是几个测试的结果:

    通过测试 不通过测试1 不通过测试2

    可以看到如果输入符合要求的内容表单会自动校验并返回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:欢迎关注我的公众号~


    我的公众号

    相关文章

      网友评论

        本文标题:Django的注册功能(五)

        本文链接:https://www.haomeiwen.com/subject/qqpluqtx.html