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读写二进制文件的方法
May 09 Python
python实现按任意键继续执行程序
Dec 30 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
python制作mysql数据迁移脚本
Jan 01 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
PyQt5实现简易计算器
May 30 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
Python 多线程之threading 模块的使用
Apr 14 Python
Python中22个万用公式的小结
Jul 21 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 年龄计算函数(精确到天)
2012/06/07 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
JavaScript知识点整理
2015/12/09 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
python实现BackPropagation算法
2017/12/14 Python
一百多行python代码实现抢票助手
2018/09/25 Python
python实现多进程代码示例
2018/10/31 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
Python 实现try重新执行
2019/12/21 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
应用服务器有那些
2012/01/19 面试题
演讲稿的写法
2014/05/19 职场文书
还款承诺书范文
2014/05/20 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
2014年技术员工作总结
2014/11/18 职场文书
农业项目合作意向书
2015/05/08 职场文书
小学生手册家长意见
2015/06/03 职场文书