Flask之RESTFul API前后端分离
Posted 他人能者亦能,他人不能者吾亦能
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask之RESTFul API前后端分离相关的知识,希望对你有一定的参考价值。
一:虚拟环境搭建的两种方式
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前后端分离的主要内容,如果未能解决你的问题,请参考以下文章