验证使用正则表达式收到的ID

时间:2016-07-31 10:54:17

标签: python regex django

我试图从网址(在django中)获取ID:

url(r'^preset/(P<pk>\d+)$', views.route_preset_api.as_view()),

只要输入是数字,这就可以正常工作。但如果不是数字,页面将返回500错误。

我该如何处理一个特殊情况,它将处理所有无效输入,并举例说明

pk=0

作为输出?

1 个答案:

答案 0 :(得分:0)

首先,您的模式缺少指定命名组的必需?。它应该是:

r'^preset/(?P<pk>\d+)$'

将匹配的子字符串与组名pk相关联,即命名组。如果没有?,则正则表达式将按字面匹配preset/P<pk>后跟1位或更多位数。

其次,如果存在任何非数字,则正则表达式将不匹配,并且将发送404 Not Found响应。可能500错误发生在代码的其他地方 - 是否存在匹配的不太具体的模式?

要处理无效请求,您可以添加路由到同一视图函数的第二个模式,但为pk参数添加默认参数。 URL模式为:

url(r'^preset/[^\d]*$', views.route_preset_api.as_view()),

并且视图函数看起来像这样:

def route_preset_api(request, pk=0):
    ...

每当发出包含非数字字符的请求时,pk默认为0