Django网址模式无法识别电子邮件

时间:2015-09-07 14:44:36

标签: python django

我的网址格式是

url('^auth/login/(?P<user_name>\w+)/(?P<password>\w+)/$', views.auth_login_from_device, name='login_from_device'),

当我调用localhost:8000 / auth / login / myname / 12345时,它非常好

但是当我打电话的时候  本地主机:8000/auth/login/me@mymail.com/12345 /

我明白了 找不到页(404) 请求方法:GET 请求网址:http://127.0.0.1:8000/auth/login/satya@prakash/12345/

当前网址,auth / login / satya @ prakash / 12345 /,并不匹配其中任何一个。

我的urls.py

urlpatterns = patterns('',
    url('^$', views.auth_index, name='auth_index'),
    url('^auth/login/$', views.auth_login, name='auth_login'),
    url('^auth/login/(?P<user_name>\w+)/(?P<password>\w+)/$', views.auth_login_from_device, name='login_from_device'),
)

我错过了什么?提前谢谢。

2 个答案:

答案 0 :(得分:4)

\w中的(?P<user_name>\w+)@符号不符。

最好使用[\w.@+-]+,它与电子邮件中出现的其他几个字符相匹配。这是Django code

中使用的方法
url('^auth/login/(?P<user_name>[\w.@+-]+)/...

请注意,在网址中输入密码是一个非常糟糕的主意!这意味着密码将保存在浏览器的历史记录,服务器日志等中。

答案 1 :(得分:1)

in

url('^auth/login/(?P<user_name>\w+)/(?P<password>\w+)/$'

您将user_name视为\w+,但\w+未赢得@

试试这个:

 url('^auth/login/(?P<user_name>\w+@\w+)/(?P<password>\w+)/$'    

正则表达式中包含@