首页 > 解决方案 > Django 中的 Jsonresponse 在浏览器中工作,但不在 PostMan 或 Angular 中

问题描述

我正在尝试从 Django 后端向我的 Angular 前端发送 JSON 响应。

当我发出请求时,我在 Postman 或 Angular 中什么也没收到,但是在浏览器中打开链接似乎返回了正确的结果

我的观点是:

@api_view(['GET'])
def my_view(request):
    print(request.user.username)
    return JsonResponse({'username': request.user.username})

当我在浏览器中打开http://127.0.0.1:8000/accounts/get_username/{"username": "aditya8010"}时,我在网页上收到 。但是当我使用 POSTMAN 发出获取请求时,我收到了

{
    "username": ""
}

与角相同

this.http.get("http://127.0.0.1:8000/accounts/get_username/").subscribe((res) => {
      
      this.username = JSON.stringify(res["username"])
      console.log(this.username,"  ", res)
    })

此代码还打印一个空的用户名字符串。

我注意到的另一件事是,当我从 POSTMAN 或浏览器调用时,我在视图中的打印语句确实打印了我放入其中的任何随机内容,但是当我使用 request.user.username 时,它​​在被 POSTMAN 调用时不打印任何内容。而且每次响应码都是200

我究竟做错了什么。

标签: djangodjango-rest-frameworkpostman

解决方案


当您发送请求时,您没有提供身份验证凭据(即识别发送请求的用户的东西)。您如何获得此凭证?

您需要建立一种身份验证方法。有几个,但我建议使用 Token authentication with knox package。基本上,您有一个端点,该端点使用用户名和密码(正常的 json 发布请求)登录用户,并且该端点返回一个令牌。此令牌用于识别用户。您在需要进行身份验证的每个请求的标头中发送此令牌。这意味着您可能应该为视图包含 IsAuthenticated 权限。在邮递员中:邮递员授权标头

接口视图:

from rest_framework.permissions import IsAuthenticated

@api_view(['GET'])
@authentication_classes([IsAuthenticated])
def my_view(request):
    print(request.user.username)
    return JsonResponse({'username': request.user.username})

推荐阅读