在 Django Rest Framework 中测试经过身份验证的路由的 POST 请求

阿迪亚·马哈詹

我想测试一个需要身份验证的路由的 post 请求(来自 Django Rest Framework 的 Knox)。这里的 post 请求应该针对登录用户。

以下是urls.py

path('cards', addCard.as_view(), name="cards"),

以下是addCard视图

class addCard(generics.ListCreateAPIView):
    serializer_class = CardSerializer
    permission_classes = [permissions.IsAuthenticated, IsOwnerOrNot]

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        card = serializer.save(owner=self.request.user)
        return Response({'card': CardSerializer(card, context=self.get_serializer_context()).data,})

    def get_queryset(self):
        return self.request.user.cards.order_by('-id')

以下是测试用例,我使用了这个答案,我收到了 401!=201 错误,显然是未经授权的用户。

class addCardAPIViewTestCase(APITestCase):
    url = reverse("cards")

    def setUp(self):
        self.username = "john"
        self.email = "[email protected]"
        self.password = "you_know_nothing"
        self.user = get_user_model().objects.create_user(self.username,
                                                     self.password)

        self.token = Token.objects.create(user=self.user)

    def test_create_cards(self):

        client = APIClient()
        client.login(username=self.username,
                 password=self.password)
        client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)

        response = client.post(self.url,{
            "bank": "Citibank",
            "card_number": "5618073505538298",
            "owner_name": "c1",
            "cvv": "121",
            "expiry_date_month": "03",
            "expiry_date_year": "2023"
        },format='json')

        self.assertEqual(response.status_code, 201)
JPG

使用 client.force_authenticate(...)

class addCardAPIViewTestCase(APITestCase):
    # Rest of your code
    def test_create_cards(self):
        self.client.force_authenticate(self.user)
        response = self.client.post(self.url, {
            "bank": "Citibank",
            "card_number": "5618073505538298",
            "owner_name": "c1",
            "cvv": "121",
            "expiry_date_month": "03",
            "expiry_date_year": "2023"
        }, format='json')

        self.assertEqual(response.status_code, 201)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django REST Framework:使用列表测试POST请求时出错

如何从 Django Rest Framework 接收 POST 请求?

如何在Django中使用Pytest测试经过身份验证的POST请求

Django Rest Framework不会像标准POST请求那样对Multipart请求中的JSON字段进行解码

从Django Rest Framework中的令牌获取经过身份验证的用户

无法获得对 Django Rest-framework 的 APIView 的 POST 请求的响应

在 Django REST Framework 中更新/放置请求

在 Django Rest Framework 中处理来自可浏览 API 的 POST 请求查询参数

使用JWT令牌在Django Rest Framework中对POST请求的未经授权的响应

在Django Rest Framework中覆盖POST的响应

django-rest-framework中的JWT身份验证问题

如何在Django REST Framework中禁用身份验证

Django REST Framework 测试:如何将参数传递给 POST 请求。得到错误 400 而不是 201

使用Django Rest Framework,JWT和Vuejs获取经过身份验证的用户信息

如何在 Django Rest Framework 序列化程序中访问通过 POST 请求发送的额外数据

Django Rest-Framework 验证期间,检查请求方法类型

Django-REST-Framework:验证GET请求参数?

Django rest框架验证POST请求参数的最佳方法

如何使用Django REST API验证android用户POST请求?

KeyError + POST + Django Rest Framework

django或django-rest-framework中必需的POST参数

“请求”对象在 Django Rest Framework 中没有属性“pop”?

SerializerMethodField - 从 Django Rest Framework 中的请求正文访问数据

在Django Rest Framework中的任何类型的请求之前执行操作

Django Rest Framework:默认外键为请求中的值

防止django-rest-framework中单个用户的同时请求

使用Django REST Framework作为Django的身份验证后端

在将经过身份验证的请求发送到OAuth2.0 Django rest Framwork时出现权限问题

向 Django Rest Framework 发送 PATCH 请求