<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          輕松部署一個(gè)Python版的網(wǎng)上商城

          共 5157字,需瀏覽 11分鐘

           ·

          2021-07-19 02:21


          大家好,歡迎來(lái)到 Crossin的編程教室 !
          正文開(kāi)始之前先通知一個(gè)福利:

          當(dāng)當(dāng)暑假閱讀季優(yōu)惠碼

          今天可在每滿100-50的基礎(chǔ)上疊加

            滿200減30:

          VN4U6M

            滿300減60:
          VQJGZD

          結(jié)算時(shí)選擇【優(yōu)惠碼】

          輸入 VN4U6M 或 VQJGZD 即可

          數(shù)量有限,先到先得

          (詳細(xì)使用教程參見(jiàn)今日推送的第3條)



          之前有同學(xué)問(wèn)我,想自己搭建一個(gè)電商網(wǎng)站,不知道python有沒(méi)有類似的開(kāi)源項(xiàng)目?
          答案是肯定的,今天我們就給大家介紹這樣的一個(gè)項(xiàng)目:Saleor
          Saleor 是一個(gè)快速發(fā)展的開(kāi)源電子商務(wù)平臺(tái),基于 Python 和 Django 開(kāi)發(fā)。

          它的特點(diǎn)如下:

          1.GraphQL API:基于GraphQL實(shí)現(xiàn)的前后端分離,屬于最前沿的技術(shù)。
          2.儀表板:管理員可以完全控制用戶、流程和產(chǎn)品。
          3.訂單:訂單、發(fā)貨和退款的綜合系統(tǒng)。
          4.購(gòu)物車(chē):高級(jí)付款和稅收選項(xiàng),支持折扣和促銷活動(dòng)
          5.支付:靈活的 API 架構(gòu)允許集成任何支付方式。
          6.地理自適應(yīng):自動(dòng)支持多國(guó)家的結(jié)賬體驗(yàn)。
          7.支持云部署:支持Docker部署。
          8.支持谷歌分析:集成了谷歌分析,可以很方便地分析流量去留。

          Saleor 目前還在持續(xù)更新中,一點(diǎn)不用擔(dān)心版本過(guò)舊的問(wèn)題。

          倉(cāng)庫(kù)地址:
          https://github.com/mirumee/saleor

          1.部署指南



          Saleor支持多種運(yùn)行方式,你可以采用手動(dòng)安裝并運(yùn)行的方式,也可以使用Docker進(jìn)行運(yùn)行,下面介紹全平臺(tái)通用且最簡(jiǎn)單的Docker部署方案。

          在按照以下說(shuō)明操作之前,你需要安裝Docker Desktop和Docker Compose,如果你沒(méi)安裝過(guò),可以看看這篇教程:
          https://www.runoob.com/docker/docker-tutorial.html

          Docker 部署 Saleor 非常方便,你只需要克隆存儲(chǔ)庫(kù)并構(gòu)建鏡像然后運(yùn)行服務(wù)即可:

          # Python 實(shí)用寶典
          # 克隆存儲(chǔ)庫(kù)
          git clone https://github.com/mirumee/saleor-platform.git --recursive --jobs 3
          cd saleor-platform
          # 構(gòu)建Docker鏡像
          docker-compose build


          如果你因?yàn)榫W(wǎng)絡(luò)問(wèn)題無(wú)法成功克隆 Saleor 源代碼倉(cāng)庫(kù),可以通過(guò) gitee 間接下載,方法參加:曲線救國(guó):提高github下載速度到2MB/s

          Saleor 使用共享文件夾來(lái)啟用實(shí)時(shí)代碼重新加載。如果你使用的是WindowsMacOS,則需要:

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

          2.確保在 Docker 首選項(xiàng)中你有至少 5 GB 的專用內(nèi)存(設(shè)置 -> 高級(jí) 或 首選項(xiàng) ->資源 -> 高級(jí)

          執(zhí)行數(shù)據(jù)庫(kù)migrations及打包前端資源:

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


          (可選)使用示例數(shù)據(jù)填充數(shù)據(jù)庫(kù):

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


          最后,為自己創(chuàng)建一個(gè)管理員帳戶:

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


          運(yùn)行服務(wù):

          使用以下命令運(yùn)行Saleor:

          docker-compose up


          2.架構(gòu)介紹



          如果你要基于 Saleor 進(jìn)行開(kāi)發(fā),那么你必須了解它的架構(gòu)。

          Saleor 由三個(gè)重要組件組成:

          1.Saleor Core, 它是GraphQL API的后端服務(wù)器。基于Django開(kāi)發(fā),數(shù)據(jù)庫(kù)采用了PostgreSQL并在Redis中儲(chǔ)存了一些緩存信息。

          2.Saleor Dashboard, 這是一個(gè)可以用來(lái)經(jīng)營(yíng)商店的儀表盤(pán),它是一個(gè)靜態(tài)網(wǎng)站,因此沒(méi)有任何自己的后端代碼,它是一個(gè)與Saleor Core核心服務(wù)器對(duì)話的React程序。

          3.Saleor Storefront, 這是基于React實(shí)現(xiàn)的示例商店,你可以自定義這部分代碼滿足你自己的需求,也可以使用 Saleor SDK 構(gòu)建自定義店面。

          所有三個(gè)組件都使用 GraphQL 通過(guò) HTTPS 進(jìn)行通信。

          3.擴(kuò)展開(kāi)發(fā)



          雖然你可以直接基于Saleor源代碼進(jìn)行開(kāi)發(fā),但是官方建議不這么做,原因是一旦你的代碼和Saleor官方源代碼產(chǎn)生沖突,你就很難跟上官方的更新,最終會(huì)導(dǎo)致代碼沒(méi)人維護(hù)的尷尬局面。

          因此Saleor提供了兩種添加功能的方式:

          1.插件功能:插件提供了一種在 Saleor Core 上運(yùn)行附加代碼的能力,而且有訪問(wèn)數(shù)據(jù)庫(kù)的能力。

          2.APPS:基于 GraphQL API 和 Saleor Core 開(kāi)發(fā)APP,還可以使用 WebHooks 訂閱事件。

          下面我們介紹如何基于插件進(jìn)行擴(kuò)展開(kāi)發(fā)。


          如上圖所示,Saleor Core 提供了一種回調(diào)通知事件給插件,插件基于此事件進(jìn)行相關(guān)操作,并與數(shù)據(jù)庫(kù)進(jìn)行交互。

          開(kāi)發(fā)插件,你必須繼承 BasePlugin 基類,然后重寫(xiě)部分方法,比如下面這個(gè)例子重寫(xiě)了 postprocess_order_creation  方法,增加了訂單創(chuàng)建時(shí)的一些操作:

          # Python實(shí)用寶典
          # 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)建時(shí)的操作
                  data = ...

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


          加載插件, 需要在 setup.py 進(jìn)行配置來(lái)自動(dòng)發(fā)現(xiàn)已安裝的插件。要使插件可被發(fā)現(xiàn),你需要設(shè)置 entry_points  saleor_plugins  字段, 并使用這個(gè)語(yǔ)法定義插件: 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)用程序,包名(等號(hào)前的部分)將被添加到 Django 的INSTALLED_APPS 中,以便你可以利用 Django 的功能,例如 ORM 集成和數(shù)據(jù)庫(kù)遷移。

          注意到我們前面訂單創(chuàng)建時(shí)的操作使用了 .delay 的語(yǔ)法,這是 Celery 的異步任務(wù)。因?yàn)橛行┎寮牟僮骶蛻?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


          上面這個(gè)api_post_request 函數(shù)就是前面插件用到的異步任務(wù),在插件調(diào)用delay方法后,這個(gè)任務(wù)將被塞到隊(duì)列中異步執(zhí)行。

          好了,上面就是一個(gè)簡(jiǎn)單的插件開(kāi)發(fā)例子,個(gè)人認(rèn)為 Saleor 的開(kāi)發(fā)模式還是很不錯(cuò)的。如果大家有需要,可以采用這個(gè)項(xiàng)目構(gòu)建一個(gè)屬于自己的商城。

          如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~

          作者:Ckend

          來(lái)源:Python實(shí)用寶典


          _往期文章推薦_

          曲線救國(guó):提高github下載速度到2MB/s




          如需了解付費(fèi)精品課程教學(xué)答疑服務(wù)
          請(qǐng)?jiān)?strong style="max-width: 100%;overflow-wrap: break-word !important;box-sizing: border-box !important;">Crossin的編程教室內(nèi)回復(fù): 666

          瀏覽 56
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰凹凸在线 | 免费一级中文字幕 | 国产中文字幕在线观看 | 中文字幕成人电影 | 日韩精品一区二区三区无码AV |