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