Django学习系列之Form基础

2015-05-15 07:14:57

标签:form django
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://5ydycm.blog.51cto.com/115934/1651453

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基础的更多相关文章

  1. Django学习系列之Form验证

    django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...

  2. Django学习系列之Form表单结合ajax

      Forms结合ajax Forms的验证流程: 定义用户输入规则的类,字段的值必须等于html中name属性的值(pwd= forms.CharField(required=True)=<i ...

  3. Django学习---Web框架及基础知识

    Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...

  4. Django学习系列6:使用selenium测试用户交互

    学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...

  5. django学习系列——python和php对比

    python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...

  6. Django学习系列之request对象

    先来一个简单的实例 urls.py from django.conf.urls import url from django.contrib import admin from cmdb import ...

  7. Django学习系列之captcha 验证码插件

    安装部署 安装captcha pip3. install django-simple-captcha== settings.py中引入captcha INSTALLED_APPS = [ 'djang ...

  8. Django学习系列之Python+Xadmin

    项目树 引入xadmin pycharm在项目中创建存放xadmin的目录 右键项目名称-->pythonpackage-->输入名称:extra_app 拷贝xadmin代码到extra ...

  9. Django学习系列之ORM-QuerySetAPI

    基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = models.Tb1(c1 ...

随机推荐

  1. 确认某端口占用情况并结束相应进程(Windows)

    (1)确认某端口是否被占用 (2)通过查找对应的PID号,定位是哪一个进程在使用该端口 (3)通过PID号结束该进程 # 查找端口2000是否被占用C:\Users\tdcqma>netstat ...

  2. VS2012 开发SharePoint 2013 声明式workflow action(activity)之 HelloWorld

    本文讲述VS2012 开发SharePoint 2013 声明式workflow action 之 HelloWorld. 使用VS2012开发客户化的workflow action是SharePoi ...

  3. (3)TXT转为XML

    <?xml version="1.0" encoding="utf-8"?> <bocb2e> <head /> <t ...

  4. 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

    Linux kernel  的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地 ...

  5. Windows 7下配置JDK环境变量,JAVA环境变量配置,Tomcat服务器的使用

    参考来源: http://www.cnblogs.com/pannysp/archive/2012/03/07/2383364.html 1. 常识: 1.1 War包 War包一般是在进行Web开发 ...

  6. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  7. oracle 判断是不是数值/数字

    1. 利用 to_number CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)     RETURN NUMBER IS     v_st ...

  8. [Codeforces677B]Vanya and Food Processor(模拟,数学)

    题目链接:http://codeforces.com/contest/677/problem/B 题意:n个土豆,每个土豆高ai.现在有个加工机,最高能放h,每次能加工k.问需要多少次才能把土豆全加工 ...

  9. hdu 4864 Task (贪心 技巧)

    题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...

  10. poj 1185 炮兵阵地(三维状态压缩dP)

    题目:http://poj.org/problem?id=1185 思路: d[i][j][k]表示第i行的状态为第k个状态,第i-1行的状态为第j个状态的时候 的炮的数量. 1表示放大炮, 地形状态 ...