flask rest

起个项目名称

│ ginger.py  入口
│ Pipfile  安装包
│ Pipfile.lock


└─app    项目
│ app.py  项目入口
│ __init__.py

├─api   api 
│ │ __init__.py
│ │
│ ├─v1         版本v1
│ │ │ book.py    
│ │ │ client.py
│ │ │ user.py
│ │ │ __init__.py   注册蓝图v1
│ │ 

├─config    配置
│ │ secure.py   私密
│ │ setting.py    公共
│ │

├─libs        公共类
│ │ enums.py   
│ │ redprint.py    红图
│ │ __init__.py


ginger.py  入口

from app.app import create_app


app = create_app()


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

Pipfile  安装包

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "==1.0"
flask-sqlalchemy = "==2.3.2"
flask-wtf = "==0.14.2"
cymysql = "==0.9.1"
flask-cors = "==2.1.0"
flask-httpauth = "==2.7.0"
requests = "==2.18.4"

[dev-packages]

[requires]
python_version = "3.5"

app.py  项目入口

from flask import Flask


def register_blueprints(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.secure")
    app.config.from_object("app.config.setting")
    register_blueprints(app)
    return app

book.py

from app.libs.redprint import Redprint

api = Redprint("book")


@api.route("/get")
def get_book():
    return 'i am book'

__init__.py   注册蓝图v1

from flask import Blueprint
from app.api.v1 import user,book


def create_blueprint_v1():
    bp_v1 = Blueprint("v1",__name__)
    user.api.register(bp_v1)
    book.api.register(bp_v1)
    return bp_v1

redprint.py    红图

class Redprint:

    def __init__(self,name):
        self.name = name
        self.mound = []

    def route(self,rule,**options):
        def decorator(f):
            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)

 

posted on 2018-08-16 11:41  法海降妖  阅读(113)  评论(0编辑  收藏  举报