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 19 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
获取python文件扩展名和文件名方法
Feb 02 Python
对python中Json与object转化的方法详解
Dec 31 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
Django框架安装方法图文详解
Nov 04 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
python进度条显示之tqmd模块
Aug 22 Python
详解python变量与数据类型
Aug 25 Python
Python可视化学习之matplotlib内置单颜色
Feb 24 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中const与define的应用区别
2013/06/18 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php提高网站效率的技巧
2015/09/29 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
使用js实现数据格式化
2014/12/03 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
python3中eval函数用法使用简介
2019/08/02 Python
Python安装OpenCV的示例代码
2020/03/05 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
网上快餐厅创业计划书
2014/02/01 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
用python实现监控视频人数统计
2021/05/21 Python
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技