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
Python全局变量用法实例分析
Jul 19 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
基于python历史天气采集的分析
Feb 14 Python
Python基于mysql实现学生管理系统
Feb 21 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
pycharm代码删除恢复的方法
Jun 26 Python
Python实现简单的俄罗斯方块游戏
Sep 25 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备份/还原MySQL数据库的代码
2011/01/06 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
python发送HTTP请求的方法小结
2015/07/08 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
趣味运动会活动方案
2014/02/12 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
用Python写一个简易版弹球游戏
2021/04/13 Python
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python