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

news2025/1/10 1:35:28


特别说明

本博客为个人开发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元鼓励~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秒懂C++之stack、queue、堆

目录 前言 一.stack常用接口 二.stack模拟实现 三.例题 3.1 最小栈 题目解析: 算法解析: 代码: 3.2 栈的压入、弹出序列 题目解析: 算法解析: 代码: 3.3 逆波兰表达式求值 题目解析: 算法解析…

【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用

目录 背景 CVE-2012-1823 发散利用 法一:读文件 法二:数据外带 背景 CVE-2012-1823 PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析 | 离别歌 省流: 命令行参数不光可以通过#!/usr/local/bin/php-cgi -d include…

目标检测 | yolov4 原理和介绍

1. 简介 YOLOv4是一种高效且准确的目标检测模型,它在YOLOv3的基础上引入了多项改进,这些改进主要集中在网络结构的优化和训练技巧的更新上。以下是YOLOv4中的一些关键技术或模块,它们对提高目标检测性能起到了重要作用: CSPDarkne…

MATLAB基础应用精讲-【数模应用】配对样本Wilcoxon检验(附MATLAB、R语言和python代码实现)

目录 知识储备 常用的统计假设检验的方法 算法原理 什么是Wilcoxon符号秩检验? 何时使用Wilcoxon符号秩检验 适用条件 SPSS-符号秩检验 一统计理论 二实例分析 三拓展知识 SAS --配对样本Wilcoxon符号秩检验 SPSSAU 配对样本Wilcoxon检验案例 1、背景 2、理论 …

【C++指南】函数重载:多态性的基石

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 一、函数重载的概念 二、函数重载的原理 三、函数重载的应用场景 四、函数重载的规则 五…

springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice

一、 背景 因为项目中需要使用word转pdf功能,因为转换速度原因,最后选用了libreoffice,原因及部署请参考 linux ubuntu环境安装libreoffice,word转pdf 远程调用的话可选docker部署,请看2.3.1 二、springboot整合libr…

AT指令处理框架

<AT框架>做什么 <AT框架>介绍 ATFrame 流程 开启AT流程: ATCommandRegister(CSQ,EXEXCMD,NULL); 发送消息队列xQueueSend(ATcmdQueue,(void *) &RegcommandInfo,(TickType_t)100) AT主流程 ATCommandSendScheduler 等待开启xQueueReceive(ATcmdQueue, (voi…

详细分析python下载文件的两种方式(附Demo)

目录 前言1. 接口方式2. Nginx 前言 基本项目的构建推荐阅读&#xff1a;构建Flask前后端不分离项目&#xff08;附Python Demo&#xff09; 对于Java的基本知识&#xff0c;推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&…

Unknown input format pdf Pandoc can convert to PDF, but not from PDF.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Lua运行环境安装及配置】

首先在百度搜索“Lua菜鸟教程” 网址&#xff1a;Lua 教程 | 菜鸟教程 (runoob.com) 找到环境安装 点击Github下载地址&#xff0c;GitHub可以在正规上网下进入网址&#xff08;页面更新不出来多试几次&#xff09; 点击.exe安装 下载完成后进行安装 可自定义磁盘 项目文件很…

线程局部变量(ThreadLocal)

线程局部变量&#xff08;ThreadLocal&#xff09; 1、什么是ThreadLocal&#xff1f;2、基本用法3、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、什么是ThreadLocal&#xff1f; ThreadLocal 是 Java 中用于实现线程局部变…

IEC 61850标准协议解读 1.建模讲解

IEC61850协议标准和之前的101、104协议最大的区分就是在模型这里&#xff0c;模型可以说是一个变电站里面的智能设备的定义&#xff0c;里面定义了网络连接信息、数据上报方式、设备访问控制点等&#xff0c;所以说在不同系统的对接过程中&#xff0c;有了这么一个基于标准定义…

sqliabs靶场练习

关卡 熟悉Mqsql相关命令Less-1Less-2Less-3Less-4Less-5Less-6Less-7Less-8Less-9Less-10 熟悉Mqsql相关命令 首先先熟悉一下Mysql的相关命令&#xff0c;可能在SQL注入的时候会用到。 1.查询服务器主机信息 HOSTNAME 主机名称 datadir——数据库路径 version_compile_os—…

JavaDS —— 红黑树

前言 还是一样&#xff0c;这里的红黑树重点讲述插入代码的实现&#xff0c;如果对红黑树的删除感兴趣&#xff0c;可以去翻阅其他资料。 在数据结构专栏中已经对 AVL 树的旋转调整做了分析和讲解&#xff0c;这里红黑树也会使用到旋转调整的代码&#xff0c;就不讲述旋转代码…

成都云飞浩容文化传媒有限公司怎么样可靠吗?

在数字经济浪潮汹涌的今天&#xff0c;电商行业作为推动经济高质量发展的关键引擎&#xff0c;正以前所未有的速度重塑着商业版图。在这场变革中&#xff0c;成都云飞浩容文化传媒有限公司凭借其专业的电商服务能力和前瞻性的市场洞察&#xff0c;成为了众多品牌商家信赖的合作…

助力草莓智能自动化采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建果园种植采摘场景下草莓成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

Git分布式版本控制--2+day018 LeetCode235 701 450

基础操作: 1.分支: 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响开发主线。 2.指令操作: 2.1 查看本地分支: git branch 2.2 创建本地分支: git branch 分支名…

Spring Boot 3.3 新特性介绍

1. 引言 Spring Boot 3.1.x 停止维护了&#xff0c;而 3.3.x 作为最新发布的版本&#xff0c;带来了许多新特性和改进。本篇文章将详细介绍这些新特性&#xff0c;并通过样例代码加以解释&#xff0c;帮助开发者更好地掌握和应用这些新功能。 Spring Boot 3.3现已正式发布&…

RNN循环网络层

文章目录 1、简介2、RNN 网络原理3、PyTorch RNN 层的使用3.1、RNN送入单个数据3.2、RNN层送入批量数据 4、RNN三个维度4.1、解释4.2、输入数据的组织4.3、示例4.4、为什么需要这种格式&#xff1f;4.5、小结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&a…

【博士每天一篇文献-算法】持续学习经典算法之LwF: Learning without forgetting

1 介绍 年份&#xff1a;2017 作者&#xff1a;Zhizhong Li&#xff0c;Amazon AWS Rekognition&#xff1b;Derek Hoiem&#xff0c;伊利诺伊大学计算机科学教授 会议&#xff1a;IEEE transactions on pattern analysis and machine intelligence 引用量&#xff1a;4325 Li…