专栏首页测试游记Django的注册功能(五)

Django的注册功能(五)

最简单的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

本文分享自微信公众号 - 测试游记(zx94_11),作者:zx钟

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Vue完成一个checklist

    这里封装了一个storage.js,用于保存数据至本地,这样下次打开页面还是会恢复至上次关闭的时候。

    zx钟
  • 测试开发进阶(三十四)

    zx钟
  • Jenkins(五)

    查看全局变量:http://「Jenkins服务器地址」:「端口」/pipeline-syntax/globals

    zx钟
  • 【带着canvas去流浪】 (3)绘制饼图

    使用原生canvasAPI绘制饼图(南丁格尔玫瑰)。(截图以及数据来自于百度Echarts官方示例库【查看示例链接】)。

    大史不说话
  • python学习笔记01-基础

    和list比较,dict有以下几个特点: (1)查找和插入的速度极快,不会随着key的增加而增加; (2)需要占用大量的内存,内存浪费多。 而list相反: (...

    py3study
  • Rx.NET 简介

    官网: http://reactivex.io/ 它支持基本所有的主流语言. 这里我简单介绍一下Rx.NET. 基本概念和RxJS是一样的. 下面开始切入正题....

    solenovex
  • 用Java 8 stream流实现简洁的集合处理

    java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中。而且java8的很多新特性都是革命性的,...

    宜信技术学院
  • Java 8中集合优雅快速的处理方式

    相信现在大多数的伙伴们,都在使用Java 8了,而 Java 8相比以前的版本,是作出了革命性的改变。Java8的特性大致可总结为,开发速度更快,代码更少,增加...

    攻城狮的那点事
  • 大数据时代个人信息保护须更强化

    大数据时代是一个最好的时代,也是一个最坏的时代。 网络和通讯工具的迅猛发展让信息成为这个时代流通最快的资源。各种各样的信息极大地丰富、方便了我们的生活,改...

    腾讯研究院
  • pytorch学习笔记(八):PytTorch可视化工具 visdom

    Visdom PyTorch可视化工具 本文翻译的时候把 略去了 Torch部分。 项目地址 ? 一个灵活的可视化工具,可用来对于 实时,富数据的 创建,组织和...

    ke1th

扫码关注云+社区

领取腾讯云代金券