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

标签 python regex django urlconf

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

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

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

  • 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

关于python - 我如何为这些网址编写正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724725/

相关文章:

javascript - 字符串上的正则表达式或 For 循环 - 拆分和连接

python - Django __unicode__ 和 FK 非常慢

python - 在 Django 的 POST 数据中将值与表单一起传递

Python - 编写Xml(格式化)

python - 评估变量包含 f 字符串中的数学表达式

python - 如何使用列表中的键和分隔空列表的值创建字典?

c++ - 如何将 C# 风格的正则表达式转换为 C++ 风格

python - 转置列后合并列 Pandas Dataframes

regex - 将单元格值转换为 snake_case

python - Django Crispy 表单不显示 bootstrap/css 或按钮