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继承和抽象类的实现方法
Jan 14 Python
python操作redis的方法
Jul 07 Python
python 平衡二叉树实现代码示例
Jul 07 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
python制作微博图片爬取工具
Jan 16 Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 Python
教你利用python实现企业微信发送消息
May 23 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 Python
浅析python中特殊文件和特殊函数
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执行速率优化技巧小结
2008/03/15 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
js tab 选项卡
2009/04/26 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
js实现弹窗效果
2020/08/09 Javascript
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
企业车辆管理制度
2014/01/24 职场文书
企业申诉管理制度
2014/01/30 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
网站推广策划方案
2014/06/04 职场文书
小学生常见病防治方案
2014/06/06 职场文书
护士辞职信怎么写
2015/02/27 职场文书
任命书标准格式
2015/03/02 职场文书
管理失职检讨书范文
2015/05/05 职场文书
水浒传读书笔记
2015/06/25 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python