繁体   English   中英

Django 中的 Jsonresponse 在浏览器中工作,但不在 PostMan 或 Angular 中

[英]Jsonresponse in Django working in browser but not in PostMan or 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/时,我在 web 页面上收到{"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

我究竟做错了什么。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM