Что такое мета подкласс в графене?
Я учусь использовать 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
Класс использует опцию модели для проверки вашей модели и автоматического создания соответствующих полей.
Надеюсь, это спасет время других людей от необходимости искать это.