如何在django allauth中允许用户删除帐户?

贝曼

我正在尝试找出允许用户使用django-allauth删除或停用其帐户的最佳方法,并且我假设需要将is_active字段设置为False。

我下面的解决方案有几个问题:1)呈现的复选框字段is_active显示文本“指定是否应将此用户视为活动用户。取消选择此用户而不是删除帐户。” 如何将文本更改为“如果确定要删除此帐户,请选中此框。”?

更新:刚意识到选中复选框会将is_active设置为True,而取消选中复选框会将其设置为False,那么也许我可能需要使用其他字段来验证表单?

2)如何注销用户提交?

forms.py:

class DeactivateUserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['is_active']

views.py:

login_required(login_url='/accounts/login/')
def deactivate_user_view(request):  
    pk = request.user.id
    user = User.objects.get(pk=pk)
    user_form = DeactivateUserForm(instance=user)
    if request.user.is_authenticated() and request.user.id == user.id:
        if request.method == "POST":
            user_form = DeactivateUserForm(request.POST, instance=user)
            if user_form.is_valid():
                deactivate_user = user_form.save(commit=False)
                user.is_active = False
                deactivate_user.save()
        return render(request, "account/userprofile_del.html", {
            "user_form": user_form,
        })
    else:
        raise PermissionDenied

userprofile_del.html:

<h2>Delete your account</h2>
<hr>
<form action="." method="POST" class="padding">{% csrf_token %}
    {{ user_form.as_p}}
    <button class="btn btn-primary" type="submit" name="action">{% trans "Confirm" %}</button>
</form>

使成为: 确认删除

伊恩·普莱斯(Ian Price)

对于第1个问题,请覆盖此字段的帮助文本属性;您可以在ModelForm的init方法中执行此操作。

class DeactivateUserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['is_active']

    def __init__(self, *args, **kwargs):
        super(DeactivateUserForm, self).__init__(*args, **kwargs)
        self.fields['is_active'].help_text = "Check this box if you are sure you want to delete this account."

    def clean_is_active(self):  
        # Reverses true/false for your form prior to validation
        #
        # You can also raise a ValidationError here if you receive 
        # a value you don't want, to prevent the form's is_valid 
        # method from return true if, say, the user hasn't chosen 
        # to deactivate their account
        is_active = not(self.cleaned_data["is_active"])
        return is_active

对于问题2,您可能需要禁用allauth中介登出页面。在您的设置中:

ACCOUNT_LOGOUT_ON_GET = True

并重定向到您的视图逻辑中的注销页面。

from django.shortcuts import HttpResponseRedirect
from django.core.urlresolvers import reverse_lazy

    # ... in your view
    if user_form.is_valid():
        deactivate_user = user_form.save(commit=False)
        user.is_active = False
        deactivate_user.save()
        return HttpResponseRedirect(reverse_lazy('account_logout')) 

这将重定向到注销URL,然后通过ACCOUNT_LOGOUT_REDIRECT_URL将用户转发到您的设置中设置的URL。您的用户帐户现已停用,并且已经注销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章