标签归档:GraphQL

Graphene-Python的GraphQL框架

引言

Graphene是一个固执己见的Python库,用于快速轻松地构建GraphQL架构/类型

  • 易于使用:石墨烯可帮助您轻松使用Python中的GraphQL
  • 继电器:石墨烯具有对中继的内置支持
  • 数据不可知:石墨烯支持任何类型的数据源:SQL(Django、SQLAlChemy)、NoSQL、自定义Python对象等。我们相信,通过提供完整的API,您可以将Graphene插入数据所在的任何位置,并通过GraphQL使您的数据可用

集成

石墨烯与不同的框架有多种集成:

集成 套餐
姜戈 graphene-django
SQL炼金术 graphene-sqlalchemy
Google App Engine graphene-gae

此外,Graphene完全兼容GraphQL规范,可以与所有GraphQL客户端无缝协作,例如RelayApollogql

安装

要安装石墨烯,只需在shell中运行此命令

pip install "graphene>=2.0"

示例

以下是您可以开始使用的一个示例:

import graphene

class Query(graphene.ObjectType):
    hello = graphene.String(description='A typical hello world')

    def resolve_hello(self, info):
        return 'World'

schema = graphene.Schema(query=Query)

然后查询graphene.Schema简单到如下所示:

query = '''
    query SayHello {
      hello
    }
'''
result = schema.execute(query)

如果您想了解更多,您还可以检查以下内容examples

文档

有关其他资源的文档和链接,请访问https://docs.graphene-python.org/en/latest/

贡献

克隆此存储库后,请创建virtualenv并通过运行以下命令确保安装了依赖项:

virtualenv venv
source venv/bin/activate
pip install -e ".[test]"

编写良好的测试并保持良好的测试覆盖率对此项目非常重要。在开发过程中,使用以下各项运行新的和现有的测试:

py.test graphene/relay/tests/test_node.py # Single file
py.test graphene/relay # All tests in directory

添加-s标记是否已将断点引入代码以进行调试。添加-v(“详细”)标志,以获取更详细的测试输出。要获得更详细的输出,请使用-vv请查看pytest documentation有关更多选项和测试运行控件的信息

您还可以使用以下命令运行基准测试:

py.test graphene --benchmark-only

石墨烯支持多个版本的Python。为了确保更改不会破坏与任何这些版本的兼容性,我们使用tox为每个Python版本创建Virtualenv并使用该版本运行测试。中定义的所有Python版本运行tox.ini配置文件,只需运行:

tox

中定义的特定版本运行tox.ini文件:

tox -e py36

TOX只能使用系统上安装的任何版本的Python。当您创建Pull请求时,Travis还将运行相同的测试并报告结果,因此潜在贡献者没有必要尝试提前在自己的系统上安装每个版本的Python。我们感谢公开的问题和拉请求,以使石墨烯更稳定和有用!

建筑文档

文档是使用优秀的Sphinx和自定义主题

该文档的HTML版本是通过运行以下命令生成的:

make docs

Saleor-使用Python、GraphQL、Django和Reaction构建的模块化、高性能、无头电子商务平台

销售商商业

现代堆栈上的以客户为中心的电子商务
一个无头、GraphQL第一的电子商务平台,提供超快、动态、个性化的购物体验。美丽的在线商店,随时随地,使用任何设备

目录

萨利奥的特别之处在哪里?

Saleor是一个快速增长的开源电子商务平台,自2012年以来一直为出版和服装等分支机构的大批量公司提供服务。基于Python和Django,最新的重大更新引入了由GraphQL API驱动的模块化前端,并使用Reaction和TypeScript编写

功能

  • PWA:最终用户可以在线下购物,以获得更好的销售和购物体验
  • GraphQL API:使用最新技术从任何Web或移动客户端访问所有数据
  • 无头商业:构建移动应用程序、定制店面和外部化流程
  • UX和UI:专为用户体验而设计,甚至可与顶级商业平台相媲美
  • 仪表板:管理员完全控制用户、流程和产品
  • 订单:全面的订货、发货和退款系统
  • 购物车:高级支付和税收选项,完全控制折扣和促销
  • 付款方式:灵活的API架构支持集成任何支付方式。它自带开箱即用的Braintree支持
  • 地理自适应:自动本地化定价。20多种当地语言。按国家/地区提供的本地化退房体验
  • 搜索引擎优化:功能丰富,将商店推向更广泛的受众
  • :针对使用Docker的部署进行了优化
  • 分析:服务器端Google Analytics在不影响隐私的情况下报告电子商务指标

Saleor是自由的,而且永远是自由的。帮帮我们,…如果您喜欢免费的东西和优秀的软件,请给我们一颗星!🌟


安装

Saleor需要Python 3.8、Node.js 10.0+、PostgreSQL和特定于操作系统的依赖关系工具

See the Saleor docs有关安装和部署的分步说明,请参阅

注:masterBRANCH是Saleor的开发版本,可能不稳定。要使用最新的稳定版本,请从Releases页面或切换到版本标签

当前的稳定版本是2.11,您应该将此版本用于所有三个组件:

文档

此处提供了Saleor文档:docs.saleor.io

要投稿,请参阅mirumee/saleor-docs repository

销售商平台

要在本地计算机上同时运行Saleor的所有组件(API、Storefront和Dashboard),最简单的方法是使用saleor-platform项目。有关如何使用它的说明,请转到该存储库

View saleor-platform

店面

对于PWA,单页店面请访问saleor-storefront存储库

View storefront demo

仪表板

有关仪表板,请访问saleor-dashboard存储库

View dashboard demo

演示

想看看Saleor的行动吗?

View Storefront|View Dashboard (admin area)

或者在免费的Heroku实例上启动演示

登录凭据:admin@example.com/admin

贡献

我们感谢您的贡献,并竭尽全力为您提供指导和支持。如果您正在寻找撞击的问题,请查看标签为Help Wanted

如果没有什么能吸引你的注意力,请检查our roadmap或者想出你的特写。给我们写封信或者open an issue我们会想办法处理它的

有关更多详细信息,请访问我们的Contributing Guide

传统视图

如果您对使用旧版本的Saleor感兴趣,请访问legacy-views存储库。它包含2.9.0版,其中包括基于Django的视图和Storefront1.0和Dashboard 1.0的HTML模板。注意:此版本的Saleor不再正式维护

您的反馈

您使用Saleor作为电子商务平台吗?填写这份简短的调查问卷,帮助我们成长。这只需要一分钟,但意义重大!

Take a survey

许可证

免责声明:只要您遵守license没有隐藏的指控。我们承诺尽最大努力修复错误并改进代码

有些情况确实需要额外的代码;我们可以介绍奇异的用例或为您构建定制的电子商务设备

制作于❤️通过Mirumee Software

hello@mirumee.com

教你部署开源的超漂亮电子商城 — Saleor 实战教程

Saleor 是一个快速发展的开源电子商务平台,基于 Python 和 Django开发,且持续更新中,一点不用担心版本过旧的问题。

它的特点如下:

1.GraphQL API:基于GraphQL实现的前后端分离,属于最前沿的技术。
2.仪表板:管理员可以完全控制用户、流程和产品。
3.订单:订单、发货和退款的综合系统。
4.购物车:高级付款和税收选项,支持折扣和促销活动
5.支付:灵活的 API 架构允许集成任何支付方式。
6.地理自适应:自动支持多国家的结账体验。
7.支持云部署:支持Docker部署。
8.支持谷歌分析:集成了谷歌分析,可以很方便地分析流量去留。

Saleor 仓库地址:
https://github.com/mirumee/saleor

1.Saleor 部署指南

Saleor支持多种运行方式,你可以采用手动安装并运行的方式,也可以使用Docker进行运行,下面介绍全平台通用且最简单的Docker部署方案。

在按照以下说明操作之前,你需要安装Docker DesktopDocker Compose

Docker 部署 Saleor 非常方便,你只需要克隆存储库并构建镜像然后运行服务即可:

# Python 实用宝典
# 克隆存储库
git clone https://github.com/mirumee/saleor-platform.git --recursive --jobs 3
cd saleor-platform
# 构建Docker镜像
docker-compose build

如果你无法成功克隆 Salor 源代码仓库,请在Python实用宝典公众号回复:Saleor 下载全部源代码。

Saleor 使用共享文件夹来启用实时代码重新加载。如果你使用的是WindowsMacOS,则需要:

1.将克隆的 saleor-platform 目录放置到 Docker 的共享目录配置 (Settings -> Shared Drives or Preferences -> Resources -> File sharing)。

2.确保在 Docker 首选项中你有至少 5 GB 的专用内存(设置 -> 高级首选项->资源 -> 高级

执行数据库migrations及打包前端资源:

docker-compose run --rm api python3 manage.py migrate
docker-compose run --rm api python3 manage.py collectstatic --noinput

(可选)使用示例数据填充数据库:

docker-compose run --rm api python3 manage.py populatedb

最后,为自己创建一个管理员帐户:

docker-compose run --rm api python3 manage.py createsuperuser

运行服务:

使用以下命令运行Saleor:

docker-compose up

2.Saleor 架构介绍

如果你要基于 Saleor 进行开发,那么你必须了解它的架构。

Saleor 由三个重要组件组成:

1.Saleor Core, 它是GraphQL API的后端服务器。基于Django开发,数据库采用了PostgreSQL并在Redis中储存了一些缓存信息。

2.Saleor Dashboard, 这是一个可以用来经营商店的仪表盘,它是一个静态网站,因此没有任何自己的后端代码,它是一个与Saleor Core核心服务器对话的React程序。

3.Saleor Storefront, 这是基于React实现的示例商店,你可以自定义这部分代码满足你自己的需求,也可以使用 Saleor SDK 构建自定义店面。

所有三个组件都使用 GraphQL 通过 HTTPS 进行通信。

3.Saleor 扩展开发教程

虽然你可以直接基于Saleor源代码进行开发,但是官方建议不这么做,原因是一旦你的代码和Saleor官方源代码产生冲突,你就很难跟上官方的更新,最终会导致代码没人维护的尴尬局面。

因此Saleor提供了两种添加功能的方式:

1.插件功能:插件提供了一种在Saleor Core上运行附加代码的能力,而且有访问数据库的能力。

2.APPS:基于GraphQL API和Saleor Core开发APP,还可以使用WebHooks订阅事件。

下面我们介绍如何基于插件进行扩展开发。

如上图所示,Saleor Core 提供了一种回调通知事件给插件,插件基于此事件进行相关操作,并与数据库进行交互。

开发插件,你必须继承 BasePlugin 基类,然后重写部分方法,比如下面这个例子重写了 postprocess_order_creation 方法,增加了订单创建时的一些操作:

# Python实用宝典
# custom/plugin.py

from django.conf import settings
from urllib.parse import urljoin

from ..base_plugin import BasePlugin
from .tasks import api_post_request_task


class CustomPlugin(BasePlugin):
    def postprocess_order_creation(self, order: "Order", previous_value: Any):
        # 订单创建时的操作
        data = ...

        transaction_url = urljoin(settings.CUSTOM_API_URL, "transactions/createoradjust")
        api_post_request_task.delay(transaction_url, data)

加载插件, 需要在 setup.py 进行配置来自动发现已安装的插件。要使插件可被发现,你需要设置 entry_points 的 saleor_plugins 字段, 并使用这个语法定义插件:package_name = package_name.path.to:PluginClass.

示例如下:

# setup.py
from setuptools import setup

setup(
    ...,
    entry_points={
        "saleor.plugins": [
            "my_plugin = my_plugin.plugin:MyPlugin"
        ]
    }
)

如果你的插件是 Django 应用程序,包名(等号前的部分)将被添加到 Django 的 INSTALLED_APPS 中,以便你可以利用 Django 的功能,例如 ORM 集成和数据库迁移。

注意到我们前面订单创建时的操作使用了 .delay 的语法,这是 Celery 的异步任务。因为有些插件的操作就应该异步完成,Saleor 使用 Celery 并将发现 tasks.py 在插件目录中声明的所有异步任务:

# custom_plugin/tasks.py

import json
from celery import shared_task
from typing import Any, Dict

import requests
from requests.auth import HTTPBasicAuth
from django.conf import settings


@shared_task
def api_post_request(
    url: str,
    data: Dict[str, Any],
):
    try:
        username = "username"
        password = "password"
        auth = HTTPBasicAuth(username, password)
        requests.post(url, auth=auth, data=json.dumps(data), timeout=settings.TIMEOUT)
    except requests.exceptions.RequestException:
        return

上面这个 api_post_request 函数就是前面插件用到的异步任务,在插件调用delay方法后,这个任务将被塞到队列中异步执行。

好了,上面就是一个简单的插件开发例子,个人认为Saleor的开发模式还是很不错的。如果大家有需要,可以采用这个项目构建一个属于自己的商城。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典