zoukankan      html  css  js  c++  java
  • Flask之RESTFul API前后端分离

    Flask之RESTFul API前后端分离

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

    1 pipenv的使用

    pip install --user pipenv安装pipenv在用户目录下
    py -m site --user-site通过此命令找到用户基础目录,结果为C:Usersu14eAppDataRoamingPythonPython35site-packages
    将用户基础目录结尾的site-packages换成Scripts,即C:Usersu14eAppDataRoamingPythonPython35Scripts,然后将这一路径添加到系统变量中
    重新打开命令行工具,如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
    ​

     

     

     

     

  • 相关阅读:
    javascript:void(0)是什么意思 天高地厚
    C#开发 WinForm中窗体显示和窗体传值相关知识
    c#在WinForm中重写ProgressBar控件(带%的显示)
    flash在C#中的应用
    c# winform 关于DataGridView的一些操作
    winform中输入数据的验证
    RadioButton和CheckBox
    Manifest文件的配置
    简单程序用于熟悉Activity生命周期
    Activity的生命周期
  • 原文地址:https://www.cnblogs.com/ouyang99-/p/12249480.html
Copyright © 2011-2022 走看看