django oscar 简易教程

由于我需要迅速地自己创建一个电子商务网站,所以只要充分利用工具包和框架,就应该能迅速完成一个电子商务网站。因此,我决定在Web框架中使用Django,在电子商务工具包中使用Oscar。虽然已经做出了决定,但是日语资料很少。英文版的官方文档也很模糊,只会说“详细信息请参考Sandbox和github”,而且不友好,难以理解。

这篇文章展示了建立一个完整电子商务网站的步骤,大致上只是按照 django-oscar 的 django-oscar/Building your own shop 进行操作,可以作为参考。

最后,我们将构建一个没有支付功能的电子商务网站。此外,这只是一个教程而已。

开发环境

    • Mac OS X

 

    • Python==3.8.0

 

    • Django==2.2.9

 

    django-oscar==2.0.4

搭建

在这份文件中,我们使用mkvirtualenv或virtualenv,但这次我们将利用我自己电脑上预先安装的Anaconda。

用Anaconda来建立虚拟环境。首先,建立Python 3.8环境。

$ conda create -n py38 python=3.8

启用虚拟环境。

$ conda info -e #環境確認
$ conda activate py38

使用pip安装Django-Oscar。

$ pip install django-oscar

由于一个缺失的软件包,需要将其安装。

$ pip install sorl-thumbnail
$ pip install pysolr

顺便提一下,截至2020年1月,版本情况如下:

    • pysolr==3.8.1

 

    sorl-thumbnail==12.5.0

创建Django项目

$ django-admin startproject frobshop

Django设置文件(settings.py)

在frobshop.frobshop.settings.py文件的开头追加以下内容。导入Oscar的默认设置。

from oscar.defaults import *

将Oscar的上下文处理器添加到模板中。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'oscar.apps.search.context_processors.search_form',
                'oscar.apps.checkout.context_processors.checkout',
                'oscar.apps.customer.notifications.context_processors.notifications',
                'oscar.core.context_processors.metadata',
            ],
        },
    },
]

请将INSTALLED_APPS和SITE_ID配置更改为以下方式。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'django.contrib.sites',
    'django.contrib.flatpages',

    'oscar',
    'oscar.apps.analytics',
    'oscar.apps.checkout',
    'oscar.apps.address',
    'oscar.apps.shipping',
    'oscar.apps.catalogue',
    'oscar.apps.catalogue.reviews',
    'oscar.apps.partner',
    'oscar.apps.basket',
    'oscar.apps.payment',
    'oscar.apps.offer',
    'oscar.apps.order',
    'oscar.apps.customer',
    'oscar.apps.search',
    'oscar.apps.voucher',
    'oscar.apps.wishlists',
    'oscar.apps.dashboard',
    'oscar.apps.dashboard.reports',
    'oscar.apps.dashboard.users',
    'oscar.apps.dashboard.orders',
    'oscar.apps.dashboard.catalogue',
    'oscar.apps.dashboard.offers',
    'oscar.apps.dashboard.partners',
    'oscar.apps.dashboard.pages',
    'oscar.apps.dashboard.ranges',
    'oscar.apps.dashboard.reviews',
    'oscar.apps.dashboard.vouchers',
    'oscar.apps.dashboard.communications',
    'oscar.apps.dashboard.shipping',

    # 3rd-party apps that oscar depends on
    'widget_tweaks',
    'haystack',
    'treebeard',
    'sorl.thumbnail',
    'django_tables2',
]

SITE_ID = 1

将oscar.apps.basket.middleware.BasketMiddleware和django.contrib.flatpages.middleware.FlatpageFallbackMiddleware添加到MIDDLEWARE配置中。

MIDDLEWARE = (
    ...
    'oscar.apps.basket.middleware.BasketMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)

添加设置,使得可以通过电子邮件地址进行认证。

AUTHENTICATION_BACKENDS = (
    'oscar.apps.customer.auth_backends.EmailBackend',
    'django.contrib.auth.backends.ModelBackend',
)

日本对策

要针对日本进行适应,需要将语言代码和时区进行修改。

LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

为了设定货币设定和货币格式(因为使用Oscar默认的格式,会显示到小数点第二位)。

OSCAR_DEFAULT_CURRENCY = 'JPY'
OSCAR_CURRENCY_FORMAT = '¤#,##0'

网址

将frobshop.frobshop.urls.py进行如下修改。

from django.apps import apps
from django.urls import include, path  # > Django-2.0
from django.contrib import admin

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),  # > Django-2.0

    # The Django admin is not officially supported; expect breakage.
    # Nonetheless, it's often useful for debugging.

    path('admin/', admin.site.urls),  # > Django-2.0

    path('', include(apps.get_app_config('oscar').urls[0])),  # > Django-2.0
]

搜索后台

设置搜索系统。如果想先试试的话,请进行以下设置。

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
    },
}

如果要进行Apache Solr的设置,需要先设置好Apache Solr,然后在frobshop.frobshop.settings.py文件中添加以下内容。

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
        'URL': 'http://127.0.0.1:8983/solr',
        'INCLUDE_SPELLING': True,
    },
}

数据库

如果您想要立即确认操作,请使用SQLite数据库。请编辑frobshop.frobshop.settings.py并将DATABASES设置更改如下。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
        'ATOMIC_REQUESTS': True,
    }
}

确认网站是否成功启动

进行迁移。

$ python manage.py migrate

确认启动服务器并检查网站是否能够正常启动。

$ python manage.py runserver

初步数据

到目前为止,已经建立起来了一个既没有商品也没有注册用户的电子商务网站。我们将进行各种设置,使其看起来更像一个电子商务网站。

中国的国家模范

将249个国家的初始数据输入国家模型(address_country)中。

$ pip install pycountry
$ python manage.py oscar_populate_countries

由于249个国家太多了,我们将仅将注册国家限定为日本。首先,连接到数据库,然后将is_shipping_country设置为仅对日本为1,其他为0。这样,当进行地址注册时,国家选择将不再显示(默认为日本)。

$ python manage.py dbshell
SQLite version 3.30.1 2019-10-10 20:19:45
Enter ".help" for usage hints.
sqlite> UPDATE address_country SET is_shipping_country = 0 WHERE printable_name != 'Japan';

用户数据

参考模型初始化数据,将数据注入模型。

首先,将用户数据输入。将注册在沙箱中的用户信息输入。

$ python manage.py loaddata frobshop/fixtures/auth.json
Installed 2 object(s) from 1 fixture(s)

管理员用户的设置如下。

username: superuser
email: superuser@example.com
password: testing

以下是工作人员账号。

(The following is a native Chinese paraphrase of the given sentence.)

username: staff
email: staff@example.com
password: testing

产品数据

将商品数据导入。在官方的沙盒网站上有两种类型的商品数据可用,分别是multi-stockrecord-product.json和child_products.json。

解释它们之间的不同。”child_products.json” 文件展示了当一个商品有不同变种时(例如,T恤可以有不同尺码和颜色),如何进行设置。例如,对于T恤,可以设置尺码为L、M和S的”Attributes”。

如果有在运营电子商务网站的情况下,可能存在多个仓库或订购来源来管理库存。在奥斯卡中,我们通过partner.stockrecord来管理多个订购来源。

如果想先将商品数据投入进去的话,可以选择将任意的json文件投入到数据库中。

$ python manage.py loaddata frobshop/fixtures/multi-stockrecord-product.json

我在下方提供了一份Oscar展示商品管理方法的文档链接。

    • modelling_your_catalogue

 

    glossary

订购管道

如果通过ec网站收到订单,可以通过订单流程设置来处理订单。例如,可以在settings.py中添加以下内容。在这个例子中,Pending是初始状态,订单将按照Pending→Being processed→Processed的顺序进行。如果在处理过程中被取消,订单状态将变为Cancelled。

OSCAR_INITIAL_ORDER_STATUS = 'Pending'
OSCAR_INITIAL_LINE_STATUS = 'Pending'
OSCAR_ORDER_STATUS_PIPELINE = {
    'Pending': ('Being processed', 'Cancelled',),
    'Being processed': ('Processed', 'Cancelled',),
    'Cancelled': (),
}

邮件设置

如果保持上述设置,当确认订单时(点击预览订单页面的“下订单”按钮),会出现ConnectionRefusedError at /checkout/preview/错误。

在支付后将客户重新定向到Oscar的感谢页面是为了测试完整的电子商务网站的第五部分,尽管有一些解释,但我阅读后仍然没太明白。

在settings.py中添加以下代码来处理:EMAIL_BACKEND = …

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

总结

暫時來說,只要設定到這裡,電子商務網站的功能就基本上都包含了(除了付款功能)。

请参考Github上的Sandbox网站设置来构建EC网站(例如添加商品图片等)。

如果心情愿意的话,我会考虑实现支付功能。

请参考下列网站。

我参考了以下的网站。

    • django-oscar/Building your own shop

 

    • Django Oscar (ECパッケージ) 日本利用ガイド

 

    • コピペで始めるDjango Oscor

 

    • ゼロからはじめる Django で ECサイト構築(その2:Django Oscar の Sandbox サイト構築)

 

    Building a full ecommerce site part 5: testing directing customers to Oscar’s thank-you page after payment
广告
将在 10 秒后关闭
bannerAds