TypeError:SignInView.init() 缺少 1 个必需的位置参数:'api_response_factory'
我尝试使用抽象方法但失败了。我是 SOLID 实现的新手,也是 python 的新手,有人可以给我关于如何处理此类错误的建议或想法吗?
我必须补充一点,这是我第一次在 stackoverflow 上提问
from abc import ABC, abstractmethod
from rest_framework.views import APIView
from django.http import JsonResponse
from rest_framework import status
class ApiResponseFactoryAbstract(ABC):
@abstractmethod
def success(self) -> str:
pass
class ApiResponseFactory(ApiResponseFactoryAbstract):
def success(self) -> str:
print("Testing")
return "Testing"
class SignInView(APIView):
def __init__(self, api_response_factory: ApiResponseFactoryAbstract):
self.api_response_factory = api_response_factory
def post(self, request):
data = self.api_response_factory.success()
return JsonResponse(data=data, status=status.HTTP_200_OK)
这是app/urls.py:
from django.urls import path
from . import views
router_auth = [
path("sign-in/", views.SignInView.as_view(), name="sign-in"),
]
这是行不通的:
.as_view()
将为每个请求构造一个newSignInView
对象来处理请求。但它因此不会传递对象。
幸运的是我们可以。事实上,我们可以在 initkwargs 中传递一个:
from django.urls import path
from . import views
router_auth = [
path(
'sign-in/',
views.SignInView.as_view(api_response_factory=ApiResponseFactory()),
name='sign-in',
),
]
话虽如此,我认为没有必要这样做。使用提供成功消息等实现的 mixin 可能更容易。它看起来有点像 over-engineering。