13. 基于模板的界面

本章我们将继续基于库存的简单例子来阐述如何在python django中体现MVC的架构,根据djangobook说明:

M:数据存取部分,由django数据库层处理,本章要讲述的内容。

V:选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。

C:根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的 Python 函数。

控制层C: 我们把URLconf 设置看做Django框架的部分,大量的业务逻辑我们就可以放入到我们新增的BIZ层中,模板与views作为视图部分更符合MVC的理解。依据这里模式我们来实现一个符合实战的例子,用django模板实现关于当前库存的查询页面。

库存查询需求:

1. 输入物料名称,依据模糊匹配模式显示所有匹配的物料库存,用列表的方式显示在界面上。

2. 不输入查询条件时,点击查询按钮返回当前所有的物料库存数据(可虑示例的简单性这里我们不实现查询分页功能)。

13.1. BIZ层实现

我们在InventoryBiz类里增加一个函数getInventoryByItemName,通过物料名称来获取匹配的库存的Model列表:

def getInventoryByItemName(self,itemName) :
inventorys = None
if itemName:
inventorys = Inventory.objects.filter(Item__ItemName__contains='itemName')
else:
inventorys = Inventory.objects.all() return inventorys

Inventory.objects.filter(Item__ItemName__contains='itemName'),Django的模型对象的关联查询也是笔者使用过程中感到非常方便的功能之一 :)。如上述代码我们在业务逻辑层增加了一个查询功能函数,接下来我们就是实现视图层的功能代码了。

13.2. 页面模板

现在我们根据前面的查询模板来实现一个中国式的简单查询界面模板,查询条件下有一个显示一个结果表格,查询到的结果数据返回显示在表格里:

<html>
<head>
<title>Current Inventory Search</title>
</head>
<body>
<div> <form action="/inventoryQuery/" method="get">
<label ><strong>Item Name:</strong></label>
<input type="text" name="q" value={{query}}>
<input type="submit" value="Search">
</form>
</div>
<div>
<table border="1">
<tr>
<th style="width:10px">Id</th>
<th style="width:20px">ItemName</th>
<th style="width:30px">Amount</th>
</tr>
{% if inventorys %}
{% for inventory in inventorys %}
<tr>
<td >{{inventory.InventoryId}}</td>
<td >{{inventory.Item.ItemName}}</td>
<td >{{inventory.Amount}}</td>
</tr>
{% endfor %}
{% else %} {% endif %} </table>
</div> </body>
</html>

13.3. Views 函数

我们在views.py里实现业务逻辑与视图模板的调用和数据装载就完成了这样一个基本的查询功能。

def inventoryQuery(request):
error=False
if 'q' in request.GET:
q = request.GET['q']
if not q:
error = True
elif len(q) > 20:
error = True
else:
biz = InventoryBiz()
inventorys =biz.getInventoryByItemName(q)
return render_to_response('inventoryQuery.html',
{'inventorys': inventorys, 'query': q})
return render_to_response('inventoryQuery.html')

13.4. urls.py发布

最后一步就是我们在工程的urls里发布我们实现的库存查询功能就完成了这个功能的开发工作,是不是很简单。

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^mysite/', include('mysite.mysite.urls')), # Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
url(r'^AddInStockBill/$', views.AddInStockBill),
url(r'^AddItem/$', views.AddItem),
url(r'^success/$', views.success),
url(r'^search/$',views.search),
url(r

'^inventoryQuery/$'

,views.inventoryQuery),
)

13.5. 运行效果

13.6. 小结

本章节我们通过示例,快速的演示了基于MVC架构构建动态网页的开发模式,但是这种传统的基于html模板文件的动态数据装载方式很多时候已经不能满足实际项目的需要,下一章节我们将结合本章节阐述另一种动态网页的构建模式,基于Extjs的网页构建。

Python开发入门与实战13-基于模板的界面的更多相关文章

  1. Python开发入门与实战14-基于Extjs的界面

    14. 基于Extjs的界面 上一章我们实现了一个原生的html例子,本章我们将采用Extjs实现界面的展现,来说明MVC模式下我们是怎么考虑界面与业务层的关系的. 14.1. 引用Extjs目录 首 ...

  2. Python开发入门与实战15-IIS部署

    15. IIS部署 前面的章节我们完成了基本的业务功能的开发,本章节我们来说说python django项目如何部署到实际的运行环境,完成开发系统的发布工作. Python Django 项目部署发布 ...

  3. Python开发入门与实战4-模板页面

    4.Django基于模板页面 在前一章中,HTML是直接被硬编码在 Python views.py代码中,如下: from django.http import HttpResponse import ...

  4. Python开发入门与实战1-开发环境

    1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Pyth ...

  5. Python开发入门与实战8-基于Java的集成开发环境

    8. 基于Java的Python的集成开发环境 目前为止我们所有的代码和例子都是通过Notepad文本编辑器来实现的,实际项目开发中这种编码模式效率较低(大虾除外),使用IDE集成开发环境常常大幅度的 ...

  6. Python开发入门与实战9-基于vs的集成开发环境

    9. 基于visual studio的Python的集成开发环境 上一章我们描述了如何安装使用Java的集成开发环境Eclipse IDE,本章我们来说明另一种集成开发环境,也是笔者多年的开发习惯使用 ...

  7. python工业互联网应用实战13—基于selenium的功能测试

    本章节我们再来说说测试,单元测试和功能测试.单元测试我们在数据验证章节简单提过了,本章我们进一步如何用单元测试来测试view的功能代码:同时,也涉及一下基于selenium的功能测试做法.笔者过去的项 ...

  8. Python开发入门与实战10-事务

    1. 事务 本章我们将通过一个例子来简要的说明“事务”,这个开发实战里经常遇到的名词.事务是如何体现在一个具体的业务和系统的实现里. 事务是通过将一组相关操作组合为一个,要么全部成功要么全部失败的单元 ...

  9. Python开发入门与实战7-Django Form

    7. Django Form 7.1. Form表单 Django带有一个form库,称为django.forms,这个库可以处理上一章提到的包括HTML表单的自动生成以及数据验证. 我们在inven ...

随机推荐

  1. js获取当前日期时间格式为“yyyy-MM-dd HH:MM:SS”

    废话不多说,直接上代码! <!DOCTYPE html><html><head>    <meta charset="utf-8"> ...

  2. hadoop启动是常见小问题

    1.先su进入root账户,然后 service iptables stop //关闭防火墙 start-all.sh //启动 2.启动是会显示,如果出错日志保存路径!!!基本所有问题都要去这些日志 ...

  3. linux diff命令

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...

  4. POJ Challenge消失之物

    Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. "要使用剩下的 N - 1 物品装满容积为 x ...

  5. Android异步任务机制之AsycTask

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. 本篇就说说AsyncTask的异步实现. 1.什么时候使用 AsnyncTask 在上一篇文章已经说了,主线程主要负 ...

  6. 【转】 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

    系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦.所以,在实践中会用到很多工具来 ...

  7. javabean连数据库

    1.在src下建包,然后包中建javabean类,代码如下(我的包名为aa) package aa; import java.sql.*; public class bean { private fi ...

  8. angularJS 2.0 开发的简单dome

    与其说这是一个demo,不如说是一个与高手的讨教过程.虽然demo出来了,可其中有些问题我还是不太明白,如果有angularjs2.0的大神,请进来指导一番,~~~~~不甚感激. 说明第一点:我采用的 ...

  9. WebService开发

    一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使   用WebSer ...

  10. [转]http-关于application/x-www-form-urlencoded等字符编码的解释说明

    在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明: application/x-www-form-urlen ...