调整 Django URL 中的正则表达式以匹配文件路径

Posted

技术标签:

【中文标题】调整 Django URL 中的正则表达式以匹配文件路径【英文标题】:Adapting Regular Expression in Django URL to match filepath 【发布时间】:2018-10-16 10:37:09 【问题描述】:

因此,我目前正在开发一个网络应用程序,该应用程序将恶意软件文件的位置作为其中一项功能的输入。

这是通过视图文件传递的。然而,在对应用程序的模型部分进行了一些更改后,我发现它无法解析完整的文件路径。

以下代码适用于以下 pcap 作为输入:

8cdddcd3-35fa-468d-8647-816518a9836a435be1c6e904836ad65f97f3eac4cbe19ee7ba0da48178fc7f00206270469165.pcap

         url(r'^analyse/(?P<pcap>[\w\-]+\.pcap)$', views.analyse, name='analyse'),

但是,当它是包含完整文件路径的 pcap 时,此代码不再有效。

/home/freddie/malwarepcaps/8cdddcd3-35fa-468d-8647-816518a9836a435be1c6e904836ad65f97f3eac4cbe19ee7ba0da48178fc7f00206270469165.pcap

非常感谢任何关于我将如何更改正则表达式以适应传递给路由的字符串中的完整文件路径的建议或指针。

【问题讨论】:

除非你需要它用于 SEO 或其他什么,否则我会说通过帖子发送。 【参考方案1】:

正则表达式:((/\w+?)+/)?([\w-]+\.pcap)

django 正则表达式:^analyse(?P&lt;pcap&gt;((/\w+?)+/)?([\w-]+\.pcap))$

注意analyse 后面没有斜线,因为它现在是pcap 的一部分。

所以analyse/home/freddie/malwarepcaps/foo-bar.pcap 应该匹配这个模式并且pcap 将等于/home/freddie/malwarepcaps/foo-bar.pcap

测试:

https://pythex.org/?regex=((%2F%5Cw%2B%3F)%2B%2F)%3F(%5B%5Cw-%5D%2B%5C.pcap)&test_string=8cdddcd3-35fa-468d-8647-816518a9836a435be1c6e904836ad65f97f3eac4cbe19ee7ba0da48178fc7f00206270469165.pcap%20%0A%2Fhome%2Ffreddie%2Fmalwarepcaps%2F8cdddcd3-35fa-468d-8647-816518a9836a435be1c6e904836ad65f97f3eac4cbe19ee7ba0da48178fc7f00206270469165.pcap&ignorecase=0&multiline=0&dotall=0&verbose=0

PS:我认为最好将此类参数(路径 - /home/f/m/f.pcap)移动到查询字符串(用于 GET 请求)或 http-body(用于 POST 请求) 所以在没有url-matching的情况下获取参数会更容易

【讨论】:

这个站点 pythex 似乎很有用。感谢您的帮助。 未找到关键字参数“'pcap': ”的“分析”反向。尝试了 1 种模式:['analysis/((/\\w+?)+/)?([\\w-]+\\.pcap)'] - 但是这个错误似乎仍然存在 使用新的 url 模式 - url(r'^analyse/((/\w+?)+/)?([\w-]+\.pcap)', views.analysis, name ='分析'), 我只向您展示了正则表达式,您需要添加 django 特定键 ?P&lt;pcap&gt; 以便 django 了解此 url 参数如何命名:'^analyse?P&lt;pcap&gt;((/\w+?)+/)?([\w-]+\.pcap)$' @dipl0 我更新了我的答案。还要检查后记

以上是关于调整 Django URL 中的正则表达式以匹配文件路径的主要内容,如果未能解决你的问题,请参考以下文章

Django基于正则表达式匹配URL

django url 正则表达式不匹配

Django框架之正则表达式URL误区

Django中常用的正则表达式

匹配另一个 url - 正则表达式 django urls

Django url正则表达式匹配但找不到页面错误