Vous pouvez faire quelque chose comme ceci:
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)
Et un modèle url comme:
url(r'^delete/(?P<username>[\w|\W.-]+)/$', views.delete_user, name='delete-user')
Cela fera le travail. Il va supprimer un utilisateur par nom d'utilisateur donné.
Mais, comme the docs disent:
is_active
booléenne. Indique si ce compte d'utilisateur doit être considéré comme actif. Nous vous recommandons de définir cet indicateur sur False
au lieu de supprimer des comptes; De cette façon, si vos applications ont des clés étrangères pour les utilisateurs, les clés étrangères ne se casseront pas.
Il est une meilleure approche pour définir l'utilisateur comme inactif au lieu de le supprimer totalement de la base de données, parce que les clés étrangères briseront.
Vous pouvez simplement faire:
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:
# ...
# ...
Et maintenant tout le monde peut accéder à ce point de vue, vous devez ajouter des autorisations. Une approche simple consiste à remplacer le décorateur @user_passes_test
intégré:
@user_passes_test(lambda u: u.is_staff, login_url=reverse_lazy('login'))
def delete_user(request, username):
# ...