希望为停用和删除用户的视图提供潜在的答案。
# forms.py
from django import forms
class UserDeactivateForm(forms.Form):
"""
Simple form that provides a checkbox that signals deactivation.
"""
deactivate = forms.BooleanField(required=True)
class UserDeleteForm(forms.Form):
"""
Simple form that provides a checkbox that signals deletion.
"""
delete = forms.BooleanField(required=True)
# views.py
# You could make this DRYer, but sometimes repeating yourself
# for explicitness makes sense.
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib import messages
from django.contrib.auth import logout
from django.shortcuts import redirect, render
from django.urls import reverse
from django.views.generic import View
from .forms import UserDeactivateForm, UserDeleteForm
class UserDeactivateView(LoginRequiredMixin, View):
"""
Deactivates the currently signed-in user by setting is_active to False.
"""
def get(self, request, *args, **kwargs):
form = UserDeactivateForm()
return render(request, 'users/user_deactivation.html', {'form': form})
def post(self, request, *args, **kwargs):
form = UserDeactivateForm(request.POST)
# Form will be valid if checkbox is checked.
if form.is_valid():
# Make user inactive and save to database.
request.user.is_active = False
request.user.save()
# Log user out.
logout(request)
# Give them a success message.
messages.success(request, 'Account successfully deactivated')
# Redirect to home page.
return redirect(reverse('home'))
return render(request, 'users/user_deactivation.html', {'form': form})
class UserDeleteView(LoginRequiredMixin, View):
"""
Deletes the currently signed-in user and all associated data.
"""
def get(self, request, *args, **kwargs):
form = UserDeleteForm()
return render(request, 'users/user_deletion.html', {'form': form})
def post(self, request, *args, **kwargs):
form = UserDeleteForm(request.POST)
# Form will be valid if checkbox is checked.
if form.is_valid():
user = request.user
# Logout before we delete. This will make request.user
# unavailable (or actually, it points to AnonymousUser).
logout(request)
# Delete user (and any associated ForeignKeys, according to
# on_delete parameters).
user.delete()
messages.success(request, 'Account successfully deleted')
return redirect(reverse('home'))
return render(request, 'users/user_deletion.html', {'form': form})
然后,您需要为每个模板和 URL 路由创建模板,但这些应该非常简单。