이모저모

flask request _ hook, application context 본문

coding

flask request _ hook, application context

Jeo 2022. 1. 4. 15:52
from flask import Flask

db = "database"

def create_app():
    print("run:create_app()")
    app = Flask(__name__)

    @app.route('/')
    def index():
        app.logger.info('RUN: HELLOWORLD')
        return "hello"

    '''routing practice'''
    ''' === Routing Practice === '''
    from flask import jsonify, redirect, url_for
    from markupsafe import escape

    @app.route('/test/name/<name>')
    def name(name):
        return f'Name is {name}, {escape(type(name))}'

    @app.route('/test/id/<int:id>')
    def id(id):
        return 'Id: %d' % id

    @app.route('/test/path/<path:subpath>')
    def path(subpath):
        return subpath

    @app.route('/test/json')
    def json():
        return jsonify({'hello': 'world'})

    @app.route('/test/redirect/<path:subpath>')
    def redirect_url(subpath):
        return redirect(subpath)

    @app.route('/test/urlfor/<path:subpath>')
    def urlfor(subpath):
        return redirect(url_for('path', subpath=subpath))


    '''request hook'''
    from flask import g, current_app

    @app.before_first_request
    def before_first_request():
        app.logger.info('BEFORE_FIRST_REQUEST')

    @app.before_request
    def before_request():
        g.test = True
        app.logger.info('BEFORE_REQUEST')

    @app.after_request              # after_request 는 인자로 response를 받고 return 해주어야 함
    def after_request(response):
        app.logger.info(f'g.test:{g.test}')
        app.logger.info(f'current_app.config: {current_app.config}')
        app.logger.info('AFTER_REQUEST')
        return response

    @app.teardown_request
    def teardown_request(exception):
        app.logger.info('TEARDOWN_REQUEST')

    @app.teardown_appcontext
    def teardown_appcontext(exception):
        app.logger.info('TEARDOWN_CONTEXT')



    return app
Comments