zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    做技术选型时,要注意些什么?
    .net core 实现默认图片
    启用跨源请求 (CORS)
    使用 Cookie 而无需 ASP.NET 核心标识的身份验证
    Windbg+Procdump解决w3wp.exe CPU过百问题
    .NET Core 2.0 Cookie中间件 权限验证
    想要学习设计模式,你得先会看类图,一张图读懂UML
    ef core
    Dapper MySql DateTime 异常
    简单理解Socket
  • 原文地址:https://www.cnblogs.com/reblue520/p/10337905.html
Copyright © 2011-2022 走看看