flask蓝图的简单使用
1.flask的简单使用 from flask import Flask # from flask import make_response app = Flask(__name__) app.config.from_object('config') print(app.config['DEBUG']) # 路由注册方法1 @app.route('/hello/') def hello(): # 基于类的视图(即插视图) return "Hello, jack" # Response对象 @app.route('/hello2/') def hello2(): # 返回status code 200,404,301 # 返回content-type http headers # 返回Response对象 headers = { 'content-type': 'text/plain', 'location': 'http://www.bing.com' } # response = make_response('<html></html>', 301) # response.headers = headers # return "<html></html>" # return response return '<html></html>', 301, headers # 路由注册方法2 # app.add_url_rule('/hello/', view_func=hello) # config是dict子类 # 当是入口文件启动的时候才允许app.run # 原因2:当作为生产环境的时候这个app.run是不会运行的,由uwsgi作为服务器启动,如果没有if判断就会冲突 if __name__ == '__main__': # 生产环境 nginx + uwsgi app.run(host='0.0.0.0', debug=app.config['DEBUG'], port=81) 2.蓝图的使用 └── fisher ├── app │ ├── __init__.py │ ├── __pycache__ │ └── web │ ├── book.py │ ├── __init__.py │ ├── __pycache__ │ └── user.py ├── config.py ├── fisher.py ├── helper.py ├── httper.py ├── Pipfile ├── Pipfile.lock ├── __pycache__ └── yushu_book.p # 程序入口文件 fisher.py from flask import Flask from app import create_app app = create_app() if __name__ == '__main__': # 生产环境 nginx + uwsgi app.run(host='0.0.0.0', debug=app.config['DEBUG'], port=81) # 初始化蓝图 app/__init__.py from flask import Flask def create_app(): app = Flask(__name__) app.config.from_object('config') register_blueprint(app) return app def register_blueprint(app): from app.web.book import web app.register_blueprint(web) # config.py DEBUG = False # 初始化蓝图文件 app/web/__init__.py from flask import Blueprint web = Blueprint("web", __name__) from app.web import book from app.web import user # 具体的视图文件 app/web/book.py from flask import jsonify from helper import is_key_or_isdn from yushu_book import YuShuBook from . import web # 10.11.0.148:81/book/search/9787501524044/1 @web.route('/book/search/<q>/<page>') def search(q, page): # 判断搜索关键字是key还是isdn编码 isbn_or_key = is_key_or_isdn(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) # return json.dump(result), 200, {'content-type': 'application/json'} return jsonify(result) # 具体的视图文件 app/web/user.py from flask import Blueprint from . import web @web.route("/user/create") def create_user(): print("create user") return "create user" # 工具类文件 app/helper.py def is_key_or_isdn(word): isbn_or_key = "key" # isdn 13 13位数字 # isdn 10 包括1-10位数字,并且带有一些 - 中划线 short_word = word.replace("-", "") if len(word) == 13 and word.isdigit(): isbn_or_key = "isbn" if "-" in word and len(short_word) == 10 and short_word.isdigit(): isbn_or_key = "isbn" return isbn_or_key # 处理book搜索的文件 app/yushu_book.py from httper import HTTP class YuShuBook(object): isbn_url = 'http://t.yushu.im/v2/book/isbn/{}' keyword_url = 'http://t.yushu.im/v2/book/search?q={}&count={}&start={}' @classmethod def search_by_isbn(cls, isbn): url = cls.isbn_url.format(isbn) result = HTTP.get(url) return result @classmethod def search_by_keyword(cls, keyword, count=15, start=0): url = cls.keyword_url.format(keyword, count, start) result = HTTP.get(url) return result # 处理http请求工具类文件 app/httper.py import requests class HTTP(object): @staticmethod def get(url, return_json=True): r = requests.get(url) # if r.status_code == 200: # if return_json: # return r.json() # else: # return r.text # else: # if return_json: # return {} # else: # return "" if r.status_code != 200: return {} if return_json else '' return r.json() if return_json else r.text