GrapheneDjango文件命名约定

2024-04-29 08:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将以前的Django restapi项目重新构建为GraphQL项目。现在,我的查询和突变工作正常。

我的大部分学习来自于对现有graphenedjango和graphenepython代码示例的研究。他们之间似乎有很多不一致之处。

有人建议GraphQL查询应该放在schema.py中,而突变应该放在mutation.py中。

我认为更有意义的是让这两个文件保存各自的代码: - 查询.py - 突变.py

我对Django&Python比较陌生,不过我想确保我没有违反任何约定。

对你的想法感兴趣!

罗伯特


Tags: 文件项目django代码pyrestapi示例schema
2条回答

{a1}还没有一个REST的替代方法。因此,“惯例”在我们说话的时候就产生了。在

然而,由于schema是一般定义的术语,您可以将其重命名为queries。在

这是我的项目结构:

django_proj/
    manage.py
    requirements.txt
    my_app/
        __init__.py
        migrations/
        admin.py
        schema/
            __init__.py
            schema.py     # holds the class Query. The GraphQL endpoints, if you like
            types.py      # holds the DjangoObjectType classes
            inputs.py     # holds the graphene.InputObjectType classes (for defining input to a query or mutation)
            mutations.py  # holds the mutations (what else?!)

因此,schema.py__init__)可以根据需要重命名为queries.py。这两个词之间没有太大的区别。在

我非常喜欢nik永m的回答,我编写了一些代码来从djangoshell内部生成模板结构。当我一遍又一遍地创建这些文件时,我想加强一些一致性。我把代码放在这里以防别人发现有用。在

import os

from django.conf import settings


def schema_setup(app_name):
    """
    Sets up a default schema file structure.
    """
    SCHEMA_DIRECTORY_NAME = 'schema'
    app_directory = os.path.join(settings.PROJECT_DIR, app_name)
    if not os.path.exists(app_directory):
        raise Exception("Can't find app directory {}".format(app_directory))

    schema_directory = os.path.join(app_directory, SCHEMA_DIRECTORY_NAME)
    if os.path.exists(schema_directory):
        raise Exception("Schema directory {} already exists.".format(schema_directory))

    os.makedirs(schema_directory)
    mutation_class = "{}Mutation".format(app_name.title())
    query_class = "{}Query".format(app_name.title())

    init_txt = "from .mutations import {}\nfrom .queries import {}\n".format(mutation_class, query_class)
    fields_txt = "# Insert common fields here.\nimport graphene\n"
    inputs_txt = "# Insert graphene.InputObjectType classes.\nimport graphene\n"
    mutations_txt = "# Insert graphql mutations here.\nimport graphene\n\nclass {}(graphene.AbstractType):\n    pass\n".format(mutation_class)
    queries_txt = "# Insert graphql queries here.\nimport graphene\n\nclass {}(graphene.AbstractType):\n    pass\n".format(query_class)
    types_txt = "# Insert DjangoObjectType classes here.\nimport graphene\nfrom graphene_django.types import DjangoObjectType\n"

    for fname, file_text in [("__init__.py", init_txt),
                             ("fields.py", fields_txt),
                             ("inputs.py", inputs_txt),
                             ("mutations.py", mutations_txt),
                             ("queries.py", queries_txt),
                             ("types.py", types_txt),
                             ]:
        with open(os.path.join(schema_directory, fname), "w") as output_file:
            output_file.write(file_text)
        print("Created {}".format(fname))

从Django shell内部运行,如下所示schema_setup("my_app")

注:

  • 这假设您在设置中设置了PROJECT_DIR,如PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
  • 在顶层模式中,导入如下内容from my_app.schema import MyAppQuery, MyAppMutation
  • 我在“查询”与“查询”以及“变异”与“突变”之间反复讨论,到目前为止,石墨烯文档并不一致

相关问题 更多 >