你可以这样做:
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,而不是删除帐户;这样,如果您的应用程序对用户有任何外键,则外键不会损坏。
将用户设置为inactive而不是从数据库中完全删除它是一种更好的方法,因为外键会损坏。
所以你可以简单地做:
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):
# ...