我正在尝试学习django,所以当我有一个当前的解决方案时,我不确定它是否遵循django中的最佳实践.我想在我的网站上显示来自网络API的信息.假设api url如下:
http://api.example.com/books?author=edwards&year=2009
Run Code Online (Sandbox Code Playgroud)
Thsis将返回Edwards于2009年撰写的书籍清单.返回以下格式:
{'results':
[
{
'title':'Book 1',
'Author':'Edwards Man',
'Year':2009
},
{
'title':'Book 2',
'Author':'Edwards Man',
'Year':2009}
]
}
Run Code Online (Sandbox Code Playgroud)
目前我正在使用我的视图文件中的API,如下所示:
class BooksPage(generic.TemplateView):
def get(self,request):
r = requests.get('http://api.example.com/books?author=edwards&year=2009')
books = r.json()
books_list = {'books':books['results']}
return render(request,'books.html',books_list)
Run Code Online (Sandbox Code Playgroud)
通常,我们从models.py文件中的数据库中获取数据,但我不确定是否应该在models.py或views.py中获取此API数据.如果它应该在models.py中,有人可以举例说明如何做到这一点吗?我特意为stackoverflow编写了上面的例子,所以任何bug都纯粹是在这里编写它的结果.
我想使用请求库从我的Django TemplateView进行多个内部REST API调用.现在我想将会话也从模板视图传递到api调用.建议的方法是什么,记住性能.
现在,我正在模板视图中cookie从当前request对象中提取,并将其传递给requests.get()或requests.post()调用.但问题是,我必须将request对象传递给我的API客户端,这是我不想要的.
这是我用来路由我的请求的当前包装器:
def wrap_internal_api_call(request, requests_api, uri, data=None, params=None, cookies=None, is_json=False, files=None):
headers = {'referer': request.META.get('HTTP_REFERER')}
logger.debug('Request API: %s calling URL: %s', requests_api, uri)
logger.debug('Referer header sent with requests: %s', headers['referer'])
if cookies:
csrf_token = cookies.get('csrftoken', None)
else:
csrf_token = request.COOKIES.get('csrftoken', None)
if csrf_token:
headers['X-CSRFToken'] = csrf_token
if data:
if is_json:
return requests_api(uri, json=data, params=params, cookies=cookies if cookies else request.COOKIES, headers=headers)
elif not files:
return requests_api(uri, data=data, params=params, …Run Code Online (Sandbox Code Playgroud) 有没有办法从django视图进行RESTful api调用?
我试图从django视图传递URL和参数.我在半小时内谷歌搜索,但找不到任何有趣的东西.
任何帮助,将不胜感激
我一直在构建一个Django应用程序,它使用来自类似REST的API的数据.API是使用.NET构建的(yuck!不是我的选择),因为我宁愿挖出我的眼球而不是学习Microsoft工具(我是*nix/OSX人),因为我不想要前端为了影响API,反之亦然,我选择在另一台服务器上使用Django构建前端.
Django站点充当主DB/API和最终用户之间的中间人.来自API的数据都没有保存在Django站点中,它只是以一种很好的人类可读格式重新格式化/显示所述数据.现在我已经构建了我的API客户端和我的所有视图,我希望创建一个报表生成器.
是否有任何可以创建Transitory Models来代表API调用对象的应用程序?我希望能够创建从API接收的JSON/XML数据之间的关系,但不需要复制我的Django站点中的DB结构,这将是多余的.
最终目标是能够让用户根据来自数据API的请求创建/保存自定义过滤报告.任何建议将不胜感激.(请不要回复"只是在Django中复制模型,并插入从API中检索的数据".这完全会使DB/API在与前端不同的服务器上运行完全无效.
注意 - 我已经看过neithere的Dark,但由于缺少文档,并且缺少关于'docu'库的文档,我真的不知道它对我有什么好处.如果你有任何如何使用它们来解决这个问题的例子,请告诉:)