【问题标题】:Jsonresponse in Django working in browser but not in PostMan or AngularDjango 中的 Jsonresponse 在浏览器中工作,但不在 PostMan 或 Angular 中
【发布时间】:2020-07-31 02:54:34
【问题描述】:

我正在尝试从 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": ""
}

与 Angular 相同

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

我做错了什么。

【问题讨论】:

    标签: django django-rest-framework postman


    【解决方案1】:

    当您发送请求时,您并未提供身份验证凭据(即用于识别发送请求的用户的信息)。您如何获得此凭据?

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

    API 视图:

    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})
    

    【讨论】:

      【解决方案2】:

      当它在浏览器中时,您的登录信息会在会话中被记住。使用 postman 或 Angular 时,需要手动在请求头中提供用户信息。

      【讨论】:

      • 但是,我正在通过获取请求请求信息以到达前端,当我没有它时如何在标题中提供用户信息
      猜你喜欢
      • 2021-09-18
      • 2018-05-30
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多