Что такое мета подкласс в графене?

Я учусь использовать GraphQL и Python. Я нашел проект graphene вместе с расширениями SQLAlchemy и Flask. Я читал учебные пособия и документы, и мне трудно понять, что class Meta используется для определения схемы. В настоящее время я следую этому уроку. Я погуглил и не могу ничего найти.

Вот некоторый код из учебника. Я прокомментировал строку, которая меня смущает.

из graphene_sqlalchemy import SQLAlchemyObjectType из database.model_people import ModelPeople
import graphene


# Создайте универсальный класс для согласования описания атрибутов людей как для запросов, так и для класса мутаций PeopleAttribute:
    name = graphene.String(description="Name of the person.")
    height = graphene.String(description="Рост человека.") Mass = graphene.String (description = "Масса человека.") Hair_color = graphene.String(description="Цвет волос человека.") Skin_color = графен. String (description = "Цвет кожи человека.") Eye_color = graphene.String(description="Цвет глаз человека.") Birth_year = graphene.String (description = "Год рождения человека.") Пол = графен.String (description = "Пол человека.") Planet_id = graphene.ID(description="Глобальный идентификатор планеты, с которой человек происходит.") Url = graphene.String(description="URL-адрес человека в API Звездных войн. ") Класс People(SQLAlchemyObjectType, PeopleAttribute):
    """ Узел People."""

    # ---------- Для чего используется этот класс? Какая часть колбы + графена + sqlalchemy экосистема использует это? класс Meta:
        model = ModelPeople
        interfaces = (graphene.relay.Node,)

0 ответов

Я в той же лодке, что и ты. Возможно, немного поздно для вас, но для всех, кто сталкивался с таким же вопросом, это то, что я обнаружил, когда изучал GraphQL и Graphene.

Я был смущен о подклассе Meta класс также. Это то, что говорится в документации.

Графен использует внутренний класс Meta в ObjectType для установки различных параметров.

https://docs.graphene-python.org/en/latest/types/objecttypes/

Мета-класс, по сути, позволяет вам изменять / модифицировать атрибуты класса. Например, вы можете изменить имя того, как вы будете запрашивать этот конкретный класс, установив name = <short name of class>,

По умолчанию имя типа в схеме GraphQL будет таким же, как имя класса, которое определяет ObjectType. Это можно изменить, установив свойство name в классе Meta:

Пример, который они используют, это..

from graphene import ObjectType

class MyGraphQlSong(ObjectType):
    class Meta:
        name = 'Song'

Поэтому вместо того, чтобы запрашивать "MyGraphQlSong", вы можете запросить его через "Песню".

Вы также можете добавить другие вещи, такие как Description, и интерфейсы, от которых должен наследоваться ваш родительский класс (все описано в ссылке выше).

Полный список атрибутов, которые вы можете изменить / изменить, приведен в справочнике по API (это относится к ObjectType. Другие типы имеют другие параметры мета-класса. Это объясняется более подробно здесь. https://docs.graphene-python.org/en/latest/api/

Meta class options (optional):

    name (str): Name of the GraphQL type (must be unique in schema). Defaults to class
        name.
    description (str): Description of the GraphQL type in the schema. Defaults to class
        docstring.
    interfaces (Iterable[graphene.Interface]): GraphQL interfaces to extend with this object.
        all fields from interface will be included in this object’s schema.
    possible_types (Iterable[class]): Used to test parent value object via isintance to see if
        this type can be used to resolve an ambigous type (interface, union).
    default_resolver (any Callable resolver): Override the default resolver for this
        type. Defaults to graphene default resolver which returns an attribute or dictionary key with the same name as the field.
    fields (Dict[str, graphene.Field]): Dictionary of field name to Field. Not recommended to
        use (prefer class attributes).

У меня были проблемы с поиском, откуда взялась модель = ... в примерах SQLAlchemy. Я не смог найти никакой документации, ссылающейся на то, что означало "модель", но я думаю, SQLAlchemyObjectType это подкласс ObjectType, SQLAlchemyObjectType добавил несколько своих "опций", которые на самом деле не документированы (насколько я могу судить). Я пошел и прочитал исходный код и, конечно же, нашел эту ссылку на "модель = ..."

https://github.com/graphql-python/graphene-sqlalchemy/blob/master/graphene_sqlalchemy/types.py

SQLAlchemyObjectType Класс добавляет еще три параметра, модель, реестр и соединение. Если вы посмотрите через код model опция - это ваш класс модели SQLAlchemy. SQLAlchemyObjectType Класс использует опцию модели для проверки вашей модели и автоматического создания соответствующих полей.

Надеюсь, это спасет время других людей от необходимости искать это.

Другие вопросы по тегам