0

我有基于 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”方法建议更好的方法或资源与有关此主题的信息。

4

0 回答 0