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的Django框架中包装视图函数
Jul 20 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
python 链接和操作 memcache方法
Mar 04 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
python实现自动发送邮件
Jun 20 Python
对pyqt5中QTabWidget的相关操作详解
Jun 21 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python中编写函数并调用的知识点总结
Jan 13 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实现memcache缓存示例讲解
2013/12/04 PHP
PHP中的Memcache详解
2014/04/05 PHP
PHP生成条形图的方法
2014/12/10 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
在Django中同时使用多个配置文件的方法
2015/07/22 Python
python 排序算法总结及实例详解
2016/09/28 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Python可迭代对象操作示例
2019/05/07 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
python生成器推导式用法简单示例
2019/10/08 Python
浅析PEP572: 海象运算符
2019/10/15 Python
详解Python中的路径问题
2020/09/02 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
Hammitt官网:设计师手袋
2020/05/23 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
消防安全汇报材料
2014/02/08 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
爱晚亭导游词
2015/02/09 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
刮痧观后感
2015/06/05 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书