标签: graphene-python

扩展 graphene/graphene_django 中的查询参数

如何向石墨烯中的 GraphQL 查询添加非字段参数?这是一个用例的示例。我希望能够做到:

{
  hsv(h: 40, s: 128, v: 54) {
    r
    g
    b
    name
}
Run Code Online (Sandbox Code Playgroud)

使用这个 Django 模型:

from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator,

class Color(models.Model):
    name = models.CharField(
        "name",
        max_length=24,
        null=False, blank=False)
    r = models.IntegerField(
        "red", null=False, blank=False,
        validators=[MinValueValidator(0), MinValueValidator(255)]
    )

    g = models.IntegerField(
        "green", null=False, blank=False,
        validators=[MinValueValidator(0), MinValueValidator(255)]
    )

    b = models.IntegerField(
        "blue", null=False, blank=False,
        validators=[MinValueValidator(0), MinValueValidator(255)]
    )
Run Code Online (Sandbox Code Playgroud)

以及这个 GraphQL 对象类型和基于它的查询:

from graphene import ObjectType, IntegerField, Field, relay
from graphene_django import DjangoObjectType

from .django …
Run Code Online (Sandbox Code Playgroud)

django-models graphql graphene-python

4
推荐指数
1
解决办法
4246
查看次数

突变-批量创建对象

我想使用石墨烯一口气创造出很多人。该文档仅提及创建这样的人的方式:

class CreatePerson(graphene.Mutation):
class Input:
    name = graphene.String()
    age = graphene.Int()

ok = graphene.Boolean()
person = graphene.Field(lambda: Person)

@staticmethod
def mutate(root, args, context, info):
    person = Person(name=args.get('name'), age=args.get('age'), mobile=args.get('mobile'))
    ok = True
    return CreatePerson(person=person, ok=ok)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以完成它吗?

graphql graphene-python

4
推荐指数
2
解决办法
1829
查看次数

自动生成用于中继的 graphql 模式(石墨烯服务器)

我是 Relay 的新手,正在尝试组合我的第一个应用程序。我已经有一个 GraphQL 服务器(使用 Graphene),它通过 SQLAlchemy 自动映射由 PostgreSQL 数据库支持,并作为 Flask 应用程序发布。现在,我正在尝试组合前端,看起来中继编译器在客户端需要一个 GraphQL 模式文件。我想知道是否有办法让这个架构文件动态自动生成,以及如何设置。

我使用https://github.com/kriasoft/react-static-boilerplate作为我的应用程序的起点。

谢谢。

reactjs graphql relayjs graphene-python

4
推荐指数
1
解决办法
2071
查看次数

使用 Graphene 和 SQLAlchemy 通过 GraphQL API 更新记录

我正在使用 Python 包 Flask、SQLAlchemy、Graphene 和 Graphene-SQLAlchemy 构建 GraphQL API。我遵循了SQLAlchemy + Flask 教程。我能够执行查询和更改来创建记录。现在我想知道更新现有记录的最佳方法是什么。

这是我当前的脚本schema.py

from graphene_sqlalchemy import SQLAlchemyObjectType
from database.batch import BatchOwner as BatchOwnerModel
import api_utils  # Custom methods to create records in database
import graphene


class BatchOwner(SQLAlchemyObjectType):
    """Batch owners."""
    class Meta:
        model = BatchOwnerModel
        interfaces = (graphene.relay.Node,)


class CreateBatchOwner(graphene.Mutation):
    """Create batch owner."""
    class Arguments:
        name = graphene.String()

    # Class attributes
    ok = graphene.Boolean()
    batch_owner = graphene.Field(lambda: BatchOwner)

    def mutate(self, info, name):
        record = {'name': name}
        api_utils.create('BatchOwner', …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy graphql graphene-python

4
推荐指数
1
解决办法
3692
查看次数

如何使用graphene-django上传和下载文件?

我目前使用的是graphene-django v2.0,我对如何上传和下载图像等文件一无所知,有没有人举过一个查询示例,您可以在其中下载图像,也可以在变量中上传一?

django file-transfer graphql graphene-python

4
推荐指数
1
解决办法
2577
查看次数

Django & Graphene:如何处理多态模型的双向关系?

我有一个看起来像这样的 Django 模型(当然是简化的):

from django.db import models
from polymorphic.models import PolymorphicModel

class Tournament(models.Model):
    slug = models.CharField(max_length=100, unique=True)

class Event(PolymorphicModel):
    tournament = models.ForeignKey(Tournament, related_name='events')
    slug = models.CharField(max_length=100)

class PracticeEvent(Event):
    pass

class MatchEvent(Event):
    winner = models.CharField(max_length=100, null=True, blank=True, default=None)
Run Code Online (Sandbox Code Playgroud)

锦标赛包括两种赛事:练习赛和比赛。我想使用 GraphQL 和 Graphene 公开这个模型。这是我想出的:

import graphene
from graphene_django import DjangoObjectType

from . import models

class TournamentType(DjangoObjectType):
    class Meta:
        model = models.Tournament
        exclude_fields = ('id',)

class EventType(graphene.Interface):
    tournament = graphene.Field(TournamentType, required=True)
    slug = graphene.String(required=True)

class PracticeEventType(DjangoObjectType):
    class Meta:
        model = models.PracticeEvent
        interfaces = …
Run Code Online (Sandbox Code Playgroud)

django graphene-python

4
推荐指数
1
解决办法
2132
查看次数

Django 中的 GraphQL 查询返回 None

我正在尝试在 django 中使用 graphQL 查询。基本上我有两个应用程序,我的“api”应用程序包含我进行查询所需的一切,另一个称为“前端”,我从中调用 api 以使用这些查询。

我可以使用 GraphQL 视图在其中键入查询并且它运行良好,但是每当我尝试进行查询时,我都会得到以下信息:“OrderedDict([('users', None)])”

我在 GraphQl 视图中的查询结果

编码:

在“api”中,我的schema.py

import graphene
import graphql_jwt
from graphene import relay, ObjectType, AbstractType, List, String, Field,InputObjectType
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from datetime import date, datetime
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model

....

class Query(graphene.ObjectType):
    me = graphene.Field(UserType)
    users = graphene.List(UserType)
    profile = relay.Node.Field(ProfileNode)
    all_profiles = DjangoFilterConnectionField(ProfileNode)

    def resolve_users(self, info):
        ### Returns all users ###
        user = info.context.user
        if user.is_anonymous: …
Run Code Online (Sandbox Code Playgroud)

python django graphql graphene-python

4
推荐指数
1
解决办法
1438
查看次数

mongoengine 连接和多个数据库

我有 2 个要查询的数据库,但我只能从其中一个获得结果。我将 mongoengine 与 python 和石墨烯一起使用(这是我的第一次)。我已经用尽了我的搜索,我不明白如何解决这个问题。这是我的代码:

import graphene
from mongoengine import Document, connect
from mongoengine.context_managers import switch_collection
from mongoengine.fields import (
    StringField,
    UUIDField,
    IntField,
    FloatField,
    BooleanField,
)
from graphene_mongo import MongoengineObjectType
from mongoengine.connection import disconnect


class UserModel(Document):
    meta = {"collection": "users"}

    userID = UUIDField()
    first_name = StringField()
    last_name = StringField()


class Users(MongoengineObjectType):
    class Meta:
        model = UserModel


class UsersQuery(graphene.ObjectType):
    users = graphene.List(Users)
    user = graphene.Field(Users, userID=graphene.UUID())

    def resolve_users(self, info):
        db = connect("users")
        users = list(UserModel.objects.all())
        db.close()
        return users

    def …
Run Code Online (Sandbox Code Playgroud)

mongodb mongoengine graphene-python

4
推荐指数
1
解决办法
3059
查看次数

有没有办法让石墨烯与 django GenericRelation 字段一起使用?

我有一些 django 模型通用关系字段,我希望它们出现在 graphql 查询中。石墨烯支持通用类型吗?

class Attachment(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    file = models.FileField(upload_to=user_directory_path)
Run Code Online (Sandbox Code Playgroud)
class Aparto(models.Model):
    agency = models.CharField(max_length=100, default='Default')
    features = models.TextField()
    attachments = GenericRelation(Attachment)
Run Code Online (Sandbox Code Playgroud)

石墨烯类:

class ApartoType(DjangoObjectType):
    class Meta:
        model = Aparto
Run Code Online (Sandbox Code Playgroud)
class Query(graphene.ObjectType):
    all  = graphene.List(ApartoType)
    def resolve_all(self, info, **kwargs):
        return Aparto.objects.all()

schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)

我希望附件字段出现在 graphql 查询结果中。仅显示代理和功能。

python django graphql graphene-python

4
推荐指数
1
解决办法
1291
查看次数

石墨烯 django 端点是否同时需要 X-Csrftoken 和 CsrfCookie?

使用:

\n\n
    \n
  • Django 3.x [ Django 过滤器 2.2.0、graphene-django 2.8.0、graphql-relay 2.0.1 ]
  • \n
  • Vue 2.x [Vue-阿波罗]
  • \n
\n\n
\n\n

我正在使用 Django、GraphQL 和 Vue-Apollo 测试单页 vue app\xc2\xb4s。

\n\n

如果我csrf_exempt在我的视图中使用,一切都会在前端运行。

\n\n
urlpatterns = [\n<...>\n   path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))),\n<...>\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想要 CSRF 保护我的请求。\n在理解 CSRF 保护的过程中,我认为 DjangoGraphQLView所需要的只是接收X-Csrftoken请求标头中的“值”。所以我专注于csrf以不同的方式发送值......通过像这样的单一视图

\n\n
path(\'csrf/\', views.csrf),\npath("graphql", GraphQLView.as_view(graphiql=True)),\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者通过确保 cookieensure_csrf_cookie

\n\n

然后在我的ApolloClienti 中获取这些 Value 并将其与请求 Header 一起发回。

\n\n

这是当我从 Django-Vue 页面发送 GraphQL 请求时 Django 打印的内容。

\n\n
Forbidden (CSRF token missing or …
Run Code Online (Sandbox Code Playgroud)

django graphql graphene-python vue-apollo graphene-django

4
推荐指数
1
解决办法
2802
查看次数