Django学习系列之Form基础
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 ...
随机推荐
- 1、Singleton 单件(创建模式)
一.Singleton模式主要应用在一些特殊的类,在整个系统运行中,有且仅有一个实例的场景 二.Singleton模式分为单线程与多线程情况,当然多线程一样适应单线程 单线程:在这种情况下比较容易,因 ...
- 分布式ActiveMQ集群
分布式ActiveMQ集群的部署配置细节: 官方资料:http://activemq.apache.org/clustering.html 基本上看这个就足够了,本文就不具体分析配置文件了. 1.Qu ...
- 车牌识别LPR(一)-- 研究背景
在年尾用了几天的时间将2014年的所有工作都总结了一遍,将之前的文档综合了下. 以下是LPR系统,车牌识别的一些总结资料. 第一篇:LPR研究背景 汽车的出现改变了以往出行徒步和以马代步的时代,极大地 ...
- Android权限安全(7)binder,service,zygote安全相关简介
binder 提供服务的service中的binder thread 检查调用者的uid 不是root,system就异常. service 也检查调用者的uid 不是root,system,只能注册 ...
- Android Things:Raspberry Pi 3 B 刷入 Android Things
参考文章: http://www.andtuts.com/a-beginners-guide-to-raspberry-pi-3-b-and-android-things/?utm_source=An ...
- struct TABLE_SHARE
struct TABLE_SHARE { TABLE_SHARE() {} /* Remove gcc warning */ /** Category of this table. */ TABLE_ ...
- ha_innobase::rnd_next
/*****************************************************************//** Reads the next row in a table ...
- Android开发时提示Your project contains error(s),please fix them be
有次在使用eclipse写好Android的代码,代码没有报错.然后 想在AVD中运行测试时,总是会弹出错误框,提示信息为: “Your project contains error(s),pl ...
- CURL使用
最近开发的游戏之中需要用到大量的客户端与服务端交互的 东西,开始参考大量的技术文章,感觉是五花八门,眼花缭乱.到后面,真正感受到,学习一门技术,还是需要从它最开始的东西开始学起,要不就是一头雾水,这种 ...
- iOS 静态类库项目的建立与使用
iOS 静态类库项目的建立与使用 新建 Xcode workspace 打开 Xcode , 选择 File -> New -> Workspace , 将 Workspace 命名为 ...