ModelForm组件的简单使用

models.py

from django.db import models

class UserInfo(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField(max_length=32)
phone = models.CharField(max_length=32)
password = models.CharField(max_length=64) def __str__(self):
return self.username

forms.py

import re
from django import forms
from django.forms import widgets as form_widgets
from account.models import UserInfo class RegisterForm(forms.ModelForm):
password = forms.CharField(
min_length=6,max_length=32,
error_messages={
'required':'密码不能为空',
'min_length':'密码长度必须大于6小于32',
'max_length':'密码长度必须大于6小于32',
},
widget=forms.PasswordInput()
)
password_confirmed = forms.CharField(
error_messages={'required':'确认密码不能为空'},
widget=forms.PasswordInput()
)
class Meta:
model = UserInfo
fields = '__all__'
error_messages = {
'username':{
'required': '用户名不能为空',
},
'email': {
'required': '邮箱地址不能为空',
'invalid': '邮箱地址格式错误',
},
'phone': {
'required': '电话号码不能为空',
},
}
widgets = {
'username':form_widgets.TextInput(),
'email':form_widgets.EmailInput(),
'phone':form_widgets.TextInput(),
} def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs) def clean_username(self):
value = self.cleaned_data['username']
patten = re.compile(r'^[a-zA-Z0-9.@_]{2,16}$')
if not patten.match(value):
raise forms.ValidationError('用户名应该是由大小写字母/数字/特俗符号组成(.@_)的2到16位字符串')
return value def clean_phone(self, ):
value = self.cleaned_data['phone']
patten = re.compile(r'^(13[0-9]|14[5-9]|15[0-3,5-9]|16[2,5,6,7]|17[0-8]|18[0-9]|19[1,3,5,8,9])[0-9]{8}$')
if not patten.match(value):
raise forms.ValidationError('手机号码格式错误')
if UserInfo.objects.filter(phone=value).count():
raise forms.ValidationError('手机号码已经存在')
return value def clean(self):
password = self.cleaned_data.get("password")
password_confirmed = self.cleaned_data.get("password_confirmed")
if password != password_confirmed:
self.add_error('password_confirmed', forms.ValidationError('密码不一致'))
return self.cleaned_data
return self.cleaned_data

views.py

from django.shortcuts import render
from django.views import View
from account.forms import RegisterForm
from django.shortcuts import render, redirect
from django.core.urlresolvers import reverse class RegisterView(View):
def get(self,request):
context = { 'form':RegisterForm() }
return render(request, 'register.html', context)
def post(self,request):
form = RegisterForm(request.POST)
if form.is_valid():
form.save()
return redirect(reverse('account:index'))
return render(request, 'register.html', {'form':form}) class IndexView(View):
def get(self,request):
return render(request,'index.html')

register.html

{% load static %}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form method="POST" novalidate>
{% csrf_token %}
<p> 用户名:{{ form.username }} {{ form.errors.username.0 }} </p>
<p> 密码:{{ form.password }} {{ form.errors.password.0 }} </p>
<p> 确认密码:{{ form.password_confirmed }} {{ form.errors.password_confirmed.0 }} </p>
<p> 邮箱:{{ form.email }} {{ form.errors.email.0 }}</p>
<p> 手机:{{ form.phone }} {{ form.errors.phone.0 }}</p>
<input type="submit" value="提交" />
</form> </body>
</html>

  

Djang之ModelForm组件的简单使用的更多相关文章

  1. day063 form 和modelform组件

    注册功能: (写一个简单的注册功能,要求用户名长度不得小于6位.) 普通方式写注册功能  views视图下: def register(request): error_msg=' ' if reque ...

  2. Django之Form、ModelForm 组件

    Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...

  3. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  4. ModelForm组件

    ModelForm组件 Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用: ...

  5. Django基础之forms组件中的ModelForm组件

    Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...

  6. Django - ModelForm组件

    一.ModelForm组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样一张学生表, ...

  7. Django框架 之 modelform组件

    Django框架 之 modelform组件 浏览目录 创建mldelform 添加记录 编辑记录 Django框架中的modelform组件 通过名字我们可以看出来,这个组件的功能就是把model和 ...

  8. ModelForm组件介绍

    照抄自:http://www.jb51.net/article/126786.htm ModelForm组件如同它的名字一样就是把model和form结合起来,在有些场景可以起到意想不到的效果. 先来 ...

  9. 12.Django基础十之Form和ModelForm组件

    一 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户 ...

随机推荐

  1. linux firewall指令

    CentOS7中firewall防火墙详解和配置,.xml服务配置详解修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败, ...

  2. 用JavaScript更新CSS变量

    HTML <div class="mover"></div> CSS .mover { width: 50px; height: 50px; backgro ...

  3. BZOJ1791 [Ioi2008]Island 岛屿[基环树+单调队列优化DP]

    基环树直径裸题. 首先基环树直径只可能有两种形式:每棵基环树中的环上挂着的树的直径,或者是挂在环上的两个树的最大深度根之间的距离之和. 所以,先对每个连通块跑一遍,把环上的点找出来,然后对环上每个点跑 ...

  4. BZOJ3331 [BeiJing2013]压力[圆方树+树上差分]

    圆方树新技能get.具体笔记见图连通性问题学习笔记. 这题求无向图的必经点,这个是一个固定套路:首先,一张连通的无向图中,每对点双和点双之间是以一个且仅一个割点连接起来的(如果超过一个就不能是割点了) ...

  5. 微信小程序审核不通过的解决方法

    前言 近来,微信小程序一直活跃在开发者的眼球中.很多开发者都投身微信小程序的开发中,而这些开发者,总是需要面对最后一道难题:如何以一种优雅的姿势来通过微信官方的审核.本文基于几天前提交审核的一次总结, ...

  6. C# 通过Process.Start() 打开程序 置顶方法

    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { try { foreach ...

  7. 题解 [51nod1274] 最长递增路径

    题面 解析 这题一眼DP啊. 然而想了半天毫无思路. 后来看题解后发现可以按边权的大小顺序DP. 将边权从小到大排序,对于权值相同的边分为一组. 设\(f[i][0]\)表示经过当前权值的边后到达\( ...

  8. TTTTTTTTTTTTTTTTT Gym 100851J Jump 构造

    题意:首先你输入一个数字n(偶数)(n<=1000),电脑则自动生成一个长度为n的01字符串,你每次可以构造出一个长度为n的01字符串,输入给电脑后电脑进行判定,如果你的字符串与电脑的字符串完全 ...

  9. JetBrains IDE 基本快捷键

    转载自:https://nextfe.com/jetbrains-ide-shortcuts/ 一个好的手艺人很熟悉他的工具.软件开发者也不例外.所以,在编程的过程中,值得了解一些键盘快捷键,以免因为 ...

  10. TextRCNN 文本分类 阅读笔记

    TextRCNN 文本分类 阅读笔记 论文:recurrent convolutional neural networks for text classification 代码(tensorflow) ...