Django-Oscar开发独立站/外贸商城教程与问题记录


特别说明

本博客为个人开发Django-Oscar时的经验总结,方便后期维护!(第一次这么认真的记录这种大型项目,打个广告吧:本人可接单算法程序开发,包含深度学习和图像相关……等相关

目录

 

1. Django-Oscar安装、文件设置及沙盒(网站)运行指令

1.1 安装Django-Oscar

1.2 Oscar网站基本运行指令

​1.3 Oscar的setting.py设置说明

1.4 Oscar的urls.py设置

2. 网站定制的问题

2.1 静态文件(static)目录

2.2 模板文件(templates)目录

X. 问题汇总

X.1 网站图片无法显示

X.1.1 开发环境 (DEBUG=True)

X.1.2 生产环境 (DEBUG=False)

如果您觉得文章有用,欢迎赞助~ 以资0.1元鼓励~


解决的问题包括:
  1. 网址初开发的文件设置和配置,以及开发中的网站图片无法显示问题。
  2. 缓存文件cache误删后重新生成方法。
  3. 网站scss文件与css文件的关系,修改scss后网站没有立即生效问题。    

网站示例(已替换掉Oscar的logo)
图1. 成功运行的网站示例(已经替换掉Oscar的logo)
网站示例
图2. Django管理后台的网页界面

1. Django-Oscar安装、文件设置及沙盒(网站)运行指令

这里重点介绍网站的文件设置和运行相关指令!

1.1 安装Django-Oscar

请搜教程。基本就是:

```python
# 新创建环境
conda create -n mywebsite python=3.6

# 安装oscar库
pip install django-oscar
```

1.2 Oscar网站基本运行指令

```bash
# 安装库后,创建一个网站,名为:mysite
django-admin startproject mysite

# 在配置数据库后,已经数据有更新时,运行数据迁移(这里解释不准确)
python manage.py makemigrations

# 数据库的数据更新/迁移 (不准确)
python manage.py migrate

# 启动网站,运行后可以通过网站访问(网址看指令的输出)
python manage.py runserver

# 创建一个网站后,可以添加新的应用/功能 polls
python manage.py startapp polls

# 给数据库添加超级管理员,输入后会再要求输入用户名和密码
python manage.py createsuperuser

# 启动网站的在线管理终端,可以通过编程命令实时运行
python manage.py shell

# 这个功能是删除缓存关键字和对应文件。方便重新生成缓存文件。对应功能为:'sorl.thumbnail'
python manage.py thumbnail clear_delete_all

# 开发完成后,该指令可搜集所有静态文件(css,js,img,不包含html)到单独的文件夹:须设置:STATIC_ROOT = BASE_DIR / 'staticfiles'
python manage.py collectstatic 
```

​1.3 Oscar的setting.py设置说明

DEBUG = True

''' 当 DEBUG 设置为 False 时,Django 要求设置 ALLOWED_HOSTS 以确保服务器安全。ALLOWED_HOSTS 是一个字符串列表,包含允许访问你的网站的主机/域名。这样可以防止 HTTP Host 头攻击。'''
ALLOWED_HOSTS = [
    # 'example.com',  # 你的域名
    # 'www.example.com',  # 带 www 的域名
    'localhost',  # 本地主机
    '127.0.0.1',  # 本地回环地址
    # 添加任何其他你希望允许访问的网站
]

# Application definition

INSTALLED_APPS = [
    'custom_breadcrumb.apps.CustomBreadcrumb',
    # 你的应用应放在 Oscar 应用之前
    # Django 和 Django-Oscar 的应用

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

    'oscar.config.Shop',
    'oscar.apps.analytics.apps.AnalyticsConfig',
    'oscar.apps.checkout.apps.CheckoutConfig',
    'oscar.apps.address.apps.AddressConfig',
    'oscar.apps.shipping.apps.ShippingConfig',
    'oscar.apps.catalogue.apps.CatalogueConfig',
    'oscar.apps.catalogue.reviews.apps.CatalogueReviewsConfig',
    'oscar.apps.communication.apps.CommunicationConfig',
    'oscar.apps.partner.apps.PartnerConfig',
    'oscar.apps.basket.apps.BasketConfig',
    'oscar.apps.payment.apps.PaymentConfig',
    'oscar.apps.offer.apps.OfferConfig',
    'oscar.apps.order.apps.OrderConfig',
    'oscar.apps.customer.apps.CustomerConfig',
    'oscar.apps.search.apps.SearchConfig',
    'oscar.apps.voucher.apps.VoucherConfig',
    'oscar.apps.wishlists.apps.WishlistsConfig',
    'oscar.apps.dashboard.apps.DashboardConfig',
    'oscar.apps.dashboard.reports.apps.ReportsDashboardConfig',
    'oscar.apps.dashboard.users.apps.UsersDashboardConfig',
    'oscar.apps.dashboard.orders.apps.OrdersDashboardConfig',
    'oscar.apps.dashboard.catalogue.apps.CatalogueDashboardConfig',
    'oscar.apps.dashboard.offers.apps.OffersDashboardConfig',
    'oscar.apps.dashboard.partners.apps.PartnersDashboardConfig',
    'oscar.apps.dashboard.pages.apps.PagesDashboardConfig',
    'oscar.apps.dashboard.ranges.apps.RangesDashboardConfig',
    'oscar.apps.dashboard.reviews.apps.ReviewsDashboardConfig',
    'oscar.apps.dashboard.vouchers.apps.VouchersDashboardConfig',
    'oscar.apps.dashboard.communications.apps.CommunicationsDashboardConfig',
    'oscar.apps.dashboard.shipping.apps.ShippingDashboardConfig',

    # 3rd-party apps that oscar depends on
    'widget_tweaks',
    'haystack',
    'treebeard',
    'sorl.thumbnail',   # Default thumbnail backend, can be replaced  缓存机制
    'django_tables2',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
SITE_ID = 1  # Django 的 sites 框架允许一个项目支持多个站点。SITE_ID 用于指定当前正在使用的站点。

MIDDLEWARE = [  # 中间件组件在请求处理过程中依次执行,可以添加功能和增强安全性。它们的顺序很重要,因为请求和响应会按照中间件的顺序依次通过每个中间件。
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    'oscar.apps.basket.middleware.BasketMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
]

ROOT_URLCONF = 'shop01.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates/', ],
        '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',
                'custom_breadcrumb.context_processors.shop_info',  # 添加自定义上下文处理器
            ],
        },
    },
]

WSGI_APPLICATION = 'shop01.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
        'ATOMIC_REQUESTS': True,
    }
}

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

# 搜索引擎配置
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
    },
}

''' 下方定义订单的可变状态规则 '''
OSCAR_INITIAL_ORDER_STATUS = 'Pending'
OSCAR_INITIAL_LINE_STATUS = 'Pending'
OSCAR_ORDER_STATUS_PIPELINE = {
    'Pending': ('Being processed', 'Cancelled',),
    'Being processed': ('Processed', 'Cancelled',),
    'Cancelled': (),
}

# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'  #  'en-us' 'zh-cn'   # 指定 Django 应用程序的默认语言和地区设置。在这里,设置为美国英语(en-us)。

TIME_ZONE = 'Asia/Shanghai'  # 'UTC'  # 设置项目的默认时区,所有日期和时间将以该时区为基准。 'Asia/Shanghai':上海时间 'America/New_York':纽约时间

USE_I18N = True  # 如果设置为 True,Django 将启用翻译功能和语言选择。国际化系统允许应用程序支持多种语言。

USE_L10N = True  # 如果设置为 True,Django 将根据当前语言环境自动格式化数据(如日期、时间和数字)。

USE_TZ = True  # 如果设置为 True,Django 将在数据库中使用 UTC 时间存储日期和时间,并根据用户的时区进行转换。

OSCAR_CURRENCY_LOCALE = 'ZAR'  # 货币符号 测试似乎不生效!

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'  # 定义静态文件的 URL 前缀。

# 定义一个列表,包含 Django 项目中额外的静态文件目录。 # 在生产环境中,不需要 STATICFILES_DIRS
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]
# 静态文件收集命令须配置这个
STATIC_ROOT = BASE_DIR / 'staticfiles'

# MEDIA_URL = '/media/'
# MEDIA_ROOT = BASE_DIR / 'images'

# Default primary key field type  # 是 Django 3.2 及更高版本中的一个设置选项,用于指定默认的自动主键字段类型。
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# 设置 THUMBNAIL_STORAGE 使用 FileSystemStorage,这样可以控制缩略图缓存的位置和行为
THUMBNAIL_STORAGE = 'django.core.files.storage.FileSystemStorage'
THUMBNAIL_PROCESSORS = (  # 配置 THUMBNAIL_PROCESSORS,以控制缩略图生成的处理器:
    'sorl.thumbnail.processors.colorspace.ColorSpaceThumbnailProcessor',
    'sorl.thumbnail.processors.resize.ResizeThumbnailProcessor',
    'sorl.thumbnail.processors.filters.FilterThumbnailProcessor',
    'sorl.thumbnail.processors.crop.CropThumbnailProcessor',
)

1.4 Oscar的urls.py设置

```python
from django.contrib import admin
from django.urls import path

from django.apps import apps
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),  # 多国语言
    path('admin/', admin.site.urls),

    path('', include(apps.get_app_config('oscar').urls[0])),
]

# 开发模式下提供媒体文件服务,否者无法显示图片
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```

2. 网站定制的问题

        网站定制首先需要解决相关文件路径问题。定制过程需要修改相应的html、css、js等文件,需要手动到Oscar库内进行拷贝,将它们复制到项目目录下。

特别说明:static是css和js文件的存放目录。
Django使用了npm对scss进行预编译,所以直接修改scss是不能改变网站格式的。

核心风格css是static/oscar/cssstyles.css,只有修改这个文件才会立马生效。

由于static/oscar/css/styles.css.map的存在,浏览器在调试时,对应元素的css属性会定位到scss文件,但直接修改这个scss文件是不会生效的!
【修改scss后需要重新编译。】


HTML文件修改后可立即生效!
网页导航栏什么的,个性定制一般会在templates/oscar/partials/文件夹下找到对应的html文件。

高级功能需要修改js等文件,这里还没测试到。

2.1 静态文件(static)目录

        这个主要是指css、scss、js、font等文件。

2.2 模板文件(templates)目录

        这个主要是指HTML文件,python manage.py collectstatic 这个指令不会收集html文件。

X. 问题汇总

        开发环境:setting.py中的 “DEBUG = True”; 生产环境:“DEBUG = False”

X.1 网站图片无法显示

X.1.1 开发环境 (DEBUG=True)

        setting.py中正确配置:

STATIC_URL = '/static/'

X.1.2 生产环境 (DEBUG=False)

        Pycharm不支持,需要使用Nginx等专用网站部署工具进行规划路由。

如果您觉得文章有用,欢迎赞助~ 以资0.1元鼓励~

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

biao169

创作不易,感谢您的支持,谢谢~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值