【问题标题】:Django - Accepting full sentence in query parametersDjango - 接受查询参数中的完整句子
【发布时间】:2019-07-22 14:34:32
【问题描述】:

我正在整理一个小型 API,它只是将传入的消息转换为 Spongebob 模拟案例。

一切顺利,但回来后我意识到我一直在使用单个值进行测试,因此刚刚注意到以下 URL 条目将无法接受空格/%20。

url(r'^mock/(?P<message>\w+)/$',mock, name='mock'),

我已经查看了所有内容,但不知道如何恰当地表达我正在寻找的内容以找到任何有用的内容。我会寻找什么来接受一个完整的句子。

值得注意的是,这将来自聊天消息,因此,它将按原样发送,而不是百分比编码。

【问题讨论】:

  • 尝试将\w+更改为[\w ]+
  • 可能,使用r'^mock/(?P&lt;message&gt;[^/]+)/$ 更安全,以避免以后添加越来越多的“白名单”字符。 [^/]+ 匹配除 / 之外的 1 个或多个字符
  • 你们能否解释一下答案中的差异(或删除带有一些测试字符串的正则表达式验证器)?两者看起来都是正确的。

标签: regex django django-urls


【解决方案1】:

您并不想将类似的内容作为 URL 参数。相反,它应该在查询字符串中:例如mysite.com/mock/?message=Message+goes+here

网址应该是:

url('^mock/$', ...)

然后视图只从request.GET['message'] 获取数据。

【讨论】:

  • 其实我本来也是这么想的,但是看到一些类似的案例,他们都反对。在 URL 参数和查询字符串中捕获有什么危险?
【解决方案2】:

您可以使用

解决您的直接问题
r'^mock/(?P<message>[^/]+)/?$

regex demo

这里,[^/]+ 匹配除/ 之外的任何一个或多个字符,/? 匹配字符串末尾的可选/ ($)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多