Django实现表单验证


Posted in Python onSeptember 08, 2018

本文实例为大家分享了Django实现表单验证的具体代码,供大家参考,具体内容如下

models.py

class Users(models.Model):
  nickname = models.CharField(max_length=16, null=False, blank=False, unique=True)
  email = models.EmailField(max_length=32, null=False, blank=False, unique=True)
  password = models.CharField(max_length=64, null=False, blank=False)
  head = models.ImageField(default="decault.png")
  age = models.CharField(max_length=3,blank=True,null=True)
  sex = models.CharField(max_length=2, blank=True, null=True)
  isactivate = models.BooleanField(default=False)

  def save(self):
    if not self.password.startswith('pbkdf2_'):
      self.password = make_password(self.password)
    super().save()

form.py

from django import forms
from django.core.exceptions import ValidationError

from user.models import Users

#定义验证器
def nickname_validate(nickname):
  u = Users.objects.filter(nickname=nickname)
  if len(u):
    print(len(u))
    raise ValidationError('用户名已存在')

#定义表单
class RegisterForm(forms.Form):
  nickname = forms.CharField(validators=[nickname_validate],
                label='用户名',
                max_length=16,
                min_length=4,
                required=True,
                widget= forms.TextInput(),
                )

  password = forms.CharField(label='密码',
                max_length=64,
                min_length=6,
                required=True,
                widget=forms.PasswordInput())

  email = forms.EmailField(label='邮箱',
               max_length=32,
               required=True)

  age = forms.CharField(label='年龄',
             max_length=3,
             required=False)

  sex = forms.ChoiceField(label='性别',
              choices = ((0,'男'),(1,'女'),),
              required=False)

view.py

from user.forms import RegisterForm
from user.models import Users

def register(request):
  if request.method == 'POST':
    form = RegisterForm(request.POST)
    if form.is_valid():
      u = Users()
      u.nickname = form.cleaned_data['nickname']
      u.email = form.cleaned_data['email']
      u.password = form.cleaned_data['password']
      u.age = form.cleaned_data['age']
      u.sex = form.cleaned_data['sex']
      u.save()
      return render(request,'user_info.html')
    else:
      return render(request, 'register.html',context={'form':form,'errors': form.errors})
  else:
    form = RegisterForm()
  return render(request,'register.html',context={'form':form})

register.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>注册</title>
</head>
<body>
  <form class="form" action="{% url 'user:register' %}" method="post">
    {% csrf_token %}
    <table>
      {{ form.as_p }}
    </table>
    <button type="submit" class="btn btn-primary btn-block">注册
    </button>
    <input type="hidden" name="next" value="{{ next }}"/>
  </form>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中正则表达式的详细教程
Apr 30 Python
python实现从字典中删除元素的方法
May 04 Python
Python的迭代器和生成器
Jul 29 Python
Python+Wordpress制作小说站
Apr 14 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
python一键去抖音视频水印工具
Sep 14 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
python可视化text()函数使用详解
Feb 11 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
python 命令行传参方法总结
May 25 Python
python实现排序算法解析
Sep 08 #Python
TensorFlow实现Logistic回归
Sep 07 #Python
tensorflow实现简单逻辑回归
Sep 07 #Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 #Python
TensorFlow实现iris数据集线性回归
Sep 07 #Python
TensorFlow实现模型评估
Sep 07 #Python
使用tensorflow实现线性svm
Sep 07 #Python
You might like
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
javascript 动态参数判空操作
2008/12/22 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python连接phoenix的方法示例
2017/09/29 Python
pycharm显示远程图片的实现
2019/11/04 Python
Python修改列表值问题解决方案
2020/03/06 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
理工科学生的自我评价
2013/12/15 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
水知道答案观后感
2015/06/08 职场文书
期中考试后的感想
2015/08/07 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS