[英]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.