Python 在Flask中使用app.add_url_规则的默认值

Python 在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

我正在使用以下内容设置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)
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文档中有一个类似的完整示例-