경로의 동작을 완전히 재정의하려면 가장 좋은 방법은 MWOAuth
클래스를 재정의하는 것입니다. 작동하는 예는 다음과 같습니다.
import os
from flask import Flask, Blueprint
from flask_mwoauth import MWOAuth
app = Flask(__name__)
app.secret_key = os.urandom(24)
class MyMWOAuth(MWOAuth):
def __init__(self,
base_url='https://www.mediawiki.org/w',
clean_url="Deprecated",
default_return_to='index',
consumer_key=None,
consumer_secret=None,
name="Deprecated"):
# I skipped other rows. It's just an example
self.bp = Blueprint('mwoauth', __name__)
# By the way you can customize here login and oauth-callback
@self.bp.route('/logout')
def logout():
# your custom logic here...
return "My custom logout"
mwoauth = MyMWOAuth(consumer_key='test', consumer_secret='test')
app.register_blueprint(mwoauth.bp)
if __name__ == "__main__":
app.run(debug=True, threaded=True)
/logout
을 열어 보겠습니다. My custom logout
이 표시됩니다. BluePrint 경로 등록은 init
방법으로 MWOAuth
으로 이루어집니다.
두 번째 방법은 request callbacks입니다. 다음은 로그 아웃 후 응답 본문의 변경을 보여주는 예입니다.
from flask import g, request
def after_this_request(f):
if not hasattr(g, 'after_request_callbacks'):
g.after_request_callbacks = []
g.after_request_callbacks.append(f)
return f
@app.after_request
def call_after_request_callbacks(r):
for callback in getattr(g, 'after_request_callbacks',()):
callback(r)
return r
@app.before_request
def before_logout():
@after_this_request
def after_logout(response):
# check if called route == '/logout'
# in our case response.data == 'Logged out!'
# see: https://github.com/valhallasw/flask-mwoauth/blob/master/flask_mwoauth/__init__.py#L48
if request.url_rule.endpoint == 'mwoauth.logout':
# custom logic here...
# for example I change data in request
response.data = 'Data from after_logout'
/logout
을 열어 보겠습니다. Data from after_logout
이 표시됩니다.
희망이 도움이됩니다.