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 definitionINSTALLED_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/#databasesDATABASES = {'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-validatorsAUTH_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 pathfrom django.apps import apps
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import staticurlpatterns = [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.rhkb.cn/news/393323.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity补完计划 之 音效

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 首先,音频这块组件较少,但是内容很重要,因为对于任何一款非特殊面向人群的游戏来说&a…

STM32入门三(开漏输出点亮外接的LED)

前面2章用的是推免输出, 推免输出: 输出端由两个晶体管构成:一个N沟道晶体管和一个P沟道晶体管。这两个晶体管一般不会同时导通,避免短路; 白话,就是输入高还是低,由你的GPIO 控制(GPIO 输出高就高&#xf…

【LeetCode 1991 找到数组的中间位置 / LeetCode 724 寻找数组的中心下标】中间索引问题

1991 题目描述 暴力解法1: 思路: 遍历下标,求出左边和和右边和比较两边是否相等相等直接返回值没有符合的返回 -1 class Solution {public int findMiddleIndex(int[] nums) {int lennums.length;//初始化一个变量 midIndex 为 -1&#xff…

C# Unity 面向对象补全计划 七大原则 之 接口隔离原则 (ISP) 难度:☆ 总结:大接口分成小的,然后该干啥干啥

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.接口隔离原则 (ISP) 这…

MySQL--查询数据

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句。其基本格式为&#xff1a; select {* | <字段列表>}[from <表1>,&l…

贝壳找房:基于OceanBase构建实时字典服务的实践 | OceanBase案例

贝壳找房作为领先的居住服务综合平台&#xff0c;一直在推进居住产业的数字化与智能化升级。该平台通过汇聚并赋能优质的服务者&#xff0c;旨在为中国广大家庭带来涵盖二手房买卖、新房交易、房屋租赁、家装、家居以及家庭服务等全方位、高质量且高效的居住服务体验。 在贝壳…

0803实操-数字取证

0803实操-数字取证 易失性数据收集 创建应急工具箱&#xff0c;并生成工具箱校验和&#xff0c;能在最低限度地改变系统状态的情况下收集易失性数据。 数据箱 使用md5sums.exe对工具目录中的所有文件进行计算 获取计算机本地日期和时间。输入命令date/t>timefront.txt和…

鸿蒙图形开发【3D引擎接口示例】

介绍 本实例主要介绍3D引擎提供的接口功能。提供了ohos.graphics.scene中接口的功能演示。 3D引擎渲染的画面会被显示在Component3D这一控件中。点击按钮触发不同的功能&#xff0c;用户可以观察渲染画面的改变。 效果预览 使用说明 在主界面&#xff0c;可以点击按钮进入不…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——4Bin模型转化过程

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——4Bin模型转化过程 ​ 大家好&#xff0c;经过前几期的介绍&#xff0c;对于X3派上的Yolo模型部署&#xff0c;我们已经可以进行到最后一步了 ​ 今天给大家带来&#xff0c;转模型的关键步骤&#xff0…

学习进行到了第十七天(2024.8.5)

1.Mybatis的定义 数据持久化是将内存中的数据模型转换为存储模型&#xff0c;以及将存储模型转换为内存中数据模型的统称。例如&#xff0c;文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。MyBatis 支持定制化 SQL、存储过程以及高级映射&#xff0c;可以…

linux磁盘可视化分析工具

在 Linux 系统中&#xff0c;了解磁盘使用情况对于系统维护和优化至关重要。文件和目录随着时间的推移会占据大量磁盘空间&#xff0c;了解哪些部分占用的空间最多可以帮助我们更好地管理和清理磁盘。Baobab&#xff0c;也称为 GNOME Disk Usage Analyzer&#xff0c;是一款非常…

Radamsa:一款高性能通用模糊测试工具

关于Radamsa Radamsa是一款高性能的通用模糊测试工具&#xff0c;广大研究人员可以将其当作一个应用程序稳定性测试的测试用例生成工具。 工具运行机制 该工具使用简单&#xff0c;支持自定义脚本开发&#xff0c;可以用于测试程序对格式错误和潜在恶意输入的承受能力。它的工…

AGI思考探究的意义、价值与乐趣 Ⅴ

搞清楚模型对知识或模式的学习与迁移对于泛化意味什么&#xff0c;或者说两者间的本质&#xff1f;相信大家对泛化性作为大语言模型LLM的突出能力已经非常了解了 - 这也是当前LLM体现出令人惊叹的通用与涌现能力的基础前提&#xff0c;这里不再过多赘述&#xff0c;但仍希望大家…

国标GB28181视频平台LntonCVS视频融合共享平台视频汇聚应用方案

近年来&#xff0c;国内视频监控应用迅猛发展&#xff0c;系统接入规模不断扩大&#xff0c;导致了大量平台提供商的涌现。然而&#xff0c;不同平台的接入协议千差万别&#xff0c;使得终端制造商不得不为每款设备维护多个不同平台的软件版本&#xff0c;造成了资源的严重浪费…

【LeetCode】54. 螺旋矩阵

螺旋矩阵 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a;…

基于STM32的环境监测系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码传感器读取代码应用场景 家居环境监测工业环境监测常见问题及解决方案 常见问题解决方案结论 1. 引言 环境监测系统在我们的日常生活和工作中变得越来越重要。通过监测空气质量、…

秃姐学AI系列之:丢弃法 + 代码实现 | 数值稳定性

丢弃法 动机 一个好的模型需要对输入数据的扰动鲁棒 使用有噪音的数据等价于Tikhonov正则丢弃法&#xff1a;在层之间加入噪音 正则都可以理解为它在控制模型不要过拟合&#xff0c;不要太大 丢弃法不在数据中增加噪音&#xff0c;转而在层中增加噪音&#xff0c;所以丢弃法…

JavaScript前端面试题——fetch

什么是fetch&#xff1f; fetch&#xff1a;fetch是浏览器内置的api&#xff0c;用于发送网络请求 ajax&axios&fetch的关系 ajax&#xff1a;ajax 是一种基于原生 JavaScript 的异步请求技术。它使用 XMLHttpRequest 对象来发送请求和接收响应。 axios&#xff1a;…

C++设计模式笔记(内附可运行代码示例)

持续更新, 欢迎关注....... 前言 设计目的 高内聚&#xff0c;低耦合 设计原则 1、开放封闭原则 类的改动是通过增加代码进行&#xff0c;而不是修改源代码。 2、单一职责原则 职责单一&#xff0c;对外只提供一种功能&#xff0c;引起类变化的原因都应该只有一个。 3…

GitHub Revert Merge Commit的现象观察和对PR的思考

文章目录 前言Pull Request 为什么会是这样&#xff1f;Pull Request Branch的差异 ?Two Dot Diff和Three Dot Diff 老生常谈&#xff1a; Merge 和 Rebasegit mergegit rebase Revert Main分支中的一个Merge Commit现象描述解决方案: Revert Feature分支中的一个Merge Commi…