我擁有基於舊數據庫的身份驗證後端。當某人使用該數據庫登錄並且沒有對應的記錄時,我創建一個。我想知道的是,是否有某種方法可以將Django系統警告給這個事實,例如,我可以將全新用戶重定向到不同的頁面。在Django中通過後端身份驗證創建新用戶時標記爲
我能想到的唯一方法是在用戶的個人資料記錄中添加一個標誌,名稱與is_new
相似,該標誌會被測試一次,然後在重定向後立即設置爲False
。
基本上,我想知道如果別人已經知道了這一點,所以我不必重新發明輪子。
我擁有基於舊數據庫的身份驗證後端。當某人使用該數據庫登錄並且沒有對應的記錄時,我創建一個。我想知道的是,是否有某種方法可以將Django系統警告給這個事實,例如,我可以將全新用戶重定向到不同的頁面。在Django中通過後端身份驗證創建新用戶時標記爲
我能想到的唯一方法是在用戶的個人資料記錄中添加一個標誌,名稱與is_new
相似,該標誌會被測試一次,然後在重定向後立即設置爲False
。
基本上,我想知道如果別人已經知道了這一點,所以我不必重新發明輪子。
我發現完成這個最簡單的方法就是按照你所說的完成。我對我的一個項目有類似的要求。我們需要向任何新成員顯示「不要忘記更新您的個人資料」消息,直到他們第一次訪問他們的個人資料。客戶很快就想要它,所以我們向用戶的配置文件添加了「visited_profile」字段,並將其默認爲False。
我們之所以這樣做,是因爲它的實現速度非常快,不需要修改註冊流程,與現有用戶一起工作,並且每次頁面加載都不需要額外的查詢(因爲檢索到用戶和用戶配置文件已經在每一頁上)。花了我們所有的10分鐘來添加該字段,運行南遷移並將if標籤放入模板中。
有兩種方法,我知道,以確定是否一個對象被創建:
1)當使用get_or_create
元組返回的形式(obj, created)
其中created
是表示一個布爾顯然足夠的對象是否被創造的或不是
2)post_save
信號通過一個created
參數,也是一個布爾值,也指示對象是否被創建。
在最簡單的級別上,可以使用這兩個鉤子中的任何一個來設置會話變量,然後可以相應地檢查並重定向。
如果您可以通過它,也可以在調用get_or_create
或post_save
信號後直接重定向。
所有這三種情況都有問題,它們都不會將信息發送回調用身份驗證的視圖。 – 2011-05-13 13:46:26
靠自己,沒有。但是,如果您將值添加到會話存儲中,則可以從視圖中的會話訪問該值。 – 2011-05-13 15:05:28
我不認爲你在這些情況下可以訪問會話存儲,因爲你需要請求(我意識到這裏有一些黑客攻擊,但仍然存在),這只是爲了登錄信號而提供的,此時已經太遲了。 – 2011-05-13 17:52:52
您可以使用基於文件的緩存來存儲尚未保存到數據庫的用戶。當用戶第二次登錄時,您可以查看緩存,找到用戶對象,並將其妥善保存到數據庫中。
下面是關於Django的緩存一些信息:http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs
PS:不要使用Memcached的,因爲它會刪除電腦死機的情況下,所有的信息或關閉。
提問者已經有了在數據庫中創建新用戶的代碼,並且想知道django是使用現有用戶還是創建了新用戶。添加額外的字段或使用post_save信號似乎更容易。 – acidjunk 2016-09-22 08:56:04
我會說你的解決方案會很好。你也可以使用觸發器來設置該標誌,以便將來可以添加其他身份驗證後端,但這可能是矯枉過正的? – 2011-05-11 21:05:50