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 相关文章推荐
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python对象属性自动更新操作示例
Jun 15 Python
Python实现的建造者模式示例
Aug 06 Python
django连接oracle时setting 配置方法
Aug 29 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
Django app配置多个数据库代码实例
Dec 17 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python子进程subpocess原理及用法解析
Jul 16 Python
python ssh 执行shell命令的示例
Sep 29 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 Python
PyTorch预训练Bert模型的示例
Nov 17 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
用ODBC的分页显示
2006/10/09 PHP
php escape URL编码
2008/12/10 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
Ionic快速安装教程
2016/06/03 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
Cpy和Python的效率对比
2015/03/20 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
python 链接和操作 memcache方法
2017/03/04 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
什么是GWT的Module
2013/01/20 面试题
《蜗牛》教学反思
2014/02/18 职场文书
董事长秘书工作职责
2014/06/10 职场文书
市场营销专业求职信
2014/06/17 职场文书