繁体   English   中英

适用于Django项目的简单Python API

[英]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 Framework这样的东西是否合适。 我只需要登录用户,然后“确认”用户的两个URL /视图就已登录并传递回所需的数据。

您可以考虑使用JWT。 一个端点/api/login/将在有效负载中使用usernamepassword来认证用户并返回JWT。 智威汤逊可以包含一个pkpk ,使其简单现在)的用户(如果你需要更多的)的。 其他端点(例如/api/list_data//api/get_data//api/data/123/将需要具有JWT jwt.from.api_login的Authorization标头。 它将对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 Framework(以及restframework jwt)可能会有所帮助,但您自己可能会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM