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 ...
随机推荐
- iOS 开发中遇到的问题
1. 关于纠结很久的KVO崩溃问题,其真正原因是,在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer,因此而崩溃:长时间纠结的原因是受.cxx_d ...
- BSD历史
在UNIX问世之后(关于UNIX来历史这里不详述),UNIX拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用. 加州大学伯克利分校就是其中之一.在得到源码后, ...
- Android 给listview设置分割线与边界的距离
ListView可通过配置 android:dividerline android:dividerHeight 来实现分割listview中item的效果,如图: 如果想跟上图一样实现这种有设计的分割 ...
- Buffer数据结构和new IO的Memory-mapped files
一.Buffer类 java.nio.Buffer这个类是用来干什么的?有怎样的结构? "Core Java"中是这样定义的“A buffer is array of values ...
- cpan 配置
$ cpan Cpan>o conf init 最主要的是配置镜像地址,试了下,还是香港的靠谱…… cpan中镜像地址列表:http://www.cpan.org/SITES.html 香港的镜 ...
- 20-语言入门-20-Financial Management
题目地址: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=72 描述Larry graduated this year and fina ...
- AndroidApplication Fundamentals(Android应用基础)
AndroidApplication Fundamentals(Android应用基础) Android应用采用Java编程语言来编写,AndroidSDK工具编译我们的代码,连同任何数据和资源文件一 ...
- MinGW GCC下sleep()函数问题
在MinGW GCC下编译带sleep()函数的测试程序,不管是包含了unistd.h头文件,还是stdio.h.stdlib.h头文件,就是找不到该函数的定义!在linux下,sleep()函数的头 ...
- 自己动手实现STL 02:构造析构的基本工具construct()和destroy()(stl_construct.h)
一.前言 上一篇,我先完成了对内存配置器的实现.然而后面在内存上的算法还依赖于两个全局函数,construct()和destroy(),前者负责在指定的内存上调用对象的构造函数,在内存上构造出对象.后 ...
- Awesome-awesome-awesome
Awesome-awesome-awesome A curated list of curated lists of awesome lists. awesome-awesomes @sindreso ...