Django 中的 GraphQL 查询返回 None

2024-01-02

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

我可以使用 GraphQL 视图在其中输入查询,并且效果很好,但每当我尝试进行查询时,我都会得到:“OrderedDict([('users', None)])”

我在 GraphQl 视图中查询的结果 https://i.stack.imgur.com/1Jzsb.png

代码:

在“api”我的模式.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:
            raise Exception('Not logged!')
        if not user.is_superuser:
            raise Exception('premission denied')
        return User.objects.all()

    def resolve_me(self, info):
        ### Returns logged user ###
        user = info.context.user
        if user.is_anonymous:
            raise Exception('Not logged!')
        return user

    def resolve_all_profiles(self, info, **kwargs):
        ### Returns all profiles ###
        return Profile.objects.all()

.....

def execute(my_query):
    schema = graphene.Schema(query=Query)
    return schema.execute(my_query)

And the views.py在我的应用程序前端调用应用程序“api”:

from django.shortcuts import render
import graphene
from api import schema
from django.contrib.auth import authenticate


def accueil(request):

    if request.user.is_authenticated:
        check = "I am logged"
    else:
        check = "I am not logged"

    result = schema.execute("""query {
                                users {
                                    id
                                    username
                                }
                            }""")

    return render(request, 'frontend/accueil.html', {'result' : result.data, 'check' : check})

模板:

<h1>OTC</h1>
<p> the users are : {{result}}</p>
<br/>
<p>{{check}}</p>
<a href="{%url 'login'  %}">login</a>
<a href="{%url 'logout' %}">logout</a>

最后:

网页结果 https://i.stack.imgur.com/XUvvv.png

以及控制台中的错误:

An error occurred while resolving field Query.users
Traceback (most recent call last):
  File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executor.py", line 311, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executors/sync.py", line 7, in execute
    return fn(*args, **kwargs)
  File "/home/victor/poc2/poc2/api/schema.py", line 67, in resolve_users
    user = info.context.user
AttributeError: 'NoneType' object has no attribute 'user'
Traceback (most recent call last):
  File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executor.py", line 330, in complete_value_catching_error
    exe_context, return_type, field_asts, info, result)
  File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executor.py", line 383, in complete_value
    raise GraphQLLocatedError(field_asts, original_error=result)
graphql.error.located_error.GraphQLLocatedError: 'NoneType' object has no attribute 'user'

除非您正在编写测试客户端,否则您可能应该not正在打电话schema.execute从 Django 视图内部。但假设您有这样做的理由,您的具体问题是您在调用时没有传递用户schema.execute in accueil view.

看看执行文档 https://github.com/graphql-python/graphene/blob/master/docs/execution/execute.rst你会发现你需要为上下文提供一个可选参数。您的代码没有提供上下文,因此info.context is None,根据你的例外情况。不幸的是,这个例子

result = schema.execute('{ name }', context_value={'name': 'Syrus'})

不是 Django 特定的。但我认为 Django 功能视图中起作用的是:

result = schema.execute(query, context_value=request)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 中的 GraphQL 查询返回 None 的相关文章

随机推荐

  • 按钮.Visible = true;在功能内激活时无法将按钮设置为可见

    我找不到其他人遇到同样的问题 所以希望有人能有一些想法或能够向我指出另一个答案 当通过按下表单上的按钮来运行函数时 另一个按钮应该变得可见 然而 即使按钮是函数中的第一个按钮 它也永远不会显示 该函数中的所有其他代码都可以完美运行 这是代码
  • 什么是元数据?它在android中有什么用

    我是 Android 新手 之前没有见过或听说过元数据 然而我用谷歌搜索并在 YouTube 上搜索它 它基本上是你的对象的信息 如果我错了请纠正我 任何人都可以帮助我以更好的方式理解它 1 什么是元数据 2 为什么在Android中使用它
  • jQuery 中是否有 $.each 函数的条件循环

    我有一个关于 jQuery 的疑问 each方法 下面是我的ajax 它运行得很好 ajax url js people json js type post dataType json success function data each
  • 如何使用文本样式创建像 stackoverflow 这样的标签

    我想知道如何在输入字段 例如 stackoverflow 的标记系统 内创建 css 样式 当您单击标签时 文本将被设置样式 而且 当您单击样式标签时 它会再次正常 我想我主要关心的是如何在输入字段内设置文本样式 Thanks 标签不是输入
  • Office 365 Rest API - 守护程序周身份验证

    我正在尝试建立一个Ruby用于访问 Office 365 Rest API 的守护程序服务 最近可以通过 OAuth client credentials 流程来做到这一点 如本博客文章所述 https learn microsoft co
  • 为没有 ZeroMQ 绑定的语言创建 IPython 的语言内核

    有some http andrew gibiansky com blog ipython ipython kernels 有趣的描述 https stackoverflow com questions 22782028 ipython la
  • OpenGL ES 2.0 中许多具有不同纹理的对象

    我是 OpenGL ES 2 0 的新手 它具有可编程管道 并且我正在移植使用不同纹理渲染许多对象的应用程序 那么这将需要为每个对象调用 glDrawArrays 并在调用之间更改纹理 或者还有另一种方法可以通过单个 glDrawArray
  • 沿着一列将 DataFrame 从长到宽重塑

    我正在寻找一种将下面的表 A 显示重新配置为表 B 的方法 Table A type x1 x2 x3 A 4 6 9 A 7 4 1 A 9 6 2 B 1 3 8 B 2 7 9 转化为表B type x1 x2 x3 x1 x2 x3
  • UTF-8 与 UTF-16 和 UTF-32 转换混淆

    我对将 unicode 字符转换为十六进制值感到有点困惑 我正在使用这个网站来获取字符的十六进制值 https www branah com unicode converter https www branah com unicode co
  • 如何授予自己对本地 SQL Server 实例的管理员访问权限?

    我将 SQL Server 2008 R2 安装到本地计算机上 但是 由于权限 或缺乏 我无法创建新数据库 创建数据库权限被拒绝 因此 我尝试将管理员权限分配给我当前的登录名 用户无权执行此操作 我还尝试创建一个具有管理员权限的新登录名 但
  • 在 macOS Mojave 上的 Mac App Store 中打开开发者页面

    新的 Mac App Store 提供了一个开发者页面 我想从我的应用程序中链接到此页面 怎么能做到这一点呢 我知道我可以打开单个应用程序 Mac App Store 甚至显示了 复制链接 选项 但开发人员页面没有此选项 这可能吗 我终于弄
  • Axios post 为对象添加额外的键

    我尝试用 axios 发布一个对象 我需要它的格式如下 var dataObj username username password password data1 data1 当我在后端使用 axios 和 catch 发布它时 它会向对象
  • 计算向量中每 n 个值的平均值

    假设我有一个向量 a lt rnorm 6000 我想计算第 1 个值到第 60 个值的平均值 然后再次计算第 61 个值到第 120 个值的平均值 依此类推第四个值 所以基本上我想计算每 60 个值的平均值 从而从该向量中得到 100 个
  • 在编辑器中保存然后刷新浏览器快捷方式命令

    我想要一个热键来在 Notepad 中保存全部 然后切换到浏览器并刷新页面 我每天必须这样做数千次 并执行 全部保存 热键 然后按 Alt Tab 到右侧窗口 然后按 F5 一次又一次地刷新 一定有更好的解决方案吗 如果有其他编辑器可以做到
  • Python将音频添加到视频opencv

    我使用 python cv2 模块将 jpg 帧加入视频中 但无法向其中添加音频 是否可以在没有 ffmpeg 的情况下在 python 中向视频添加音频 附 抱歉我的英语不好 使用ffpyplayer来处理音频部分 import cv2
  • Java 泛型的转换很奇怪[重复]

    这个问题在这里已经有答案了 我正在使用java 8 我最近遇到了这个 public class Test public static void main String args String ss Test
  • 如何修复或纠正 IntelliJ Idea 中的“默认文件模板”警告

    IntelliJ理念 2016 1 Windows 10 专业版 当我在新项目中创建新项目或新类时 IntelliJ 会帮助包含一个包含我的姓名和日期的默认标头 但是 它还会突出显示代码并显示有关使用 默认文件模板 的文件的警告 它建议了两
  • 如何禁用“href”属性的默认 行为?

    我有一个像这样的简单侧边栏 div class sidebar ul class nav li class Page1 a href Page1 html Page1 a li li class Page2 a href Page2 htm
  • 如何列出迄今为止正在使用或创建的所有 Hive 数据库?

    如同SHOW TABLES命令 我们是否有这样的命令来列出迄今为止创建的所有数据库 这一页 https cwiki apache org confluence display Hive LanguageManual DDL提到命令SHOW
  • Django 中的 GraphQL 查询返回 None

    我正在尝试在 django 中使用 graphQL 查询 基本上我有两个应用程序 一个是我的 api 应用程序 其中包含进行查询所需的所有内容 另一个是 前端 应用程序 我从中调用 api 来使用这些查询 我可以使用 GraphQL 视图在