2017-08-20 14 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): 
    # ... 
関連する問題