我有基于 REST API 的 Django Web 项目。我的目标是创建视图并向我的 API 发送请求。在许多查询中,我应该传递身份验证凭据,并且当我使用默认的 Django 身份验证系统时,我需要传递令牌和会话 ID。所以现在查询是使用请求库完成的,如下所示:
#function to create full url for api
def create_api_request_url(request, reverse):
return 'http://' + request.get_host() + reverse
#getting csrftoken and session id, return cookies and header, need for authorization
class CookieManager:
@staticmethod
def get_auth_credentials(request):
ses_id = request.session.session_key
token = get_token(request)
cookies = {'csrftoken': token,
'sessionid': ses_id}
headers = {'X-CSRFToken': token}
return {'cookies': cookies, 'headers': headers}
def some_view(request, pk):
...
#create full api url
url = create_api_request_url(request, reverse('Shopping Cart API:Cart'))
#collect auth credentials from request object
credentials = CookieManager.get_auth_credentials(request)
#make request using import requests, provided data and auth credentials
requests.post(url, {"amount": product_amount, "product": pk}, **credentials)
所以我需要进入这么多步骤并使用我自己的自定义函数来发送请求。获取请求背后的另一个问题,例如从获取请求中收集数据我需要确保请求是正确的,首先我需要检查状态代码但它不能保证请求是正确的,它可能会在运行时抛出异常,所以我应该再做一次这样的事情:
url = create_api_request_url(request, reverse('Product API:Product Details', kwargs={'pk': pk}))
product_response = requests.get(url)
#product_response can be null or throw exception (for example if url is not valid or disabled)
if product_response.status_code == 200:
product = product_response.json()
我不确定这是处理请求的好方法。此外,我不仅对可以使用 reverse() 访问的项目中的 URL 感兴趣,而且对第三方 URL 也感兴趣。请使用“Django”方法建议更好的方法或资源与有关此主题的信息。