我需要在我的View类的不同方法上应用不同的权限,这个类是从DRF应用程序中的APIView继承的。为了实现这个目的,我在我的View方法上使用@action装饰器。
下面是views.py代码
class UserView(APIView):
@action(methods=['post'], detail=False, permission_classes=[AllowAny])
def create(self, request):
serializer = UserRegSerializer(data=request.data)
user_service = UserService()
try:
serializer.is_valid(raise_exception=True)
serialized_data = serializer.validated_data
registered_user = user_service.create_user(serialized_data)
payload = registered_user.__dict__
response = ResponseGenerator(payload, constants.SUCCESS_KEY)
except Exception as e:
response = ResponseGenerator(e)
return Response(data={"Response": response.get_custom_response()})
我不明白我怎么能在我的www.example.com文件中访问这个方法urls.py来对抗模式'/user',这是我的urls.py代码。
urlpatterns = [
path('user', UserView.as_view()),
]
我使用ChatGPT来回答我的这个查询。它建议了一些方法来使用在www.example.com中View的as_view()方法中传递的{'post':'create'}字典对象urls.py,如下所示。
urlpatterns = [
path('user', UserView.as_view({'post':'create'})),
]
在这里它告诉我字典的key应该是http方法,用来访问url模式的方法,字典的value应该是你想要访问的url模式的方法。
但它不工作,并给我以下错误,当我试图开始我的项目后,写这段代码在我的urls.py
TypeError:APIView.as_view()接受1个位置参数,但实际给出了2个
我没有找到任何解决方案来解决我在互联网上和django的文档中遇到的问题。
1条答案
按热度按时间niwlg2el1#
我建议你使用泛型(一些方法)APIView,因为它可以被修改成一些对你的代码可伸缩性和可靠性有好处的东西。
1.使用
CreateAPIView
,你不需要为基本的创建函数进行装饰。1.如果你需要验证,写在validate函数。你的响应可能会改变。然后,你应该改变你
1.现在,在as_view()中不需要任何参数。