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. iOS 开发中遇到的问题

    1. 关于纠结很久的KVO崩溃问题,其真正原因是,在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer,因此而崩溃:长时间纠结的原因是受.cxx_d ...

  2. BSD历史

    在UNIX问世之后(关于UNIX来历史这里不详述),UNIX拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用. 加州大学伯克利分校就是其中之一.在得到源码后, ...

  3. Android 给listview设置分割线与边界的距离

    ListView可通过配置 android:dividerline android:dividerHeight 来实现分割listview中item的效果,如图: 如果想跟上图一样实现这种有设计的分割 ...

  4. Buffer数据结构和new IO的Memory-mapped files

    一.Buffer类 java.nio.Buffer这个类是用来干什么的?有怎样的结构? "Core Java"中是这样定义的“A buffer is array of values ...

  5. cpan 配置

    $ cpan Cpan>o conf init 最主要的是配置镜像地址,试了下,还是香港的靠谱…… cpan中镜像地址列表:http://www.cpan.org/SITES.html 香港的镜 ...

  6. 20-语言入门-20-Financial Management

    题目地址: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=72    描述Larry graduated this year and fina ...

  7. AndroidApplication Fundamentals(Android应用基础)

    AndroidApplication Fundamentals(Android应用基础) Android应用采用Java编程语言来编写,AndroidSDK工具编译我们的代码,连同任何数据和资源文件一 ...

  8. MinGW GCC下sleep()函数问题

    在MinGW GCC下编译带sleep()函数的测试程序,不管是包含了unistd.h头文件,还是stdio.h.stdlib.h头文件,就是找不到该函数的定义!在linux下,sleep()函数的头 ...

  9. 自己动手实现STL 02:构造析构的基本工具construct()和destroy()(stl_construct.h)

    一.前言 上一篇,我先完成了对内存配置器的实现.然而后面在内存上的算法还依赖于两个全局函数,construct()和destroy(),前者负责在指定的内存上调用对象的构造函数,在内存上构造出对象.后 ...

  10. Awesome-awesome-awesome

    Awesome-awesome-awesome A curated list of curated lists of awesome lists. awesome-awesomes @sindreso ...