我正在尝试找出允许用户使用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>
对于第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] 删除。
我来说两句