Flask之RESTFul API前后端分离

Posted 他人能者亦能,他人不能者吾亦能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask之RESTFul API前后端分离相关的知识,希望对你有一定的参考价值。

Flask之RESTFul API前后端分离

一:虚拟环境搭建的两种方式

1 pipenv的使用

pip install --user pipenv安装pipenv在用户目录下
py -m site --user-site通过此命令找到用户基础目录,结果为C:\\Users\\u14e\\AppData\\Roaming\\Python\\Python35\\site-packages
将用户基础目录结尾的site-packages换成Scripts,即C:\\Users\\u14e\\AppData\\Roaming\\Python\\Python35\\Scripts,然后将这一路径添加到系统变量中
重新打开命令行工具,如cmd,pipenv --version检查是否安装成功
pipenv install创建一个虚拟环境
pipenv shell激活虚拟环境,exit推出虚拟环境
pipenv install requests安装python包,pipenv install django==1.11.7安装制定版本的包,pipenv uninstall requests卸载包
pipenv graph查看安装的包,以及依赖的其他包

 


2 pip virtualenv(使用workon进行管理)的使用

# 1 安装
pip install virtualenv
virtualenv --version
​
# 非Windows
# pip install virtualenvwrapper
# Windows
pip install virtualenvwrapper-win
​
# 查看当前所有的虚拟环境
workon
​
# 创建一个虚拟环境
mkvirtualenv new_env
​
# 删除一个虚拟环境
rmvirtualenv new_env

 



3 一次性导入多包方法(解决环境兼容问题)

# 在当前环境中将路径切到项目包打包txt文件目录下
- 项目依赖 pip3 install pipreqs
- 生成依赖文件:pipreqs ./ --encoding==\'utf-8\'
- 安装依赖文件:pip3 install -r requirements.txt 
​

 

二:Flask的简单实用和蓝图

1 简单使用

# app.py
from flask import Flask
def create_app():
    app = Flask(__name__)  # 指定位置信息
    app.config.from_object(\'app.config.setting\')
    app.config.from_object(\'app.config.secure\')
    register_blueprint(app)
    return app
​
# genger.py---启动文件
from app.app import create_app
​
app = create_app()
​
​
@app.route(\'/v1/user/get\')
def get_user():
    return \'i am andy\'
​
​
@app.route(\'/v1/book/get\')
def get_book():
    return \'this is get book \'
​
​
if __name__ == \'__main__\':
    app.run(debug=True)

 


2 蓝图的使用

 



 

 

# 分别设置蓝图

# book.py
from flask import Blueprint
​
book = Blueprint(\'book\', __name__)
​
​
@book.route(\'/v1/book/get\')
def get_book():
    return \'this is get book \'# user.py
from flask import Blueprint
​
user = Blueprint(\'user\', __name__)
​
​
@user.route(\'/v1/user/get\')
def get_user():
    return \'i am andy\'# app.py(生成app并注册蓝图)
from flask import Flask
​
​
def register_blueprint(app):
    from app.api.v1.user import user
    from app.api.v1.book import book
    app.register_blueprint(user)
    app.register_blueprint(book)
​
​
def create_app():
    app = Flask(__name__)  # 指定位置信息
    app.config.from_object(\'app.config.setting\')
    app.config.from_object(\'app.config.secure\')
    register_blueprint(app)
    return app
​
# 启动文件
from app.app import create_app
app = create_app()
if __name__ == \'__main__\':
    app.run(debug=True)
​

 

3 蓝图的机制缺点

1 Blurpring蓝图不是用来拆分视图函数的,应该是用来模块级别的拆分
​
2 写路由的时候太繁琐(重复劳动,比如我写v1/book/get,又要写一个接口是v1/book/delete)

 


三:自定义红图

1 创建红图流程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

新建一个包libs,里面放置的是红图的方法


#创建红图
class Redprint:
    def __init__(slef,name):
        self.name = name
        self.mound = []
        
    def route(self,rule,**options):
        def decorator(f):
            # f就是所装饰的方法试图,rule就是路由,options就是关键字参数,比如,methods=[\'get\',\'post\']
            self.mound.append((f,rule,options))
            return f
        return decorator
    
    def register(self, bp, url_prefix=None):
        if url_prefix is None:
            url_prefix = \'/\' + self.name
        for f, rule, options in self.mound:
            endpoint = options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix + rule, endpoint, f, **options)
​
        
​
​
# book.py(使用红图)
from app.libs.redprint import Redprint
​
api = Redprint(\'book\')
​
​
@api.route(\'/get\')
def get_book():
    return \'this is get book \'
​
​
​
# v1/__init__.py(创建蓝图对象,并在蓝图对象中注册红图)
from flask import Blueprint
from app.api.v1 import book, user
​
​
def create_blueprint_v1():
    bp_v1 = Blueprint(\'v1\', __name__)
    user.api.register(bp_v1)
    book.api.register(bp_v1)
​
    return bp_v1
​
# app.py(将蓝图注册到app对象中)
from flask import Flask
​
​
def register_blueprint(app):
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix=\'/v1\')  # 蓝图补充路由的前缀
​
​
def create_app():
    app = Flask(__name__)  # 指定位置信息
    app.config.from_object(\'app.config.setting\')
    app.config.from_object(\'app.config.secure\')
    register_blueprint(app)
    return app
​

 


 

 

 

 

以上是关于Flask之RESTFul API前后端分离的主要内容,如果未能解决你的问题,请参考以下文章

前后端分离与 restful api

Flask restful api与blueprint结合实践

前后端分离:RESTful API和HTTP动词

前后端分离后,RESTful API 最佳实践

谈谈前后端分离实践中如何提升RESTful API开发效率

前后端分离开发,基于SpringMVC符合Restful API风格Maven项目实战(附完整Demo)!