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 文件重命名工具代码
Jul 26 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
Python实现设置windows桌面壁纸代码分享
Mar 28 Python
Python中join和split用法实例
Apr 14 Python
Python功能键的读取方法
May 28 Python
Python实现带百分比的进度条
Jun 28 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
python字符串格式化方式解析
Oct 19 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
Pytorch 如何实现LSTM时间序列预测
May 17 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
整理Python中的赋值运算符
2015/05/13 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
利用python发送和接收邮件
2016/09/27 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
出国签证在职证明
2014/01/16 职场文书
公司领导班子对照材料
2014/08/18 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
公务员考察材料范文
2014/12/23 职场文书
2019个人工作总结
2019/06/21 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
JavaScript控制台的更多功能
2021/04/28 Javascript