因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理。但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便。而在Flask中刚好就提供了这么一个特别好用的工具蓝图(Blueprint)。在进行团队开发时,为了保证我们写的代码更加稳定,一般需要进行单元测试。该如何进行单元测试呢?

一、Blueprint

  1.什么是蓝图

   可以把蓝图当做一个存储视图的容器,被蓝图装饰过的函数,会被保存起来,然后把这个蓝图注册到项目中的APP之后就被蓝图装饰的函数可以使用了。

   蓝图的作用就是把多个文件中的视图绑定到项目的app中,这样就能处理请求了。说白了就是一种模块化管理。

  2.蓝图的特点

   (1). 一个应用中可以有多个蓝图

   (2). 在初始化应用后,一般就需要把蓝图注册到应用中。但是不能反过来。

   (3). 可以将一个蓝图注册到一个未使用的url下,这样被这个蓝图装饰的视图默认就是在这个url下。

   注意:一个蓝图不是一个完整的应用,不能独立于应用运行,必须注册到某个应用中。

  3. 使用蓝图步骤:

   (1). 创建一个蓝图对象

   (2). 使用蓝图对象注册路由等操作

   (3). 在应用上注册这个对象

  4. 运行机制

   (1). 蓝图保存了一组可以在应用对象上执行的操作,如注册路由

   (2). 当在应用对象调用route装饰器注册路由时,这个操作将修改对象的url_map路由表

   (3). 但是,蓝图没有路由表,当在蓝图对象上调用route()装饰器注册路由时,只是在内部的一个延时操作记录列表defered_funcitons中添加了一项。

   (4). 当调用应用对象的register_blueprint()时,应用对象将从蓝图对象的defered_functions列表中取出每一项,实际上是调用应用对象那个的add_url_rule(),这真正的改变了应用对象的路由表(url_map)。

二、具体应用如下:

app.py

 from flask import Flask, Blueprint

 from blueprint import admin

 app = Flask(__name__)

 # 3.注册蓝图对象
 # url_prefix参数指明,由api装饰的函数,其url必须有/admin
 app.register_blueprint(admin, url_prefix='/admin')

 @app.route('/')
 def index():
     return 'index'

 @app.route('/list')
 def list():
     return 'list'

 @app.route('/detail')
 def detail():
     return 'detail'

 if __name__ == '__main__':
     print(app.url_map)
     app.run(debug=True)

admin.py文件:

 from flask import Blueprint

 # 1.创建一个蓝图对象
 admin = Blueprint('admin', __name__)

 # 2. 使用蓝图对象装饰函数
 @admin.route('/new')
 def new():
     return 'new'

 @admin.route('/edit')
 def edit():
     return 'edit'

 @admin.route('/publish')
 def publish():
     return 'publish'

url_map如下:

  

三、单元测试

  1.为什么要单元测试

    虽然测试有专门的测试人员,但是为了提高我们自身代码的稳定性,我们一般都要为自己写的代码做单元测试,这样开发的效率会大大提高。单元测试就是我们写的一小段代码,来检验目标代码的功能是否符合预期。在Web开发中,单元测试很简单,就是一个"断言"(assert)代码

  2. 断言

    在Python中,使用assert语句来判断预期结果。

    常用断言:

     (1). assertEqual:如果两个值相等,则pass

     (2). assertNotEqual:如果两个值不相等,则pass

     (3). assertTrue:判断bool值为True,则pass

     (4). assertFlase:判断bool值为False, 则pass

     (5). assertIsNone:不存在,则pass

     (6). assertIsNotNone:存在,则pass

  3. 单元测试的写法

    (1). 自定义一个类,继承自unittest.TestCase

    (2). 类中两个固定方法setUp()和tearDown():做初始化和回收资源的任务

    (3). 自定义以"test"开头的方法,用来测试某些功能。

  4.对数据库进行测试:  

 import unittest

 from author_book_models import app, db, Author, Book

 class DatabaseTestCase(unittest.TestCase):
     """数据库单元测试"""

     def setUp(self):
         # 要进行测试的话,需要开启这个配置信息
         app.config['TESTING'] = True
         self.app = app
         db.create_all()

     def tearDown(self):
         db.session.remove()
         db.drop_all()

     def test_append_data(self):
         """添加数据"""

         au = Author(name='laowang')
         bk = Book(info='python')

         db.session.add_all([au, bk])
         db.session.commit()

         author = Author.query.filter_by(name='laowang').first()
         book = Book.query.filter_by(info='python').first()

         # 断言数据存在
         self.assertIsNotNone(author)
         self.assertIsNotNone(book)

Python框架学习之Flask中的蓝图与单元测试的更多相关文章

  1. Python框架学习之Flask中的视图及路由

    在前面一讲中我们学习如何创建一个简单的Flask项目,并做了一些简单的分析.接下来在这一节中就主要来讲讲Flask中最核心的内容之一:Werkzeug工具箱.Werkzeug是一个遵循WSGI协议的P ...

  2. Python框架学习之Flask中的常用扩展包

    Flask框架是一个扩展性非常强的框架,所以导致它有非常多的扩展包.这些扩展包的功能都很强大.本节主要汇总一些常用的扩展包. 一. Flask-Script pip install flask-scr ...

  3. Python框架学习之Flask中的数据库操作

    数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类 ...

  4. Python框架学习之Flask中的Jinja2模板

    前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...

  5. 第九篇 Flask 中的蓝图(BluePrint)

    第九篇 Flask 中的蓝图(BluePrint)   蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? ...

  6. Flask最强攻略 - 跟DragonFire学Flask - 第九篇 Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...

  7. Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开 怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查 ...

  8. Flask中的蓝图(BluePrint)、

    蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...

  9. flask中的蓝图与红图

    内容: 1.flask中的蓝图 2.flask子域名实现 3.flask中的红图 1.flask中的蓝图 一个大型项目中视图比较多,如果仅仅是写在app.py中不方便管理,蓝图就可以做到分功能分目录结 ...

随机推荐

  1. linux学习笔记-wget相关知识

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! wget是非交互式的网络文件下载工具,这里参考帮助文档,记录下实用参数和使用方法. 一.wget的实用参数: wget: 用法: ...

  2. jQuery效果之简单的手风琴效果

    实现效果如图所示: html结构: <div class="item_box box10"> <div class="item_box_wp" ...

  3. 【读书笔记】iOS-更新项目前要注意的事情

    在进行永久更改项目的任何现代化操作之前,要问自己几个问题. 1,我还需要返回项目的旧代码吗? 2,我的同事中有没有人无法升级到最新版本的Xcode? 3,  如果我使用了最新的功能,会不会减少用户? ...

  4. GeoServer中使用样式化图层描述符(sld)给WMS加注记

    现有一个shp格式的道路注记文件,用点来表示注记的位置,属性表中保存每个点对应的字,在QGIS中打开如下图所示 它的属性表如下 现需要把道路数据和它的注记发布为WMS服务,通过GeoServer直接发 ...

  5. 腾讯.NET&PHP面试题

    在整个面试过程中,作为面试者的你,角色就是小怪兽,面试官的角色则是奥特曼,更不幸的是,作为小怪兽的你是孤身一人,而奥特曼却往往有好几个助攻,你总是被虐得不要不要的~ 作为复读一年才考上专科的我,遗憾的 ...

  6. 自动排版工具——XML自动排版生成工具

    ——支持全球化/多语言/符合W3C标准的XML自动排版工具 Boxth XML/XSL Formatter是专为XML数据或其他结构化数据源自动输出排版文件(如: PDF等)而设计的集数据格式化.版式 ...

  7. IDEA基于Maven Struts2搭建配置及示例

    1.web.xml加载struts框架即过滤器,要注意struts版本不同过滤器配置也不同. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems ...

  8. WPF:完美自定义MeaagseBox 动画 反弹 背景模糊 扁平化

    不知道为什么,WPF的MeaageBox的风格还停留在Win 2000的风格... 很久前就想自己封装一个MessageBox出来,但是都只是简单的封装,不怎么具有通用性.这次终于搞完了. 使用方法和 ...

  9. 你不可不知的Java引用类型之——ReferenceQueue源码详解

    定义 ReferenceQueue是引用队列,用于存放待回收的引用对象. 说明 对于软引用.弱引用和虚引用,如果我们希望当一个对象被垃圾回收器回收时能得到通知,进行额外的处理,这时候就需要使用到引用队 ...

  10. CVE-2012-0158 分析

    目录 CVE-2012-0158 分析&利用 1.实验环境 2.下载poc样本 3.调试并找到漏洞触发点 4.分析漏洞触发模块及流程 5.漏洞利用 6.总结 7.参考资料 CVE-2012-0 ...