正在验证用正则表达式接收的id

2024-03-29 14:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从URL获取ID(在django中):

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

只要输入是一个数字,就可以很好地工作。但如果不是数字,页面将返回500错误。你知道吗

我如何做一个特殊的情况,这将照顾到所有无效的输入,并将给出一个例子

pk=0

作为输出?你知道吗


Tags: djangoviewapiidurlas错误情况
1条回答
网友
1楼 · 发布于 2024-03-29 14:15:47

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

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

它将匹配的子字符串与组名pk相关联,即命名组。如果没有?,regex将直接匹配preset/P<pk>,后跟一个或多个数字。你知道吗

其次,如果存在任何非数字,regex将不匹配,并且将发送404notfound响应。可能500错误发生在代码的其他地方-是否有不太特定的模式匹配?你知道吗

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

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

视图函数如下所示:

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

现在,每当发出包含非数字字符的请求时,pk将默认为0。你知道吗

相关问题 更多 >