接受点的用户名的 Django url 正则表达式
Posted
技术标签:
【中文标题】接受点的用户名的 Django url 正则表达式【英文标题】:Django url regex for username that accepts dots 【发布时间】:2015-08-08 12:53:27 【问题描述】:我在 Django 中使用这个 url 来处理用户名正则表达式已经有一段时间了:
url(r'^.../(?P<username>[-\w]+)/$'
但现在,我遇到了一个奇怪的案例,有时 Google 会用这样的用户名回答:
luke.skywalker
而不是 lukeskywalker
而且看起来我的正则表达式不接受点 - 我收到 NoReverseMatch
error。有人可以帮我正确的正则表达式吗?
【问题讨论】:
试试:[a-zA-Z.]+
,你可能要检查第一个答案here
请注意,google 的非标准行为是 luke.skywalker@gmail.com 和 lukeskywalker@gmail.com 实际上是同一个电子邮件地址。你的问题是你没有匹配它们(丹尼尔罗斯曼的答案应该处理并且还得到Gocht的评论答案不会的破折号/下划线/数字),或者你还需要“规范化”事情以便luke.skywalker和 lukeskywalker 被视为相同的用户名?[我实际上更喜欢替代方法,这样我可以从同一个电子邮件地址创建相对大量的测试帐户,但我可以看到正常情况可能会被激怒]
@Foon 感谢您的信息。我正在使用 Python Social Auth 进行记录(以防有人发现这很有用)。
【参考方案1】:
您可以在方括号内添加您想要接受的字符:
r'^.../(?P<username>[-\w.]+)/$'
【讨论】:
【参考方案2】:只需将lookup_value_regex
添加到您的视图集:
class UserViewSet(viewsets.ModelViewSet):
lookup_value_regex = r"[\w.]+"
Source
【讨论】:
以上是关于接受点的用户名的 Django url 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
如何设置只接受 3 个特定单词的 Django URL 正则表达式?