- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python的Django框架中的表单处理示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
组建一个关于书籍、作者、出版社的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
from
django.db
import
models
class
Publisher(models.Model):
name
=
models.CharField(max_length
=
30
)
address
=
models.CharField(max_length
=
50
)
city
=
models.CharField(max_length
=
60
)
state_province
=
models.CharField(max_length
=
30
)
country
=
models.CharField(max_length
=
50
)
website
=
models.URLField()
class
Author(models.Model):
first_name
=
models.CharField(max_length
=
30
)
last_name
=
models.CharField(max_length
=
40
)
email
=
models.EmailField()
class
Book(models.Model):
title
=
models.CharField(max_length
=
100
)
authors
=
models.ManyToManyField(Author)
publisher
=
models.ForeignKey(Publisher)
publication_date
=
models.DateField()
|
我们现在来创建一个简单的view函数以便让用户可以通过书名从数据库中查找书籍。 通常,表单开发分为两个部分: 前端HTML页面用户接口和后台view函数对所提交数据的处理过程。 第一部分很简单;现在我们来建立个view来显示一个搜索表单:
1
2
3
4
|
from
django.shortcuts
import
render_to_response
def
search_form(request):
return
render_to_response(
'search_form.html'
)
|
这个view函数可以放到Python的搜索路径的任何位置。 为了便于讨论,咱们将它放在 books/views.py 里.
这个 search_form.html 模板,可能看起来是这样的:
1
2
3
4
5
6
7
8
9
10
11
|
<
html
>
<
head
>
<
title
>Search</
title
>
</
head
>
<
body
>
<
form
action
=
"/search/"
method
=
"get"
>
<
input
type
=
"text"
name
=
"q"
>
<
input
type
=
"submit"
value
=
"Search"
>
</
form
>
</
body
>
</
html
>
|
而 urls.py 中的 URLpattern 可能是这样的:
1
2
3
4
5
6
7
|
from
mysite.books
import
views
urlpatterns
=
patterns('',
# ...
(r
'^search-form/$'
, views.search_form),
# ...
)
|
(注意,我们直接将views模块import进来了,而不是用类似 from mysite.views import search_form 这样的语句,因为前者看起来更简洁。) 。
现在,如果你运行 runserver 命令,然后访问http://127.0.0.1:8000/search-form/,你会看到搜索界面。 非常简单.
不过,当你通过这个form提交数据时,你会得到一个Django 404错误。 这个Form指向的URL /search/ 还没有被实现。 让我们添加第二个视图函数并设置URL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# urls.py
urlpatterns
=
patterns('',
# ...
(r
'^search-form/$'
, views.search_form),
(r
'^search/$'
, views.search),
# ...
)
# views.py
def
search(request):
if
'q'
in
request.GET:
message
=
'You searched for: %r'
%
request.GET[
'q'
]
else
:
message
=
'You submitted an empty form.'
return
HttpResponse(message)
|
暂时先只显示用户搜索的字词,以确定搜索数据被正确地提交给了Django,这样你就会知道搜索数据是如何在这个系统中传递的。 简而言之:
在HTML里我们定义了一个变量q。当提交表单时,变量q的值通过GET(method=”get”)附加在URL /search/上.
处理/search/(search())的视图通过request.GET来获取q的值.
需要注意的是在这里明确地判断q是否包含在request.GET中。就像上面request.META小节里面提到,对于用户提交过来的数据,甚至是正确的数据,都需要进行过滤。 在这里若没有进行检测,那么用户提交一个空的表单将引发KeyError异常:
1
2
3
4
5
6
|
# BAD!
def
bad_search(request):
# The following line will raise KeyError if 'q' hasn't
# been submitted!
message
=
'You searched for: %r'
%
request.GET[
'q'
]
return
HttpResponse(message)
|
查询字符串参数 。
因为使用GET方法的数据是通过查询字符串的方式传递的(例如/search/?q=django),所以我们可以使用requet.GET来获取这些数据。我们知道在视图里可以使用request.GET来获取传统URL里的查询字符串(例如hours=3).
获取使用POST方法的数据与GET的相似,只是使用request.POST代替了request.GET。那么,POST与GET之间有什么不同?当我们提交表单仅仅需要获取数据时就可以用GET; 而当我们提交表单时需要更改服务器数据的状态,或者说发送e-mail,或者其他不仅仅是获取并显示数据的时候就使用POST。 在这个搜索书籍的例子里,我们使用GET,因为这个查询不会更改服务器数据的状态。 (如果你有兴趣了解更多关于GET和POST的知识,可以参见http://www.w3.org/2001/tag/doc/whenToUseGet.html。) 。
既然已经确认用户所提交的数据是有效的,那么接下来就可以从数据库中查询这个有效的数据(同样,在views.py里操作):
1
2
3
4
5
6
7
8
9
10
11
12
|
from
django.http
import
HttpResponse
from
django.shortcuts
import
render_to_response
from
mysite.books.models
import
Book
def
search(request):
if
'q'
in
request.GET
and
request.GET[
'q'
]:
q
=
request.GET[
'q'
]
books
=
Book.objects.
filter
(title__icontains
=
q)
return
render_to_response(
'search_results.html'
,
{
'books'
: books,
'query'
: q})
else
:
return
HttpResponse(
'Please submit a search term.'
)
|
让我们来分析一下上面的代码:
最后,我们给模板传递来books,一个包含Book对象的列表。 查询结果的显示模板search_results.html如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
|
<p>You searched
for
: <strong>{{ query }}<
/
strong><
/
p>
{
%
if
books
%
}
<p>Found {{ books|length }} book{{ books|pluralize }}.<
/
p>
<ul>
{
%
for
book
in
books
%
}
<li>{{ book.title }}<
/
li>
{
%
endfor
%
}
<
/
ul>
{
%
else
%
}
<p>No books matched your search criteria.<
/
p>
{
%
endif
%
}
|
注意这里pluralize的使用,这个过滤器在适当的时候会输出s(例如找到多本书籍).
最后此篇关于Python的Django框架中的表单处理示例的文章就讲到这里了,如果你想了解更多关于Python的Django框架中的表单处理示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!