Django:用户名的urlpattern?

gue*_*tli 6 python regex django django-urls

到目前为止,团队成员将此代码用于用户名的url模式:

# urls.py
urlpatterns = patterns('...',
   url(r'^user/(?P<username>[.-_\w]+)/foo', 'myapp.views.foo'),
   ....
Run Code Online (Sandbox Code Playgroud)

有一个隐藏的错误:如果用户名包含-倒车将失败,因为正则表达式的开始[.-_"从所有字符手段._".

可以使用什么模式匹配所有有效的用户名?

PS:我想-如果你想在django中匹配所有可能的用户名,那么将符号添加到正则表达式是不够的.

Nav*_*eet 8

基于我在AbstractUser模型中看到的内容,我认为用于获取用户名的更好的正则表达式是(?P<username>[\w.@+-]+).


Cha*_*ler 7

我认为你不应该在你的网址模式中进行任何用户名验证.将验证保存在一个位置 - 首次创建帐户的位置.

应该匹配用户提供的任何内容,并将其传递给安全数据库函数以查找用户名,如果不存在则失败.

因此,在您的网址模式中,让浏览器发送任何非空的内容,并依靠您非常智能的数据库告诉您之前认为有效的内容.

url(r'^user/(?P<username>.+)/foo$', 'myapp.views.foo'),
Run Code Online (Sandbox Code Playgroud)

另外,请注意最后的"$".