[英]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/
将在有效负载中使用username
和password
来认证用户并返回JWT。 智威汤逊可以包含一个pk
( pk
,使其简单现在)的用户(如果你需要更多的)的。 其他端点(例如/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.