Saleor 是一個快速發(fā)展的開源電子商務(wù)平臺,基于 Python 和 Django開發(fā),且持續(xù)更新中,一點不用擔(dān)心版本過舊的問題。
它的特點如下:
- GraphQL API :基于GraphQL實現(xiàn)的前后端分離,屬于最前沿的技術(shù)。
- 儀表板 :管理員可以完全控制用戶、流程和產(chǎn)品。
- 訂單 :訂單、發(fā)貨和退款的綜合系統(tǒng)。
- 購物車 :高級付款和稅收選項,支持折扣和促銷活動
- 支付 :靈活的 API 架構(gòu)允許集成任何支付方式。
- 地理自適應(yīng) :自動支持多國家的結(jié)賬體驗。
- 支持云部署 :支持Docker部署。
- 支持谷歌分析 :集成了谷歌分析,可以很方便地分析流量去留。
Saleor 倉庫地址:
https://github.com/mirumee/saleor
1.部署指南
Saleor支持多種運行方式,你可以采用手動安裝并運行的方式,也可以使用Docker進行運行,下面介紹全平臺通用且最簡單的Docker部署方案。
在按照以下說明操作之前,你需要安裝Docker Desktop和Docker Compose,如果你沒安裝過,可以看看這篇教程:
https://www.runoob.com/docker/docker-tutorial.html
Docker 部署 Saleor 非常方便,你只需要克隆存儲庫并構(gòu)建鏡像然后運行服務(wù)即可:
# Python 實用寶典
# 克隆存儲庫
git clone https://github.com/mirumee/saleor-platform.git --recursive --jobs 3
cd saleor-platform
# 構(gòu)建Docker鏡像
docker-compose build
如果你無法成功克隆 Salor 源代碼倉庫,請在Python實用寶典公眾號回復(fù):**Saleor **下載全部源代碼。
Saleor 使用共享文件夾來啟用 實時代碼重新加載 。如果你使用的是Windows或 MacOS ,則需要:
1.將克隆的 saleor-platform 目錄放置到 Docker 的共享目錄配置 (Settings -> Shared Drives or Preferences -> Resources -> File sharing )。
2.確保在 Docker 首選項中你有至少 5 GB 的專用內(nèi)存(設(shè)置 -> 高級 或 *首選項 * ->資源 -> 高級 )
執(zhí)行數(shù)據(jù)庫migrations及打包前端資源:
docker-compose run --rm api python3 manage.py migrate
docker-compose run --rm api python3 manage.py collectstatic --noinput
(可選)使用示例數(shù)據(jù)填充數(shù)據(jù)庫:
docker-compose run --rm api python3 manage.py populatedb
最后,為自己創(chuàng)建一個管理員帳戶:
docker-compose run --rm api python3 manage.py createsuperuser
**
運行服務(wù):**
使用以下命令運行Saleor:
docker-compose up
2.架構(gòu)介紹
如果你要基于 Saleor 進行開發(fā),那么你必須了解它的架構(gòu)。
Saleor 由三個重要組件組成:
1.Saleor Core, 它是GraphQL API的后端服務(wù)器?;贒jango開發(fā),數(shù)據(jù)庫采用了PostgreSQL并在Redis中儲存了一些緩存信息。
2.Saleor Dashboard , 這是一個可以用來經(jīng)營商店的儀表盤,它是一個靜態(tài)網(wǎng)站,因此沒有任何自己的后端代碼,它是一個與Saleor Core核心服務(wù)器對話的React程序。
3.Saleor Storefront, 這是基于React實現(xiàn)的示例商店,你可以自定義這部分代碼滿足你自己的需求,也可以使用 Saleor SDK 構(gòu)建自定義店面。
所有三個組件都使用 GraphQL 通過 HTTPS 進行通信。
3.擴展開發(fā)
雖然你可以直接基于Saleor源代碼進行開發(fā),但是官方建議不這么做,原因是一旦你的代碼和Saleor官方源代碼產(chǎn)生沖突,你就很難跟上官方的更新,最終會導(dǎo)致代碼沒人維護的尷尬局面。
因此Saleor提供了兩種添加功能的方式:
1.插件功能 :插件提供了一種在 Saleor Core 上運行附加代碼的能力,而且有訪問數(shù)據(jù)庫的能力。
2.APPS :基于 GraphQL API 和 Saleor Core 開發(fā)APP,還可以使用 WebHooks 訂閱事件。
下面我們介紹如何基于插件進行擴展開發(fā)。
如上圖所示,Saleor Core 提供了一種回調(diào)通知事件給插件,插件基于此事件進行相關(guān)操作,并與數(shù)據(jù)庫進行交互。
開發(fā)插件, 你必須繼承 BasePlugin 基類,然后重寫部分方法,比如下面這個例子重寫了** postprocess_order_creation
**方法,增加了訂單創(chuàng)建時的一些操作:
# 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):
# 訂單創(chuàng)建時的操作
data = ...
transaction_url = urljoin(settings.CUSTOM_API_URL, "transactions/createoradjust")
api_post_request_task.delay(transaction_url, data)
**加載插件, 需要在 setup.py 進行配置來自動發(fā)現(xiàn)已安裝的插件。要使插件可被發(fā)現(xiàn),你需要設(shè)置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 應(yīng)用程序,包名(等號前的部分)將被添加到 Django 的**INSTALLED_APPS
**中,以便你可以利用 Django 的功能,例如 ORM 集成和數(shù)據(jù)庫遷移。
注意到我們前面訂單創(chuàng)建時的操作使用了 .delay 的語法,這是 Celery 的異步任務(wù)。因為有些插件的操作就應(yīng)該異步完成,Saleor 使用 Celery 并將發(fā)現(xiàn) tasks.py 在插件目錄中聲明的所有異步任務(wù):
# 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
**函數(shù)就是前面插件用到的異步任務(wù),在插件調(diào)用delay方法后,這個任務(wù)將被塞到隊列中異步執(zhí)行。
好了,上面就是一個簡單的插件開發(fā)例子,個人認(rèn)為 Saleor 的開發(fā)模式還是很不錯的。
-
存儲
+關(guān)注
關(guān)注
13文章
4317瀏覽量
85878 -
開源
+關(guān)注
關(guān)注
3文章
3358瀏覽量
42523 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727 -
Django
+關(guān)注
關(guān)注
0文章
44瀏覽量
10396 -
Docker
+關(guān)注
關(guān)注
0文章
463瀏覽量
11863
發(fā)布評論請先 登錄
相關(guān)推薦
評論