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())
在我的项目中,我试图在我看来点击 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())