我正在尝试从Django后端向我的前端发送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或浏览器调用时,视图中的print语句确实会打印我放入其中的任何随机内容,但是当我使用request.user.username时,它不会打印任何内容。 并且每次响应代码为200
我在做什么错了。
答案 0 :(得分: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})
答案 1 :(得分:0)
在浏览器中,您的登录信息将在会话中被记住。使用邮递员或Angular时,您需要在请求标头中手动提供用户信息。