2015-02-11 182 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模型子類化,使用更適合您的項目的東西覆蓋它們的發送方法,並查看是否可以使用它來使用您的項目(不知道它是否可行)。