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. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  2. iOS开发 贝塞尔曲线

    iOS开发 贝塞尔曲线UIBezierPath - 陌云 时间 2014-03-14 11:04:00  博客园-所有随笔区 原文  http://www.cnblogs.com/moyunmo/p/ ...

  3. usb中的传输模式

    别人总结的一个usb传输模式,保存一下 usb中的endpoint(端点)和传输模式 端点: 端点位于USB 外设内部,所有通信数据的来源或目的都基于这些端点,是一个可寻址的FIFO. 每个USB 外 ...

  4. mac下使用sencha cmd+extjs6

    笔者刚接手公司一个项目,后台是使用extjs6做前端,php做api接口,两者通过ajax交互 没办法,不管接手的项目多么的挫逼,都还是要上的,拿人钱财替人消灾嘛 首先是安装sencha cmd ,百 ...

  5. Oracle笔记二

    一.数据库语言分类  二.DML之数据插入 把一个表中的数据查询出来插入另外一个表中. create table student(id number,name varchar2(20),age num ...

  6. Python网络连接

    import appuifw as ui import httplib from os import abort uia=ui.app uin=ui.note uiq=ui.query e32=ui. ...

  7. 我需要在Web上完成一个图片上传的功能

    我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身 ...

  8. KMP算法解析(转自图灵社区)

    KMP算法是一个很精妙的字符串算法,个人认为这个算法十分符合编程美学:十分简洁,而又极难理解.笔者算法学的很烂,所以接触到这个算法的时候也是一头雾水,去网上看各种帖子,发现写着各种KMP算法详解的转载 ...

  9. [转+整理] Android 分辨率,密度,像素单位说明

    Android支持下列所有单位: px(像素):屏幕上的一个点.不同设备显示效果相同,一般我们HVGA代表320×480像素,这个用的比较多.in(英寸):长度单位.mm(毫米):长度单位.pt(磅) ...

  10. jmeter

    Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件. ...