我的urls.py中有一个网址如下: -
url(r'^api/profile/(?P<username>\w+)/$', views.ProfileDetail.as_view()),
我的用户名与我的emailid相同,即something@gmail.com
。当我浏览http://127.0.0.1:8000/api/profile/something@gmail.com/
时,它会显示404 Page not found
。
如果用户名更改为普通单词(不像emailid),则网址正常。如何确保url将emailids作为用户名?
答案 0 :(得分:0)
您的正则表达式与电子邮件地址中的所有字符都不匹配。 \w
匹配字符a-z,A-Z,0-9和下划线。电子邮件地址包括@和。,两者都不匹配。
您需要更改正则表达式以匹配有效的电子邮件地址。 Django有一些内置的电子邮件地址正则表达式,但它们非常复杂。 https://github.com/django/django/blob/master/django/core/validators.py#151如果你想看看他们喜欢什么。
出于您的目的,以下内容可能就足够了:
url(r'^api/profile/(?P<username>[a-zA-Z0-9\+@\._-]+)/$', views.ProfileDetail.as_view()),
答案 1 :(得分:0)
您必须编辑匹配网址正则表达式:
url(r'^api/profile/(?P<username>[@\.\w]+)/$', views.ProfileDetail.as_view()),