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 相关文章推荐
开始着手第一个Django项目
Jul 15 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
Python实现识别图片内容的方法分析
Jul 11 Python
django_orm查询性能优化方法
Aug 20 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
使用Python的turtle模块画国旗
Sep 24 Python
Python JSON编解码方式原理详解
Jan 20 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 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编写的SVN类
2013/07/18 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
房地产活动策划方案
2014/05/14 职场文书
设计师求职信
2014/07/01 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
python多线程方法详解
2022/01/18 Python