django中请求的替代方案
在我的项目中,我试图在我的视图中点击一个url(在同一个项目中运行) 所以我可以用最简单的方式在这里解释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
@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-看看编辑。也许这会对你有所帮助。