簡體   English   中英

如何在Django Rest Framework中刪除用戶帳戶?

[英]How can I delete a user account in Django Rest Framework?

我正在通過結合Django Rest Framework和Angular創建一個應用程序。
請告知我們有關用戶刪除的實現,因為有些地方無法使用。

我在Djnago的views.py中對刪除視圖進行了如下描述。

class AuthInfoDeleteView(generics.DestroyAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = AccountSerializer
    lookup_field = 'email'
    queryset = Account.objects.all()

    def get_object(self):
        try:
            instance = self.queryset.get(email=self.request.user)
            return instance
        except Account.DoesNotExist:
            raise Http404

電子郵件存儲在self.request.user
另外,我在serializer.py中編寫如下。

from django.contrib.auth import update_session_auth_hash
from rest_framework import serializers

from .models import Account, AccountManager


class AccountSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True, required=False)

    class Meta:
        model = Account
        fields = ('id', 'username', 'email', 'profile', 'password', )

    def create(self, validated_data):
        return Account.objects.create_user(request_data=validated_data)

在這種狀態下,將Angular的DELETE方法發送到AuthInfoDeleteView所鏈接到的URL(/ api / user / delete /)時,發生以下錯誤。

Internal Server Error: /api/user/delete/
Traceback (most recent call last):
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/rest_framework/views.py", line 489, in dispatch
    response = self.handle_exception(exc)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/rest_framework/views.py", line 449, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/rest_framework/views.py", line 486, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/rest_framework/generics.py", line 219, in delete
    return self.destroy(request, *args, **kwargs)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/rest_framework/mixins.py", line 93, in destroy
    self.perform_destroy(instance)
  File "/Users/user/anaconda/envs/auth_django_and_angular2/lib/python3.6/site-packages/rest_framework/mixins.py", line 97, in perform_destroy
    instance.delete()
TypeError: 'bool' object is not callable
[24/Jun/2017 14:04:42] "DELETE /api/user/delete/ HTTP/1.1" 500 15690

如何正確正確刪除帳戶?
我需要你的幫助。

嘗試像這樣編輯視圖,

try: 
    instance = self.queryset.get(email=self.request.user.email) 
    return instance 
except Account.DoesNotExist: 
    raise Http404

為什么不禁用帳戶而不是刪除帳戶?

那是我的方法。 在我的視圖類(用於擴展的UserProfile並從RetrieveUpdateDestroyAPIView繼承的視圖類)中,我覆蓋了destroy方法,如下所示:

def destroy(self, request, pk=None, **kwargs):

    request.user.is_active = False
    request.user.save()

    return Response(status=204)

我使用令牌身份驗證(使用rest_auth),並且在禁用帳戶后,令牌不再有效(嘗試使用令牌時,響應為“用戶未激活或已刪除”)。

我認為最好的做法是禁用帳戶而不是刪除帳戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM