Python 在Flask中使用app.add_url_规则的默认值
我正在使用以下内容设置url端点: manager.pyPython 在Flask中使用app.add_url_规则的默认值,python,flask,Python,Flask,我正在使用以下内容设置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'] a
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)
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
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
collection_endpoint = '/%s' % api_name
methods = ['GET']
api_view = ContactAPI.as_view(api_name, self.session,
Contact, app)
self.app.add_url_rule(instance_endpoint, methods=methods,
view_func=api_view)
self.app.add_url_rule(collection_endpoint, methods=methods,
defaults={'instid': None},
view_func=api_view)
当我点击URL/contact/1
时,我得到instit
打印为None
当我从manager.py中删除defaults={'institd':None},
行时,我将institd
打印为1
为什么调用
add\url\u rule
时会让默认值行覆盖我在url中输入的内容?事实证明,在使用默认值时,我需要注册两个端点
因为{'institd':None}
在我的ContactAPI视图中作为kwarg传递到get()
,我需要告诉Flask在点击URL/contact
时将institd
设置为None
当我点击/contact/1
时,我需要使用
。为此,我需要删除调用add\u url\u rule()
中的默认值
kwarg
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)
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
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
collection_endpoint = '/%s' % api_name
methods = ['GET']
api_view = ContactAPI.as_view(api_name, self.session,
Contact, app)
self.app.add_url_rule(instance_endpoint, methods=methods,
view_func=api_view)
self.app.add_url_rule(collection_endpoint, methods=methods,
defaults={'instid': None},
view_func=api_view)
从xxx导入ContactAPI
从xxx.models导入联系人
#self.app是我的烧瓶应用程序
#self.session是SQLAlchemy会话
api_名称='联系人'
实例\端点='/%s/'%api\名称
集合\u终结点='/%s'%api\u名称
方法=['GET']
api\u视图=ContactAPI.as\u视图(api\u名称、self.session、,
联系人,应用程序)
self.app.add_url_规则(实例_端点,方法=方法,
视图(func=api\u视图)
self.app.add\u url\u规则(集合\u端点,方法=方法,
默认值={'institd':None},
视图(func=api\u视图)
相关Werkzeug文件:
感谢#flask IRC频道中的asdf
指出了这一点。在flask文档中有一个类似的完整示例-