2017-08-20 248 views
0

我有一個簡單的網站,用戶可以註冊才能訪問私人內容並獲得簡報。我使用django-registration進行用戶註冊和身份驗證,並使用here的一些HTML模板。Django註冊:如何允許用戶刪除他們的帳戶?

整個系統正在運行(登錄,註銷,密碼恢復等),但我意識到用戶不能從網站上刪除他們的帳戶。有沒有爲此設計的插件,或者如何擴展註冊類來做到這一點?通過刪除,我更喜歡真正的壓制,而不僅僅是讓用戶不活躍。

回答

1

你可以做這樣的事情:

def delete_user(request, username): 
    context = {} 

    try: 
     u = User.objects.get(username=username) 
     u.delete() 
     context['msg'] = 'The user is deleted.'  
    except User.DoesNotExist: 
     context['msg'] = 'User does not exist.' 
    except Exception as e: 
     context['msg'] = e.message 

    return render(request, 'template.html', context=context) 

而且有一個URL模式,如:

url(r'^delete/(?P<username>[\w|\W.-]+)/$', views.delete_user, name='delete-user') 

這將做的工作。它將通過給定的用戶名來刪除用戶。

,如the docs說:

is_active

布爾。指定是否應將此用戶帳戶視爲活動用戶。 我們建議您將此標誌設置爲False而不是刪除帳戶;這樣,如果您的應用程序對用戶有任何外鍵,則外鍵不會中斷。

這是一種更好的方法來設置用戶爲不活躍,而不是從數據庫中刪除完全是,因爲外鍵將打破。

因此,你可以簡單地做:

def delete_user(request, username): 
    context = {} 

    try: 
     user = User.object.get(username=username) 
     user.is_active = False 
     user.save() 
     context['msg'] = 'Profile successfully disabled.' 
    except User.DoesNotExist: 
     # ... 
    except Exception as e: 
     # ... 

    # ... 

正如現在每個人都可以訪問此視圖,您必須添加一些權限。一個簡單的方法將覆蓋內置@user_passes_test修飾者:

@user_passes_test(lambda u: u.is_staff, login_url=reverse_lazy('login')) 
def delete_user(request, username): 
    # ... 
相關問題