zoukankan      html  css  js  c++  java
  • Python开发入门与实战13-基于模板的界面

    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="10px">Id</th>
                    <th style="20px">ItemName</th>
                    <th style="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. 运行效果

    image

    13.6. 小结

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

  • 相关阅读:
    Spring Boot中通过CORS解决跨域问题
    使用aop注解实现表单防重复提交功能
    Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖
    关于日期格式yyyy-MM-dd和YYYY-MM-dd
    基于Java8的日期时间工具类DateTimeFormatter
    Springboot 配置 ssl 实现HTTPS 请求 & Tomcat配置SSL支持https请求
    springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装
    Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用
    Springboot实体类转JSON报错Could not find acceptable representation & 设置访问项目根路径的默认欢迎页面
    SpringMVC 使用@ResponseBody返回json 中文乱码与返回实体类报错
  • 原文地址:https://www.cnblogs.com/haozi0804/p/4698757.html
Copyright © 2011-2022 走看看