最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得。
一,创建一个表单
创建一个Form表单有两种方式:
第一种方式是继承于forms.Form,的一个子类,通过在form中选择你需要的类型来规定表单之
中字段的类型
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(required=False)
其中 django 内置了很多的字段,让开发者可以直接使用,并且内置了这些字段的检验使站点中的表单数据检测变得方便,也提供了一些可选择的检验规则如required=False等,具体的可以去Django 官网查询API。
第二种 是直接利用数据库中以有的表来生成表单项, 这对于一个管理系统类型的网站 比较有用,因为如果一个站点有大量的实体数据需要让用户输入,那么就不必重新花费时间来定义表单,只需要直接的和 model 进行关联就可以了如:
class BookForm(ModelForm):
class Meta:
model = Book
这样就可以 直接将 book 中的所有字段 直接生成一张 与之对应的表单,也许你不想所有的模型中的字段用户都可以填写,那么你可以用
class Meta:
model = Author
fields = ('name', 'title')
class Meta:
model = Author
exclude = ('birth_date',)
exclude 属性来规定哪些字段你不想加入在表单之中。
fields属性来规定哪些你要加入表单之中,当然两个属性,你只要设定一个就可以了
二,修饰这个表单
因为用django自动生成的表单,实现的内容很多是你不想要的,所以要创造一个独特的表。
改变字段在模板中显示的类型
你继承于ModelForm来创建一个表单的话,Django会自动的将外键字段转化成一个select的控件,并且通过下拉框来选择一个值,这可能是你不想要的,因为你可能不希望用户来填写外键的内容,这些外键的内容是系统自动关联分配的,所以,你就必须更改表单项的实现方式。
model = Author
fields = ('name', 'title', 'birth_date')
widgets = {
'name': Textarea(attrs={'cols': 80, 'rows': 20}),
}
通过widgets这个参数,手动的设定字段以何种input类型显示
更改报错信息
在django表单系统之中,如果在处理表中中 使用 is_valid()
方法并且表单检测发现表单内容不符合规则,那么他将返回一个表单,表单之中没一样中 form.name.errors 就是报错信息,虽然现在在服务器端检验表单字段的实用价值已经越来越小了,但是 俗话说, 永远不要相信前台脚本,永远不要相信用户,他们很可能利用你没有后台检验的功能而 搞出很多的事情来,所以尽管前台已经做了检验,但是后台仍然要做一次检验,更改默认的报错信息是这样的
name = forms.CharField(error_messages={'required': 'Please enter your name'})
在创建这个 表单的时段的时候 传入如下的参数,就可以修改报错信息,当然你必须知道具体错误的名称 如“requeired”这些名称可以在API 中找到
三,使用这个表单
在视图中使用
在视图中使用一个表单 无非是两种功能,一个是创建一个表单让用户来填写信息,另一个是处理表单中的数据。
创建一个表单 就是直接创建一个 实体表单的对象
form = ContactForm(),里面有几个比较重要的参数:auto_id=False
这个参数 主要是表示 是否在表单中生成 id ,因为有的时候你不想让你每个表单的字段都对应一个id, 如果生成 默认id是 id_form字段名字.
设置默认值
可以在创建 表单对象时传入如下参数initial={}
这是一个字典参数,对应每个字段的默认值, 可以在定义表的时候在没定义一个时段 中添加 initial='http://' 来设定默认值
更新数据
你可能需要 用一个 model实例来初始化他,这样就可以达到表单更新数据
f = ArticleForm(instance=a) 其中 a 是article 的一个model实例。
提取数据
在 处理 post 请求时候, 通过 f = ArticleForm(request.POST)来获取一个填有用户数据的form
在调用了 is_valid 方法以后 就可以通过 f.cleaned_data ,返回一个 装有数据的字典
总结:
上面直接 介绍很少的 form 的功能,只是让大家了解一下 django form,具体的要去官方API介绍还可以,英文也比较好理解,就我对 django表单而言, 我认为它是方便好用的,但是尽量大家不要过分的依赖django所提供的功能,尽管他提供了 强大的功能,很多事情还是要一步一步来,过分的依赖 它提供的功能,会造成你整个的系统变得非常不灵活。
ps:上面所用代码 大多来自 django book 和 django官网API
分享到:
相关推荐
在Django框架中,表单(Form)是处理用户数据的核心工具,特别是在处理文件上传时。本教程将深入探讨如何使用Django Forms来实现文件上传功能。 首先,我们需要了解Django Form的基本结构。在Django中,创建一个...
### Python中Django学习心得详解 #### 一、概述 本文档主要介绍Python中的Django Web应用框架的一些关键概念和技巧。Django是一款基于Python语言的开源Web开发框架,它遵循MVC(Model-View-Controller)设计模式,...
Django Form也支持文件上传,通过使用`FileField`或`MultipleFileField`。记得在视图中处理这些字段,以保存上传的文件。 11. **表单使用实例** 在视图中,创建表单实例,处理POST请求,然后在模板中渲染表单。...
在Python的Web开发框架Django中,Form表单是处理用户输入数据的重要工具。它不仅提供了数据验证功能,还能帮助我们构建美观的HTML表单。本教程将详细讲解Django的Form表单验证以及如何结合Ajax实现无刷新验证。 ...
课程大作业基于django3模块开发的管理系统源码.zip课程大作业基于django3模块开发的管理系统源码.zip课程大作业基于django3模块开发的管理系统源码.zip课程大作业基于django3模块开发的管理系统源码.zip课程大作业...
在Django框架中,表单(forms)是处理用户输入数据的重要工具,它简化了前后端交互的过程。本文将深入探讨如何在Django forms中创建一个包含`select`下拉框的表单,并且理解其传值机制。 首先,我们需要在`forms.py...
登录功能通常使用Django内置的`AuthenticationForm`,并结合`login`视图来实现: ```python from django.contrib.auth import authenticate, login from django.contrib.auth.forms import AuthenticationForm from...
总结来说,要在Django Form的`ChoiceField`中使用数据库内容作为选项,你需要在表单的`__init__`方法中动态设置`choices`属性,或者在视图函数中直接设置。这样,每次用户访问表单时,下拉菜单都会显示最新的数据库...
资源分类:Python库 所属语言:Python 资源全名:django-form-builder-0.9.18.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Django还支持ModelForm工厂方法modelForm_factory,如果不需要定制表单,可以不用编写对应的表单类,直接使用modelForm_factory来生成表单类。modelForm_factory函数接受多个参数,包括model、form、fields、exclude...
### Django前端模板及crispy form美化等 #### 一、引言 本文档作为对上一篇关于Django用户登录注册等内容的延续,主要聚焦于如何利用第三方库Crispy Forms来实现前端页面的美化与优化。对于初学者而言,掌握Django...
Python Django Web典型模块开发实战_分析吾爱破解论坛反爬虫机制_编程项目案例实例详解课程教程.pdf
Python Django Web典型模块开发实战_区块链时代与Token登录_编程项目案例实例详解课程教程.pdf
django-bootstrap-form, Django 格式的Twitter Bootstrap Django Bootstrap 表单 用于 Django 表单的Twitter Bootstrap 。一个简单的Django 模板标签,用于处理 Bootstrap 。安装用pip安装 django-bootstr
**基于Django的RBAC权限控制模块** 在Web开发中,权限控制是不可或缺的一部分,它确保用户只能访问他们被授权的资源。Role-Based Access Control(RBAC)是一种常见的权限管理模型,通过角色来分配权限,使得系统...
### Django Form 应用...本篇详细介绍了 Django 中表单的应用,包括基本的 HTML 表单创建方式以及更推荐的 Django Form 类的使用方法。通过这些内容的学习,你将能够在实际项目中更加灵活地使用 Django 的表单功能。
Python Django Web典型模块开发实战_用Django设计大型电商的类别表_编程项目案例实例详解课程教程.pdf
此模板使用了Django的模板语言,显示了表单字段,并设置`enctype="multipart/form-data"`以允许文件上传。 以上就是一个基本的Django ModelForm多文件上传的实现。用户在前端界面选择多个文件后,这些文件会被发送...
**Python Django Web典型模块开发实战** - 这个主题涵盖了使用Python的Django框架进行Web应用开发的实践项目。Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计。通过使用Django,开发者可以...
Jeff Croft的文章阐述了如何将Django的admin功能作为通用的管理模块。 4. **独立的媒体服务器**:在生产环境中,应将静态文件托管在独立的服务器或服务上,如Amazon S3,以提高性能。这有助于减少主服务器的负载,...