django中的请求的替代方案

时间:2016-04-28 13:58:09

标签: django django-views python-requests django-authentication django-sessions

在我的项目中,我试图在我的视图中点击一个url(在同一个项目中运行)。

所以最简单的方法我可以在这里解释一下。

@login_required
def my_api_view(request):
    if requests.method == 'GET':
        # do stuff
        return JsonResponse()

# and its url is `/api/get-info/`

另一种在api上消费的观点

@login_required
def show_info(request):
    url = get_base_url  + /api/get-info/  # http://localhost:8000/api/get-info/
    r = requests.get(url)

    return HttpResponse(r.json())

现在我必须使用相同的会话(需要登录),所以当我使用requests点击网址时,它会抱怨用户没有登录,这显然是正确的。

如何优雅高效地完成这项工作。会话使用登录用户。 (我不想将视图称为函数,我想点击api-url终点并消耗。

PS:我们在django Test self.client.get(...)

中有类似的东西

1 个答案:

答案 0 :(得分:2)

只需调用该视图函数并将request对象作为参数传递给它。

@login_required
def show_info(request):
    r = my_api_view(request)
    return HttpResponse(r.json())

或者更好的选择是简单地将逻辑分成单独的函数,如@koniiiik在评论中所述。

编辑:或者,如果您真的想要点击网址,可以直接将Cookie值传递给您提出的请求。

@login_required
def show_info(request):
    url = get_base_url  + "/api/get-info/"  # http://localhost:8000/api/get-info/
    r = requests.get(url, cookies=request.COOKIES)
    return HttpResponse(r.json())