django 中请求的替代方案

Alternative of Requests in django

在我的项目中,我试图在我看来点击 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 点击 url 时,它会抱怨用户未登录,这显然是正确的。

我怎样才能优雅高效地做到这一点。登录用户的会话使用。 (我不想将视图作为函数调用,我想点击 api-url 端点并消费。

PS: 我们在 django 测试中有类似的东西 self.client.get(...)

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

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

或者更好的选择是将逻辑简单地分离到一个单独的函数中,正如@koniiiik 在评论中提到的那样。

编辑: 或者如果您真的想访问 URL 端点,您可以简单地将 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())