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. Maven 依赖的作用域

    Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了 ...

  2. thymeleaf小知识

    1.根据不同性别,显明不同的默认图片:th:if th:src   图片路径 <img th:if="${gender=='男'}" id="admission_p ...

  3. Navicat Premium 12连接mysql-8.0.15-winx64 出现2059异常

    错误

  4. [HBase]region compaction流程

  5. Linux查找文件内容小技巧

    目录 grep ag linux系统查找文件内容最常见的命令有grep和ag grep grep是比较常见的查找命令 # 在当前目录的py文件里查找所有相关内容 grep -a "broad ...

  6. Elastic-Job开发指南(转)

    原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/user_guide/ 开发指南 代码开发 作业类型 目前提供3种作业类型,分别是S ...

  7. Ubuntu本地软件源制作

    操作 获取需要的deb包 #执行安装后,安装的包会保存在/var/cache/apt/archives 目录下 apt-get install vim #查看 正在处理用于 man-db (2.8.7 ...

  8. android&ios区别

    转自(只讲干货的老张) 面试中经常提问到一个点,就是做手机测试绕不去的点,那就是Android和ios的区别.这篇文章只做一些比较重要的点讲一下,太深入部分就不讲了,毕竟我做的是测试,而Android ...

  9. CSP-S2019游记——终点

    准退役一年了,回来苟CSP,填补去年留下的遗憾,也算是为这个不那么完美的高中OI生涯划一个句点吧. DAY 1 考前:昨天晚上睡得不太好.早上洛谷打卡居然是中吉(3K说的大吉嘞???).在地铁上有点犯 ...

  10. 【线性代数】4-1:四个正交子空间(Orthogonality of the Four Subspace)

    title: [线性代数]4-1:四个正交子空间(Orthogonality of the Four Subspace) categories: Mathematic Linear Algebra k ...