我最近遇到了一些麻烦,试图将我的REST API设置为使用路径版本。
我的代码在my_app / urls.py中:
def ping():
return "pong"
API_PREFIX = r'^(?P<version>(v1))'
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(f'^{API_PREFIX}/ping/$', get_json(ping))) # assume that get_json returns the right thing
]
我将这些行添加到同一目录中的settings.py:
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning'
'DEFAULT_VERSION': 'v1',
'ALLOWED_VERSIONS': ('v1',),
}
如果我执行GET localhost:8000/v1/ping/
,则无效。 f
字符串能够包含regex
语法还是其他地方的问题?我尝试了fr'^{(API_PREFIX}}/ping/$'
,但也没有用。
加分问题:在ping
函数中,如何访问和检查路径中传递的版本号(在这种情况下为1,但会随时间变化)?
答案 0 :(得分:1)
我发现了问题。文档中的这一段概述了我所面临的问题;
使用未命名的正则表达式组¶以及命名组 语法,例如(?P [0-9] {4}),你也可以使用较短的未命名 组,例如([0-9] {4})。
这种用法并不特别推荐,因为它更容易使用 意外地在匹配的预期含义之间引入错误 以及观点的论据。
<强>&GT;在任何一种情况下,在给定的正则表达式中仅使用一种样式是 推荐的。当两种样式混合时,任何未命名的组都是 忽略,只将命名组传递给视图函数。