Django学习系列之Form基础
2015-05-15 07:14:57
Form对与一个网站来说就是一个灵魂,今天我们就来说说Django的Form概述.
本文内容来自官网,互联网及自己实验所得.
表单(forms.py)的定义:
#coding:utf-8
from django import forms
from django.forms.extras.widgets import SelectDateWidget
SEX_CHOICES=(
('male','男'),
('female','女')
)
BIRTH_YEAR_CHOICES = ('1980', '1981', '1982','1983','1984')
#注册表单
class Register(forms.Form):
nickname = forms.CharField(max_length=20,label="昵称",help_text="请输入您的别名!",widget=forms.TextInput(attrs={'class':'special','id':'nick'}),error_messages={'required':u'别名不能为空'})
username = forms.CharField(label="用户名",error_messages={'required':u'用户名不能为空'})
password = forms.CharField(label="密码",widget=forms.PasswordInput)
sex = forms.ChoiceField(widget=forms.RadioSelect,choices=SEX_CHOICES,label="性别")
email = forms.EmailField(label="邮箱",error_messages={'required':u'邮箱不能为空','invalid':u'请输入正确的邮箱'})
phone = forms.CharField(required=False,label="手机号")
birthday = forms.DateField(widget=SelectDateWidget(years=BIRTH_YEAR_CHOICES))
以上是表单经常使用的属性,供其参考.
如,我们需要更改某个表单默认的元素就需要使用widget,并且改变其元素属性就需要使用attrs。
视图(应用)逻辑
views.py
#coding:utf-8
from django.shortcuts import render
from django.http import HttpResponse
from forms import Register
from django.forms.util import ErrorList
# Create your views here.
#重新定义检验错误输出
class DivErrorList(ErrorList):
def __unicode__(self):
return self.as_divs()
def as_divs(self):
if not self: return u''
return u'%s' %''.join([u'<div class="error">%s</div>' % e for e in self])
def register(request):
if request.method == 'POST':
regform = Register(request.POST,auto_id="%s",error_class=DivErrorList)
if regform.is_valid():
nickname = regform.cleaned_data['nickname'] #别名
#print nickname
return HttpResponse(u"{0},欢迎您!".format(nickname))
else:
regform = Register(auto_id="%s",label_suffix=":") #auto_id有3种设置:True/False/str 若是False不需要html元素中的id标识与True相反,auto_id="%s",则是field的名字
return render(request,"register.html",{'reg':regform})
模板
base.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
{% block title %}
首页
{% endblock%}
</title>
</head>
<body>
{% block content %}
这是内容
{% endblock %}
</body>
</html>
register.html
{% extends "base.html" %}
{% block title %}
用户注册
{% endblock %}
{% block content %}
<form method="POST">{% csrf_token %}
<label><h1>用户注册</h1></label></br>
{% comment%}
{% for err_label,err_value in reg.errors.items %}
{{err_label}}:{{err_value}}
{% endfor %}
{% endcomment %}
<label>别名:</label>{{reg.nickname}} {{reg.nickname.help_text}} {{reg.nickname.errors|safe}}</br>
<label>用户名:</label>{{reg.username}} {{reg.username.errors|safe}}</br>
<label>密码:</label>{{reg.password}}</br>
<label>性别:</label>
{% for sex in reg.sex %}
{{ sex }}
{% endfor %}
</br>
<label>邮箱:</label>{{reg.email}}{{reg.email.errors|safe}}</br>
<label>电话:</label>{{reg.phone}}</br>
<label>生日:</label>{{reg.birthday}}</br>
<input type="submit" value="注册"/>
</form>
{% endblock %}
长啥子样?
表单基础通过以上,基本也就这样了,后面就要去研究下表单数据验证这块!
本文出自 “坏男孩” 博客,请务必保留此出处http://5ydycm.blog.51cto.com/115934/1651453
Django学习系列之Form基础的更多相关文章
- Django学习系列之Form验证
django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...
- Django学习系列之Form表单结合ajax
Forms结合ajax Forms的验证流程: 定义用户输入规则的类,字段的值必须等于html中name属性的值(pwd= forms.CharField(required=True)=<i ...
- Django学习---Web框架及基础知识
Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...
- Django学习系列6:使用selenium测试用户交互
学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...
- django学习系列——python和php对比
python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...
- Django学习系列之request对象
先来一个简单的实例 urls.py from django.conf.urls import url from django.contrib import admin from cmdb import ...
- Django学习系列之captcha 验证码插件
安装部署 安装captcha pip3. install django-simple-captcha== settings.py中引入captcha INSTALLED_APPS = [ 'djang ...
- Django学习系列之Python+Xadmin
项目树 引入xadmin pycharm在项目中创建存放xadmin的目录 右键项目名称-->pythonpackage-->输入名称:extra_app 拷贝xadmin代码到extra ...
- Django学习系列之ORM-QuerySetAPI
基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = models.Tb1(c1 ...
随机推荐
- Git教程之管理修改(6)
Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件.你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了 ...
- 基于Jws的WebService项目
基于Jws的WebService项目 1.服务器端建立 1.1.创建接口 [java] view plaincopy @WebService public interface IWebServi ...
- Oracle 多实例如何通过EM进行访问-portlist.ini
[root@redhat4 install]# pwd/u01/app/oracle/product/11.2.0/dbhome_1/install[root@redhat4 install]# mo ...
- Java Swing中Substance常用皮肤
AutumnSkin; BusinessSkin; BusinessBlackSteelSkin; BusinessBlueSteelSkin; ChallengerDeepSkin; CremeSk ...
- tuxedo入门
为文件增加用户执行权限: 官网下载tuxedo111120_64_Linux_01_x86.bin su //进入root操作,防止权限不够 创建文件夹,用来做tuxedo文件的安装路径 cd /op ...
- java中的clone
.clone 要实现cloneable接口: .深度clone和浅度clone .对象.clone() 1. Clone&Copy 假设现在有一个Employee对象,Employe ...
- GET,POST,PUT,DELETE的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- HTTP请求头host解析
Host: 域名 Host表示请求的服务器网址: request headers中的host字段 例如有user.xiaoqiang.com,hotel.xiaoqiang.com 现在需要登录后 ...
- I.MX6 android 获取framebuffer信息
/******************************************************************************** * I.MX6 android 获取 ...
- <十一>面向对象分析之UML核心元素之组件
组件