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入门指引
Apr 01 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
基于树莓派的语音对话机器人
Jun 17 Python
Django中信号signals的简单使用方法
Jul 04 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
Python 统计序列中元素的出现频度
Apr 26 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递归调用的小技巧讲解
2013/02/19 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript中string对象
2015/06/12 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python实现人脸识别代码
2017/11/08 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
Python Lambda函数使用总结详解
2019/12/11 Python
如何理解python面向对象编程
2020/06/01 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
甲方资料员岗位职责
2013/12/13 职场文书
体育活动总结范文
2014/05/04 职场文书
2014年度工作总结报告
2014/12/15 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript