【问题标题】:Django url regex for username that accepts dots接受点的用户名的 Django url 正则表达式
【发布时间】:2015-08-08 12:53:27
【问题描述】:

我在 Django 中使用这个 url 来处理用户名正则表达式已经有一段时间了:

url(r'^.../(?P<username>[-\w]+)/$'

但现在,我遇到了一个奇怪的案例,有时 Google 会用这样的用户名回答:

luke.skywalker 而不是 lukeskywalker

而且看起来我的正则表达式不接受点 - 我收到 NoReverseMatcherror。有人可以帮我正确的正则表达式吗?

【问题讨论】:

  • 试试:[a-zA-Z.]+,你可能要检查第一个答案here
  • 请注意,google 的非标准行为是 luke.skywalker@gmail.com 和 lukeskywalker@gmail.com 实际上是同一个电子邮件地址。你的问题是你没有匹配它们(丹尼尔罗斯曼的答案应该处理并且还得到Gocht的评论答案不会的破折号/下划线/数字),或者你还需要“规范化”事情以便luke.skywalker和 lukeskywalker 被视为相同的用户名?[我实际上更喜欢替代方法,这样我可以从同一个电子邮件地址创建相对大量的测试帐户,但我可以看到正常情况可能会被激怒]
  • @Foon 感谢您的信息。我正在使用 Python Social Auth 进行记录(以防有人发现这很有用)。

标签: regex django django-urls


【解决方案1】:

您可以在方括号内添加您想要接受的字符:

r'^.../(?P<username>[-\w.]+)/$'

【讨论】:

    【解决方案2】:

    只需将lookup_value_regex 添加到您的视图集:

    class UserViewSet(viewsets.ModelViewSet):
          lookup_value_regex =  r"[\w.]+"
    

    Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2013-07-26
      • 2014-07-08
      • 1970-01-01
      • 2011-08-11
      相关资源
      最近更新 更多