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 SQLite3数据库操作类分享
Jun 10 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
tensorflow 变长序列存储实例
Jan 20 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
聊聊python中的异常嵌套
Sep 01 Python
python绘制趋势图的示例
Sep 17 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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压缩和解压缩字符串的方法
2015/03/14 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP实现微信发红包程序
2015/08/24 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
php 多文件上传的实现实例
2016/10/23 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
javascript数组排序汇总
2015/07/07 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
go和python调用其它程序并得到程序输出
2014/02/10 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
基于Python实现粒子滤波效果
2020/12/01 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
前台文员岗位职责及工作流程
2013/11/19 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
学校节能减排倡议书
2014/05/16 职场文书
大学生党员承诺书
2014/05/20 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python