Simple Python API for Django Project



我正在开发一个(Django)网站,用户可以上传存储在"受保护"目录中的CSV文件(即不在/media/中,因此用户只能访问自己的文件)。我想编写一个 Python 包,让用户从 Python 脚本中访问他们的文件。这样做的最佳方法是什么?

这些要求基本上是:(1)用户使用他们的凭据"登录",(2)他们可以以字符串形式获取文件列表,以及(3)他们可以给出文件名并获取Pandas数据帧作为输出。

从用户的角度来看,代码可能如下所示:

import my_api
# User logs in
con = my_api.connect(user="jim", password="password")
# Print list of file names
con.list_data()
# Get pandas dataframe for "File_Name"
df = con.get_data(filename="File_Name")

我不知道像Django Rest框架这样的东西是否合适,因为我的要求有限。我只需要登录用户,然后"识别"用户的两个 url/视图登录并传回所需的数据。

您可以考虑使用 JWT。一个终结点/api/login/将采用username,并在有效负载中password对用户进行身份验证并返回 JWT。JWT 可以包含用户的pkpk,以使其暂时简单)(如果需要,还可以包含更多)。其他端点(如 /api/list_data//api/get_data//api/data/123/)需要具有带有 JWT jwt.from.api_login 的授权标头。它将解码 JWT 从其有效负载中获取用户pk,并知道哪个用户正在请求。
my_api客户端可能如下所示:

import requests

class MyApi(object):
    base_api_url = 'http://myapi.local:8000'
    _token = None
    def _login(self, token):
        self._token = token
    @property
    def _auth_header(self):
        if self._token is None:
            raise Exception('fetch the token first!')
        return {'Authorization': 'JWT {}'.format(self._token)}
    def call_login(self, username, password):
        response = requests.post(
            '/api/login/', json={
                'username': username,
                'password': password,
            }
        )
        response.raise_for_status()
        self._login(response.json()['token'])
    def call_list_data(self):
        response = requests.post(
            '/api/login/', headers=self._auth_header
        )
        response.raise_for_status()
        return response.json()

这只是我的方法 - 我不喜欢我喜欢 REST 和 JWT 的会话。
使用 Django REST 框架(以及 restframework jwt)可能会有所帮助,但你可能自己很好。

最新更新