如何使用邮递员测试 Django REST 框架登录保护 API?

Posted

技术标签:

【中文标题】如何使用邮递员测试 Django REST 框架登录保护 API?【英文标题】:How to test Django REST Framework Login Protected API using postman? 【发布时间】:2018-11-15 20:01:57 【问题描述】:

我需要使用 postman 测试 REST API。 API 是使用 Django REST 框架构建的。只有登录用户才能访问 API。我无法找到如何使用邮递员发送登录凭据。提前致谢。

class ApiMemberGroupNameList(views.APIView):
    permission_classes = (
        permissions.IsAuthenticated,
        RequiredOrgPermission,
        RequiredOrgStaffMemberPermission)

    def get(self, request, **kwargs):
        pk = kwargs.get('pk')
        hash = kwargs.get('hash')
        member_obj = get_object_or_404(Member.objects.filter(org__hash=hash, pk=pk))
        return Response(GroupListSerializer(member_obj.groups.all(), many=True).data)

【问题讨论】:

通过 Postman 将登录详细信息与发布请求一起发送到您的登录 URL。我不知道您的身份验证是如何工作的,但是您的 API 应该返回某种访问令牌,您可能可以使用它来访问 API 的其余部分 从@Snackoverflow 继续,那么您应该可以使用***.com/questions/40539609/… 之类的访问令牌 身份验证不是令牌基础。这是使用用户名和密码的正常 Django 身份验证。我们可以通过浏览器发送到服务器的方式发送 cookie 信息。 【参考方案1】:

如果你想使用 Basic Authentification 来测试 Django REST API,必须在 Django REST Framework 设置中允许:

'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
...

【讨论】:

【参考方案2】:

您可以在 POSTMAN 中使用Basic Auth。参考这个截图:

您可以在 POSTMAN 控制台中更改 HTTP MethodsURLsData Payload(在 Body 选项卡下)等

UPDATE-1

在你的 cmets 之后,我试图重现问题。我所做的是:

    创建了一个视图

    from rest_framework.views import APIView
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.response import Response
    
    class MySampleView(APIView):
        permission_classes = (IsAuthenticated,)
    
    def get(self, request):
        return Response(data="status": True)
    

    添加到urls.py

    urlpatterns = [
                  url(r'^mysampleview/$', MySampleView.as_view())
                  ]
    

我的 POSTMAN 回复如下:

Authorization Screenshot

Header Screenshot

我的结论

您可能输入了错误的凭据或其他内容。我建议您打开一个新的 POSTMAN 选项卡并重复该过程,同时尝试使用 POSTMAN 中已使用的相同凭据登录 Django 管理员

【讨论】:

我试过这个,但它不起作用。通常,Django 通过会话和 cookie 来验证经过身份验证的用户。 你能添加你各自的view.py吗? 彼得我已经添加了有问题的视图。 好像您只在views 中添加了permission_classes。您是否在设置中添加了任何其他身份验证方法? 不,我没有在设置中使用任何其他身份验证模型。即使我删除了除 IsAuthenticated 之外的权限类。我仍然面临同样的问题。

以上是关于如何使用邮递员测试 Django REST 框架登录保护 API?的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest 框架邮递员令牌认证

如何在 Django REST 框架可浏览 API 中发送标头

如何测试使用邮递员提供 .zip 文件的 REST API?

django rest框架在序列化程序创建方法中获取请求

如何修复在 Django Rest Framework 中使用 REST API 登录时出现的 CSRF 错误?

Django rest框架认证测试