2016-07-31 45 views
0

我试图从URL获得ID(在Django)收到:验证ID用正则表达式

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

这只要输入是一个数字效果很好。但如果它不是数字,页面将返回500错误。

我怎样才能做一个特殊的情况下,将采取的所有非有效输入照顾和将给例如

pk=0 

为输出?

+0

不,一个非数字输入会给404错误,因为它不会匹配'\ d +'。 –

回答

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每当一个请求时,它包含一个非数字字符。