Skip to main content
 首页 » 编程设计

python之我如何为这些网址编写正则表达式

2024年08月30日29cloudgamer

我正在尝试构建一个小型 wiki,但在为其编写正则表达式规则时遇到了问题。

我想做的是每个页面都应该有自己的编辑页面,当我在编辑页面上按提交时,它应该将我重定向到 wiki 页面。

我想在我的应用程序中包含以下 url:

  • http://example.com/<page_name>

  • http://example.com/_edit/<page_name>

我的 URLConf 有以下规则:

url(r'(_edit/?P<page_name>(?:[a-zA-Z0-9_-]+/?)*)', views.edit), 
url(r'(?P<page_name>(^(?:_edit?)?:[a-zA-Z0-9_-]+/?)*)', views.page), 

但由于某些原因它们无法正常工作。

我怎样才能让它工作?

似乎一个或两个匹配相同的东西。

请您参考如下方法:

按照更简洁的方法,我真正将编辑 URL 定义为:

http://example.com/<pagename>/edit 

在我看来,这更清楚也更容易猜测。

然后,请记住 Django 会按照您定义它们的相同顺序循环您的 url 模式,并在第一个匹配传入请求的位置停止。所以它们的定义顺序非常重要。

随附您问题的答案:

^(?P<page_name>[\w]+)$将请求匹配到任何/PageName

请始终记住起始插入符号和最终美元符号,这表示我们希望 URL 在我们的正则表达式之前和之后分别开始和停止,否则任何前导或尾随符号/字符也会使正则表达式匹配(而在这种情况下您可能希望显示 404)。

^_edit/(?P<page_name>[\w]+)$匹配编辑 URL(或 ^(?P<page_name>[\w]+)/edit$ 如果您喜欢用户友好的 URL 通常称为 REST url,而 RESTfullnes 是一个与 URL 样式无关的概念)。


总结将以下内容放入您的网址:

url(r'^(?P<page_name>[\w]+)$', views.page) 
url(r'^_edit/(?P<page_name>[\w]+)$', views.edit) 

您可以通过更改 \w 轻松强制 URL 不具有某些特定字符使用您自己定义的集合。

了解有关 Django URL 调度的更多信息 read here .

注意:正则表达式既强大又危险,尤其是在网络上。保持简单,并确保真正理解您定义的内容,否则您的 Web 应用程序可能会面临多个安全问题。

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. -- Jamie Zawinski