django - 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
我究竟做错了什么。
解决方案
当您发送请求时,您没有提供身份验证凭据(即识别发送请求的用户的东西)。您如何获得此凭证?
您需要建立一种身份验证方法。有几个,但我建议使用 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})
推荐阅读
- android-studio - 为什么 Android Studio 不显示小部件的可能属性?
- c# - 反序列化 RSA 公钥和私钥 C#
- node.js - MongoDB 的聚合 $search 没有提取任何结果
- node.js - 尝试使用节点安装 graphql 包
- html - 单选按钮不会检查引导按钮组
- python - RSS 提要手动解析图像?
- python - Pandas - 用阈值拾取行和列
- mysql - 您不能在 FROM 子句中指定目标表“人”进行更新
- python - Python/OpenCV — 细菌图像中的智能质心跟踪?
- ruby-on-rails - 使用 devise gem 设置用户后,如何在 Rails 上创建帖子?