我正在使用Django构建API,我想查询Github GraphQL API,然后找到了GraphQL client个适合我需求的python。
但是现在,我想知道,在我的Django应用程序中初始化此类客户端的适当位置在哪里?里面的要求?在apps.py中?在views.py中?任何指导方针将不胜感激!这是我当前的Django Project文件夹结构:
.
├── LICENSE
├── README.md
├── api
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── portfolio
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── requirements.txt
└── setup.py
谢谢!
答案 0 :(得分:1)
根据定义,graphql客户端需要它自己的配置,模块和错误处理,我建议您创建一个与其他项目相邻的名称空间。 Django使用Applications的概念,它为这种情况提供了单独的配置,日志记录和错误处理。您可以在settings.py
(Docs)的INSTALLED_APPS
中定义项目中的其他应用程序。您的项目结构将如下所示:
.
├── LICENSE
├── README.md
├── graphql-client
│ ├── __init__.py
│ ├── main.py
│ ├── client.py
│ ├── ressources
│ │ ├── __init__.py
│ ├── ├── repository.py
│ │ └── user.py
│ ├── settings.py
│ └── views.py
├── api
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── portfolio
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── requirements.txt
└── setup.py
答案 1 :(得分:1)
TLDR :在视图方法中实例化 新客户端 =每个请求的新客户端。 (不错的选择-覆盖initial
视图方法)。以后再改善。
要视情况而定。
如果没有客户端的请求/用户选项(=每个请求/用户的客户端相同 ):
按照@ ElPapi42的建议从子模块中导入一个(=与全局实例化views.py中的新客户端相同,而不是方法逻辑的一部分)
或在视图方法中实例化新客户端-每个请求的新客户端
如果有请求/用户特定的选项(即客户端需要具有request.user
个特定的选项/凭据):
选项1-每个工作人员视图实例化一次客户端。尽管它提供了一些性能优势,但它们却微妙而模糊:
实际上,您可能希望使用某些当前的request.user
特定选项连接到github,执行多个请求(=可能涉及cookie并在后续请求中自动添加=>客户端不能与多个用户共享)=每个用户至少要有一个单独的客户端。
答案 2 :(得分:0)
我最终在名为/api
的{{1}}应用程序中创建了一个python模块,该模块初始化了graphql客户端。从这里,它很容易导入。
我决定不为此创建一个单独的Django应用程序,因为由于代码的简单性,在这种情况下这会显得过高:
在graphql.py
中:
graphql.py