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编码问题汇总
Sep 06 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python让列表倒序输出的实例
Jun 25 Python
pymongo中聚合查询的使用方法
Mar 22 Python
详解python中@的用法
Mar 27 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
Python爬取网页信息的示例
Sep 24 Python
一文搞懂Python Sklearn库使用
Aug 23 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
基于php 随机数的深入理解
2013/06/05 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
新闻编辑自荐书范文
2014/02/12 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
安全隐患整改报告
2014/11/06 职场文书
社区活动总结范文
2015/05/07 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android