Python Flask-RESTPlus 工程化实践

Python Flask-RESTPlus 工程化实践

 

本指南将逐步介绍构建用于测试、开发和生产环境的 Flask RESTPlus Web 应用程序的方法。 将使用基于 Linux 的操作系统(Ubuntu),但是大多数步骤都可以在 Windows 和 Mac 上执行。

在继续阅读本指南之前,你应该对 Python 编程语言和 Flask 框架有基本的了解。如果你不熟悉这些内容,建议阅读介绍性文章 - 如何使用 Python 和 Flask 构建 Web 应用程序

本指南的结构

本指南分为以下几部分:

功能

项目将涉及以下功能和扩展。

  • Flask-Bcrypt一个 Flask 扩展,提供了 bcrypt 散列功能。
  • Flask-Migrate一个使用 Alembic 为 Flask 应用处理 SQLAlchemy 数据库迁移的扩展,可以通过 Flask 的命令行接口或者 Flask-Scripts 对数据库进行操作。
  • Flask-SQLAlchemy一个 Flask 扩展,给应用添加了 SQLAlchemy 支持。
  • PyJWT可以编码解码 JSON Web Tokens (JWT) 的 Python 库。JWT 是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519)。
  • Flask-Script一个提供了向 Flask 插入外部脚本的功能的扩展,它可以运行除 web 应用之外的命令行任务。
  • Namespaces (Blueprints)
  • Flask-restplus
  • UnitTest

Flask-RESTPlus 是什么?

Flask-RESTPlus 是 Flask 的扩展,可以通过它快速构建 REST API。Flask-RESTPlus 最佳实践鼓励配置尽可能少。它提供了大量的装饰器和工具来描述 API,并以文档化的形式将这些接口展现出来(通过 Swagger 来实现)。

安装和配置

在 Terminal 中输入命令 pip --version 来检查是否已安装 pip,然后回车。

pip --version

如果终端输出版本号,表示已安装 pip,可以继续执行下一步,否则请先安装 pip,如果使用 Linux 包管理器,可以在终端上运行以下命令,回车。选择 Python 2.x 或 3.x 版本。

  • Python 2.x
sudo apt-get install python-pip
  • Python 3.x
sudo apt-get install python3-pip

设置 virtual 环境或 virtual 环境 wrapper(只需要其中之一,取决于上面安装的版本):

sudo pip install virtualenv

sudo pip3 install virtualenvwrapper

请按照此链接进行 virtual 环境 wrapper 的完整设置。

通过在终端上执行以下命令来创建新环境并激活它:

mkproject name_of_your_project

项目配置和结构

这里使用功能性结构通过文件的功能来组织项目文件。在功能结构里,模板、静态文件、视图在三个不同的目录中。

在项目目录中,创建一个名为 app 的新包。在 app 内部,创建两个包 main 和 test。 目录结构如下。

.
├── app
│   ├── __init__.py
│   ├── main
│   │   └── __init__.py
│   └── test
│       └── __init__.py
└── requirements.txt

接下来使用功能结构来模块化应用程序。

在 main 包中,再创建三个包,即:controllerservice 和 model。 model 包将包含所有的数据库模型,而 service 包将包含应用程序的所有业务逻辑,最后 controller 包将包含所有的应用程序接口。 现在,树结构应如下所示:

.
├── app
│   ├── __init__.py
│   ├── main
│   │   ├── controller
│   │   │   └── __init__.py
│   │   ├── __init__.py
│   │   ├── model
│   │   │   └── __init__.py
│   │   └── service
│   │       └── __init__.py
│   └── test
│       └── __init__.py
└── requirements.txt

现在,来安装所需的软件包。 确保已激活创建的 virtual 环境,并在终端上运行以下命令:

pip install flask-bcrypt

pip install flask-restplus

pip install Flask-Migrate

pip install pyjwt

pip install Flask-Script

pip install flask_testing

通过运行以下命令来创建/更新 requirements.txt 文件:

pip freeze > requirements.txt

生成的 requirements.txt 文件应该如下:

alembic==0.9.8
aniso8601==3.0.0
bcrypt==3.1.4
cffi==1.11.5
click==6.7
Flask==0.12.2
Flask-Bcrypt==0.7.1
Flask-Migrate==2.1.1
flask-restplus==0.10.1
Flask-Script==2.0.6
Flask-SQLAlchemy==2.3.2
Flask-Testing==0.7.1
itsdangerous==0.24
Jinja2==2.10
jsonschema==2.6.0
Mako==1.0.7
MarkupSafe==1.0
pycparser==2.18
PyJWT==1.6.0
python-dateutil==2.7.0
python-editor==1.0.3
pytz==2018.3
six==1.11.0
SQLAlchemy==1.2.5
Werkzeug==0.14.1

配置设定

在 main 包中创建一个名为 config.py 的文件,内容如下:

import os




basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
    SECRET_KEY = os.getenv('SECRET_KEY', 'my_precious_secret_key')
    DEBUG = False


class DevelopmentConfig(Config):
    
    
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'flask_boilerplate_main.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False


class TestingConfig(Config):
    DEBUG = True
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'flask_boilerplate_test.db')
    PRESERVE_CONTEXT_ON_EXCEPTION = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False


class ProductionConfig(Config):
    DEBUG = False
    
    


config_by_name = dict(
    dev=DevelopmentConfig,
    test=TestingConfig,
    prod=ProductionConfig
)

key = Config.SECRET_KEY

配置文件包含三个环境设置 class,其中包括 testingdevelopment 和 production

这里将使用应用程序工厂模式创建 Flask 对象。在对不同的配置创建多个实例时这个模式很方便。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值