GraphQL在Django中的使用教程

yizhihongxing

下面是关于“GraphQL在Django中的使用教程”的完整攻略,包含两条示例说明:

1. 介绍

GraphQL是一种用于API开发的查询语言和运行时。它被归类为替代REST的API解决方案之一。它具有强大的查询语言、类型安全、自动化API文档生成、动态查询、精确响应、递归查询等优点。同时,GraphQL也可以与Django集成,使用GraphQL可以在Django项目中很好地解决API问题。

2. 安装和配置

首先,需要安装一些必要的Django和GraphQL依赖项,包括graphene-djangodjango-graphql-auth

pip install graphene-django django-graphql-auth

安装完成后需要将这些依赖项集成到Django项目中。在settings.py文件中添加以下内容:

INSTALLED_APPS = [
    ...
    'graphene_django',
    'graphql_auth',
    ...
]

MIDDLEWARE = [
    ...
    'graphql_auth.middleware.AuthenticationMiddleware',
    ...
]

AUTHENTICATION_BACKENDS = [
    'graphql_auth.backends.GraphQLAuthBackend',
    'django.contrib.auth.backends.ModelBackend',
]

接下来,我们需要将GraphQL添加到Django的URL映射中。在urls.py文件中添加以下内容:

from django.urls import path
from graphene_django.views import GraphQLView

urlpatterns = [
    path('graphql', GraphQLView.as_view(graphiql=True)),
]

现在,GraphQL已经整合到了Django项目中。现在可以开始创建GraphQL schema和resolver函数了。

3. 示例一:简单的查询

首先,要创建GraphQL schema。在schema.py文件中添加以下内容:

import graphene

class Query(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="World"))

    def resolve_hello(root, info, name):
        return "Hello " + name

schema = graphene.Schema(query=Query)

这个schema定义了一个名为hello的查询字段,它接受一个参数name,并返回一个字符串。现在可以在GraphQL Playground中测试查询了。在浏览器中输入http://localhost:8000/graphql来打开GraphQL Playground。然后在左侧的查询窗口中输入以下内容:

query {
  hello(name: "GraphQL")
}

点击"运行"按钮,应该可以看到以下结果:

{
  "data": {
    "hello": "Hello GraphQL"
  }
}

这说明GraphQL schema已经成功地在Django项目中起作用了。

4. 示例二:使用数据库查询

在第一个示例中,我们演示了如何使用GraphQL查询字符串。现在,我们将演示如何使用GraphQL查询Django数据库。

假设有一个Django模型,如下所示:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)

这个模型有titleauthor两个字段。现在,让我们创建GraphQL schema和resolver来查询这些数据。

schema.py文件中添加以下内容:

import graphene
from graphene_django import DjangoObjectType
from .models import Book

class BookType(DjangoObjectType):
    class Meta:
        model = Book

class Query(graphene.ObjectType):
    books = graphene.List(BookType)

    def resolve_books(root, info):
        return Book.objects.all()

schema = graphene.Schema(query=Query)

这个schema定义了一个名为books的查询字段,它返回所有的Book对象。注意BookTypeDjangoObjectType的子类,它将Django模型映射到GraphQL对象。

现在可以在GraphQL Playground中测试查询了。在浏览器中输入http://localhost:8000/graphql来打开GraphQL Playground。然后在左侧的查询窗口中输入以下内容:

query {
  books {
    id
    title
    author
  }
}

点击"运行"按钮,应该可以看到以下结果:

{
  "data": {
    "books": [
      {
        "id": "1",
        "title": "Harry Potter and the Philosopher's Stone",
        "author": "J.K. Rowling"
      },
      {
        "id": "2",
        "title": "The Lord of the Rings",
        "author": "J.R.R. Tolkien"
      }
    ]
  }
}

这说明GraphQL schema已经成功地在Django项目中起作用了,并且可以查询数据库中的数据。

到此为止,这就是一个简单的“GraphQL在Django中的使用教程”的完整攻略。希望可以帮助你快速上手GraphQL在Django项目中的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GraphQL在Django中的使用教程 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • django-orm django-orm 使链接查询(LEFT JOIN)的条件 写在 ON 之后,而不是 WHERE

    直接上代码: 注:FilteredRelation 不能使用嵌套查询。 from django.db.models import Q,FilteredRelation class Books(Model): id = … book_name = … author = models.ForeignKey(‘apps.Author’) class Aut…

    Django 2023年4月12日
    00
  • 【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)

    1:登录视图 redis_cli.py文件:          import redis          Pool= redis.ConnectionPool(host=’localhost’,port=6379,decode_responses=True)登录视图文件:import redisfrom utils.redis_cli import Poo…

    Django 2023年4月12日
    00
  • django set_signed_cookie 方法理解

    djang set_signed_cookie 理解 signed_cookie 只是加了签名的 cookie, 而不是被加密的 cookie.   signed_cookie 的作用是防止用户私自纂改.参考: Securing Web Cookies With Signatures So once I’ve logged in, we set a user…

    2023年4月10日
    00
  • python27+django创建app

    python manage.py startapp polls创建一个叫polls的app 编辑文件 polls/models.py : 1 from django.db import models 2 class Poll(models.Model): 3   question = models.CharField(max_length=200) 4   …

    Django 2023年4月10日
    00
  • Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’

    一、部署 Django 到远程 Linux 服务器 利用 xshell 通过 ssh 连接到 Linux服务器,常规的启动命令是 python3 manage.py runserver 0.0.0.0:80 但是,关闭 xshell 后,就访问不了 Django 了。 这时候需要使用 nohup 命令启动(概念:如果你正在运行一个进程,而且你觉得在退出帐户时…

    Django 2023年4月10日
    00
  • Django源码分析之执行入口

    魔法门 一般我们启动django,最简单的方法是进入project 目录,这时目录结构是这样的 然后我们执行python manage.py runserver,程序就开始执行了。 那django是如何从一个命令就启动整个server,启动的流程是如何的? 踏门而入 打开目录下的manage.py,内容是这样的: #!/usr/bin/env python …

    Django 2023年4月11日
    00
  • [django]django model的查询和更新

    再分享Django系列的另外几篇文章:Django model select的各种用法详解:https://mp.weixin.qq.com/s/JVh4UnS2Tql9gUVaBSoGuADjango model update的各种用法介绍:https://mp.weixin.qq.com/s/B_aNB8Y8snbSVLURONZ4QgDjango配置C…

    Django 2023年4月10日
    00
  • Django 多环境配置详解

    下面我来详细讲解“Django 多环境配置详解”的完整攻略。 什么是多环境配置? 在开发一个 Django 网站的过程中,我们需要在本地环境、测试环境和生产环境等不同的环境下进行部署。而不同的环境可能需要不同的配置,比如数据库设置、缓存设置等等。因此,我们需要对不同的环境进行不同的配置,这就是多环境配置。 多环境配置步骤 实现 Django 的多环境配置可以…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部