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多线程编程中的join函数使用心得
Sep 02 Python
python使用socket远程连接错误处理方法
Apr 29 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
pandas对指定列进行填充的方法
Apr 11 Python
Python列表切片常用操作实例解析
Mar 10 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
Python利用命名空间解析XML文档
Aug 10 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
Python实现自动整理文件的脚本
Dec 17 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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桌面中心(二) 数据库写入
2007/03/11 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
短信提示使用 特效
2007/01/19 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
js模拟类继承小例子
2010/07/17 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
python实现简单成绩录入系统
2019/09/19 Python
Python可以实现栈的结构吗
2020/05/27 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
python如何构建mock接口服务
2021/01/28 Python
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
25道Java面试题集合
2013/05/21 面试题
大学生党课思想汇报
2013/12/29 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
高中地理教学反思
2014/01/29 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
岳庙导游词
2015/02/04 职场文书
会计求职自荐信范文
2015/03/04 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
python保存图片的四个常用方法
2022/02/28 Python