2015-02-11 183 views
7

我正在使用allauth,注册后用户收到一封电子邮件,要求他们点击链接以验证其电子邮件地址。我想改变这个链接的价值。如何更改django allauth中activate_url的值?

我想它从

http://localhost:8001/account/confirm-email/hy72ozw8b1cexuw2dsx4wwrmgzbmnyxx4clswh67tcvgyovg/ 

改变

http://localhost:8001/index.html#/verifyEmail/hy72ozw8b1cexuw2dsx4wwrmgzbmnyxx4clswh67tcvgyovg/ 

我怎样才能做到这一点?我看到activate_url值在email_confirmation_text.txt

回答

7

你真的没有覆盖allauthurls.py为了实现这一点,所有你需要做的是包括allauth后指定网址版本的网址:

from django.conf.urls import patterns, include, url 
from allauth.account.views import confirm_email 

urlpatterns = patterns('', 
    ... 
    url(r'^accounts/', include('allauth.account.urls')), 
    url(r'^index.html#/verifyEmail/(?P<key>\w+)/$', confirm_email, 
     name="account_confirm_email"), 
    # but I would recommend changing that url: 
    url(r'^verify-email/(?P<key>\w+)/$', confirm_email, 
     name="account_confirm_email"), 
    ... 
) 

这是一篇关于URLS的文章:Cool URIs don't change

+0

很高兴为您添加了该内容。我想到了这一点,发现自己猜测它是否可行,但没有时间对其进行正确测试。 – 2015-02-14 20:02:04

+1

这里还有一个问题,URL中'#'之后的任何内容都不会被浏览器发送到服务器。因此,直到从网址中删除“#”,上述解决方案才会生效。 @birdy,你真的需要'#'吗?如果没有,只需将其删除,一切都将完美工作。 – 2015-02-15 21:18:50

+0

@DebanshuKundu,非常好的一点,在URL中'#'之后的任何东西都不会传递给服务器,除非它转义到'%23'。此外,根本没有理由让index.html或任何'.html'在django的url中。 – 2015-02-15 21:34:41

3

使用我没有使用Django的allauth或将其纳入我的项目之一,但只是戳在自己的源代码身边告诉我下面的:

send method刚进行基本的urlresolvers.reverse调用,这意味着它构建的网址为account/urls.py,定义为here

因此,你有三种选择:

  1. 覆盖他们urls.py,你将不得不在每次更新包(呸)时间重复。
  2. 在他们的GitHub上引发一个问题,看看他们是否将这添加为配置选项,而不是“硬编码”他们已经完成。
  3. 试着将他们的EmailConfirmation模型子类化,使用更适合您的项目的东西覆盖它们的发送方法,并查看是否可以使用它来使用您的项目(不知道它是否可行)。