`
美丽的小岛
  • 浏览: 310717 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Django中表单的用法深探

 
阅读更多

django的表单设计真的很棒,涉及非常多的功能,今天介绍django较为主流的几种表单使用方法。注:本文中表单与form通用、模型与model通用。
表单、模型的基础知识可以通过django book学习。传送门:http://djangobook.py3k.cn/2.0/
0、用例
我在本篇博客中,将使用同一个用例,前后会以不同的方式表示它,以此介绍不同的表单实现方法。
用例很简单,是一个叫做Server的类(大多数时候也可以理解为数据库中的表)。用例是我直接从项目中拿出来的,简化了一下。Server就是通常我们说的服务器,包括name、ip地址、端口、cpu个数、内存、状态等几个属性。
1、方法1 继承forms
django自带forms类。最简单的表单使用方法就是继承forms实现表单。
具体实现方法,首先引入forms
from django import forms
然后编写具体的表单
class ServerForm(forms.Form):
user = forms.CharField(label=_(u"名称"),max_length=30,required=True,widget=forms.TextInput(attrs={'size': 20,}))
ip = forms.IPAddressField(label=_(u"IP地址"),max_length=20,required=True,widget=forms.TextInput(attrs={'size': 20,}))
port = forms.IntegerField(label=_(u"通信端口"),required=True,widget=forms.TextInput(attrs={'size': 20,}))
cpunum = forms.IntegerField(label=_(u"CPU个数"),required=True,widget=forms.TextInput(attrs={'size': 20,}))
mem = forms.IntegerField(label=_(u"内存"),required=True,widget=forms.TextInput(attrs={'size': 20,}))
state = forms.CharField(label=_(u"状态"),max_length=30,required=True,widget=forms.TextInput(attrs={'size': 20,}))
2、方法2 继承ModelForm
在实际开发中,一般会根据模型(model)生成表单(form),因此继承ModelForm是一种十分常见便捷的用法。
具体实现方法,分为两部分来介绍。
1)建立模型(model)
一般会建立一个叫做“models.py”的文件建立模型。在该文件中,需要引入models
from django.db import models
然后编写具体的模型
class Server(models.Model):
name = models.CharField(u"名称", max_length=30, null=True, blank=True, unique=True)
ip = models.IPAddressField(u"IP地址", max_length=20,unique=True)
port = models.IntegerField(u"通信端口")
cpunum = models.IntegerField(u"CPU核数", null=True, blank=True)
mem = models.IntegerField(u"内存", null=True, blank=True)
state = models.CharField(u"状态", max_length=20, null=True, blank=True)
def __unicode__(self):
return self.name
class Meta:
ordering = ['name','ip']
2)建立表单(form)
一般会建立一个叫做“form.py”的文件建立模型。在该文件中,需要引入ModelForm类和对应的模型(model)类
from django.forms import ModelForm
from cloud.models import Server
然后编写具体的表单
class ServerForm(ModelForm):
class Meta:
model = Server
model = Server,表明这个表单继承名叫Server的模型。
3、方法3 继承ModelForm,限定属性
接着方法2继续思考,许多时候我们需要表单继承某一个模型,但是不需要继承其全部的属性。结合我们的用例来说,在添加Server时,我们假定我们只需要填写name、ip、port等信息,而不需要填写state。这时我们需要在继承模型Server的基础上,限定属性不包括state。
具体实现方法:
class ServerForm(ModelForm):
class Meta:
model = Server
fields = ('name', 'ip', 'prot', 'cpunum', 'mem')


4、方法4 继承ModelForm,修改属性
接着方法2、方法3继续思考,有时我们需要表单继承某一个模型,不仅需要限定其属性,还需要修改其中的某些属性。结合我们的用例来说,在添加Server时,我们假定我们只需要填写name、ip、port等信息,不需要填写state。同时,我们假定cupnum(cpu核数)不能任意填写,它只能是2、4、8、16中的一种,这就要求我们在继承模型Server的基础上,修改表单中的cpunum。
具体实现方法:
cpunum_choice = (
('', u"---------"),
(2, u"2"),
(4, u"4"),
(8, u"8"),
(16, u"16"),
)
class ServerForm(ModelForm):
cpunum = forms.ChoiceField(label=_(u"CPU核数"),required=True, choices=cpunum_choice)
class Meta:
model = Server
fields = ('name', 'ip', 'prot', 'cpunum', 'mem')
5、方法5 继承ModelForm,添加表单项
接着方法2、方法3继续思考,有时我们需要表单继承某一个模型,不仅需要限定其属性,还需要添加新的表单项。结合我们的用例来说,在添加Server时,我们假定不需要填写state,除此之外还需要填写这个任务的紧急程度(将添加Server看作一个任务)。这时我们需要在继承模型Server的基础上,限定属性不包括state,然后包含一个新的选项“任务等级”。
具体实现方法:
level_choice = (
('ext', u"特急"),
('ugt', u"紧急"),
('nor', u"普通"),
)
class ServerForm(ModelForm):
level = forms.ChoiceField(label=_(u"任务等级"),required=True, widget=forms.RadioSelect, choices=level_choice)
class Meta:
model = Server
fields = ('name', 'ip', 'prot', 'cpunum', 'mem')
django表单设计涵盖较广,还设计widget等内容,虽与本文相关,但不是本文重点,这里不做详细阐述,有机会再写相关内容。

 

例子http://blog.chinaunix.net/uid-21633169-id-4349923.html

 

分享到:
评论

相关推荐

    Python关于 Django 的web- Form 表单验证

    在Python的Web开发框架Django中,Form表单验证是一个至关重要的部分,它允许开发者创建用户界面并确保从用户那里接收到的数据是...阅读"3.4 Django Form.pdf"这样的资料,将进一步深入理解Django表单验证的细节和实践。

    8. Django 表单与模型

    ### Django表单(Forms) **1. 表单的作用** Django表单用于处理用户输入,它们提供了验证、错误处理和HTML渲染等功能,使得处理HTTP请求更加简单、安全。表单通常基于模型,但也可以独立定义。 **2. 创建表单** ...

    Django forms表单 select下拉框的传值实例

    在Django框架中,表单(forms)是处理用户输入数据的重要工具,它简化了前后端交互的过程。本文将深入探讨如何在Django forms中创建一个包含`select`下拉框的表单,并且理解其传值机制。 首先,我们需要在`forms.py...

    Python Django VS web 表单实例

    在模板文件中,我们可以使用Django模板语言(DTL)来显示表单,包括字段、错误消息等。例如,`{{ form.as_p }}`可以将整个表单以段落形式渲染出来,而`{{ form.username }}`则会输出用户名字段。 此外,Django的...

    django layui表单加图片上传功能(Django,layui).zip

    3. **Django表单**: 使用Django的表单系统创建一个`ImageForm`,它将与Layui的表单元素配合工作。在表单中,添加`ImageField`,并确保设置`widget`为`ClearableFileInput`,以便提供删除图片的选项。 ```python ...

    Django——表单.doc

    在实际开发中,我们通常会使用Django的表单类(`forms.Form`或`forms.ModelForm`)来构建和验证表单。表单类允许我们定义字段、验证规则以及处理数据。模型表单(`forms.ModelForm`)更是可以直接绑定到数据库模型,...

    Django 中文文档

    Django是一个使用Python语言编写的高级Web框架,它鼓励快速开发和干净、实用的设计。Django遵循MVC(模型-视图-控制器)设计模式,使得Web开发更加模块化和可维护。以下是根据给定文件内容整理出的Django中文文档的...

    Django Form表单上传文件.zip

    在Django框架中,表单(Form)是处理用户数据的核心工具,特别是在处理文件上传时。本教程将深入探讨如何使用Django Forms来实现文件上传功能。 首先,我们需要了解Django Form的基本结构。在Django中,创建一个...

    Django中文版 教程.

    4. Django模板系统:系统性介绍了Django模板的基础使用方法,包括模板继承、模板标签和过滤器的运用,以及如何在视图中使用模板。 5. Django模型的高级用法:详细阐述了如何在Django中定义和操作模型,包括数据库...

    Django之提交表单与前后端交互的方法

    本文详细介绍了在Django框架中如何使用GET和POST两种方式提交表单数据的方法,以及前后端之间如何进行有效的数据交互。了解并掌握这些技术对于构建高质量的Web应用程序至关重要。希望本文能帮助读者更好地理解和实践...

    解决django中ModelForm多表单组合的问题

    Form类是Django中处理用户输入的基础组件,它允许我们使用声明式语法定义表单字段。例如,创建一个名为ProjectForm的表单: ```python from django import forms class ProjectForm(forms.Form): name = forms....

    django中文手册

    - MVC(Model-View-Controller)架构在 Django 中体现为 MTV(Model-Template-View)模式。 - Django 提供了内置的 ORM(Object-Relational Mapping)系统,使得与数据库交互变得简单。 2. **安装与设置** - ...

    django1.8.2中文文档

    在 Django 1.8.2 中,你可以使用 Class-Based Views 来编写更加简洁和可复用的视图代码。 **模板(Templates)** Django 的模板系统是一种声明式语言,允许你以 HTML 的形式描述动态内容。它支持变量插入、控制流...

    Django中文文档pdf

    通过阅读Django中文文档PDF,你可以深入了解这些特性的具体用法,以及如何利用Django进行项目开发。文档涵盖了从安装Django、创建第一个项目,到高级主题如中间件、自定义管理命令、信号处理器等内容。对于初学者,...

    django中文教程 word版

    Django 提供了强大的表单处理功能,包括表单定义、验证和渲染。本章将详细介绍如何创建和使用表单,以及如何处理用户提交的表单数据,确保数据安全且符合预期。 **第八章 高级视图和URL配置** 在这一章,你将学习...

    django1.8中文文档

    文档会讲解如何定义表单类、使用模型表单以及验证用户输入。此外,还会介绍如何在模板中渲染表单和处理 POST 数据。 **5. 中间件** 中间件是 Django 中一种特殊的组件,可以在请求处理的各个阶段插入自定义代码。...

    django-chinese-docs pdf

    - **第4部分:表单和通用视图**:介绍Django表单的使用方法及内置的通用视图,如`ListView`、`DetailView`等。 - **第5部分:测试**:提供Django测试框架的使用指南,包括单元测试、集成测试等内容。 - **第6部分...

    Django 中文文档 1.8.pdf

    4. **表单和通用视图**:Django表单用于处理用户输入,包括数据验证,而通用视图则提供了一套预先构建的视图模式,以简化常见的编程任务。 5. **测试**:这部分介绍了如何编写单元测试和功能测试,确保代码质量,并...

    解决Django中多条件查询的问题

    总结,解决Django中多条件查询的问题,可以利用字典构建查询条件,结合Django ORM的`filter()`方法,实现动态、灵活的查询。这种方法简单易懂,适用于多种场景,特别是当查询条件数量不确定时。同时,前端与后端的...

Global site tag (gtag.js) - Google Analytics