次の URL エンドポイントを設定しています。
manager.py
from xxx import ContactAPI
from xxx.models import Contact
# self.app is my Flask app
# self.session is SQLAlchemy Session
api_name = 'contact'
instance_endpoint = '/%s/<int:instid>' % api_name
methods = ['GET']
api_view = ContactAPI.as_view(api_name, self.session,
Contact, app)
self.app.add_url_rule(instance_endpoint, methods=methods,
defaults={'instid': None},
view_func=api_view)
そしてget()
、私の ContactAPI クラスでオーバーライドします:
ビュー.py
from flask.views import MethodView
class ContactAPI(MethodView):
def __init__(self, session, model, app, *args, **kwargs):
super(ContactAPI, self).__init__(*args, **kwargs)
def get(self, instid):
print instid
URL/contact/1
にアクセスすると、instid
として出力されNone
ます。
defaults={'instid': None},
manager.py から行を削除すると、instid
1 として出力されます。
私の呼び出しに defaults 行があるとadd_url_rule
、URL に入力しているものをオーバーライドするのはなぜですか?