django中请求的替代方案

django中请求的替代方案,django,django-views,python-requests,django-authentication,django-sessions,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 sho

在我的项目中,我试图在我的视图中点击一个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())
现在,我必须使用相同的会话(需要登录),所以当我使用
请求
点击url时,它会抱怨用户没有登录,这显然是正确的

我怎样才能优雅高效地完成这项工作。已登录用户的会话使用。(我不想将视图作为函数调用,我想点击api url端点并使用它


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

中也有类似的功能,只需调用view函数并将
请求
对象作为参数传递给它即可

@login_required
def show_info(request):
    r = my_api_view(request)
    return HttpResponse(r.json())
或者更好的选择是简单地将逻辑分离成一个单独的函数,正如@koniiik在评论中提到的那样

编辑:或者如果您真的想点击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())

为什么你要尝试使用HTTP而不是直接调用另一个视图函数?或者更好,为什么不将逻辑分解成一个单独的函数/方法/两个视图将调用的任何东西?@Wendy-看看编辑。也许这会对你有所帮助。