Python网上商城源代码,基于Django+MySQL+Redis,支持支付宝付款,实现:用户登录注册,商品展示,商品详情界面,搜索商品,将不同尺寸颜色数量的商品加入购物车,购物车管理,地址管理,形成订单,支付宝支付。
更改netshop里settings的DATABASES。
要启动支付功能时,去掉在order里urls.py的两条path前的注释,以及views.py里第54行和最后一行的注释,填入支付宝公钥、应用私钥和appid。
程序运行截图



核心程序代码
setting.py

"""
Django settings for netshop project.Generated by 'django-admin startproject' using Django 4.0.3.For more information on this file, see
https://docs.djangoproject.com/en/4.0/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.0/ref/settings/
"""from pathlib import Path
import os# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-$kjc-+6u73ma^=xp7pf7)hspeb_9=++h+nb8hl&&uhjul%us!5'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# my app'goods','userapp','cart','order','utils',
]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',
]ROOT_URLCONF = 'netshop.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(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','userapp.mycontextprocessors.getUserInfo',   # 不论模块和应用都能共享],},},
]WSGI_APPLICATION = 'netshop.wsgi.application'# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'netshop','HOST': '127.0.0.1','POST': '3306','USER': 'root','PASSWORD': ''}
}# Password validation
# https://docs.djangoproject.com/en/4.0/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/4.0/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = True   # 看到视频上有USE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/STATIC_URL = '/static/'STATICFILES_DIRS = [os.path.join(BASE_DIR,'static\css'),os.path.join(BASE_DIR,'static\js'),os.path.join(BASE_DIR,'static\images'),
]MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR,'media')# Default primary key field type
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'# global_settings
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',},'session-redis': {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/1",}
}
SESSION_CACHE_ALIAS = 'session-redis'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

goods/views.py

from django.shortcuts import render# Create your views here.
from django.views import View
from goods.models import *
from django.core.paginator import Paginator
import mathclass IndexView(View):def get(self, request, cid=2, num=1, *args, **kwargs):cid = int(cid)num = int(num)# 查询所有类别信息categorys = Category.objects.all().order_by('id')# 查询当前类别下的所有商品信息goodsList = Goods.objects.filter(category_id=cid).order_by('id')# 分页 每页显示八条记录pager = Paginator(goodsList, 8)# 获取当前页的数据page_goodsList = pager.page(num)# 每页开始页码begin = (num - int(math.ceil(10.0 / 2)))if begin < 1:begin = 1# 每页结束页码end = begin + 9if end > pager.num_pages:end = pager.num_pagesif end <= 10:begin = 1else:begin = end - 9pagelist = range(begin, end + 1)return render(request, 'index.html',{'categorys': categorys, 'goodsList': page_goodsList, 'currentcid': cid, 'pagelist': pagelist,'currentNum': num})def recommed_view(func):  # 怎么说呢 因为现在只有女装的数据 其他的没有 如果你单纯浏览女装的东西 这方法相当于是历史记录了 但你浏览别的类别就不会推荐女装的东西了def wrapper(detailView, request, goodsid, *args, **kwargs):# 将存放在cookie中的goodsid获取cookie_str = request.COOKIES.get('recommend', '')# 存放goodsID放在里面goodsidlist = [gid for gid in cookie_str.split() if gid.strip()]# 最终需要获取的推荐商品goodsobjlist = [Goods.objects.get(id=gsid) for gsid in goodsidlist ifgsid != goodsid and Goods.objects.get(id=gsid).category_id == Goods.objects.get(id=goodsid).category_id][:4]# id对象放在里面就是id对应整个商品的属性 查询出来的是整个goodislist的所有对象,但是下面只显示四个,列表切片就可以了# 将 goodsliest 传给get方法response = func(detailView, request, goodsid, goodsobjlist, *args, **kwargs)# 这个地方你可以理解为调用了get方法,然后返回给了浏览器一个response对象了,只不过这个地方拿过来了,很基本的通用操作,注意一下# 判断 goodsid 是否存在goodsidlist中if goodsid in goodsidlist:goodsidlist.remove(goodsid)goodsidlist.insert(0, goodsid)else:goodsidlist.insert(0, goodsid)# 将goosidlist中的数据保存到cookid中response.set_cookie('recommend', ' '.join('%s' % gsid for gsid in goodsidlist), max_age=3 * 24 * 60 * 60)return responsereturn wrapperclass DetailView(View):@recommed_viewdef get(self, request, goodsid, recommendlist=[]):goodsid = int(goodsid)# 根据goodsid查询商品详情信息,(goods对象)goods = Goods.objects.get(id=goodsid)category = Category.objects.get(id=goods.category_id).cnamereturn render(request, 'detail.html', {'goods': goods, 'recommendlist': recommendlist, 'category': category})class SearchView(View):def get(self, request, num=1, *args, **kwargs):num = int(num)search = request.GET.get('search', '')goods = Goods.objects.filter(gname__contains=search)return render(request, 'search.html', {'goods': goods})

完整源代码下载地址:Python网上商城源代码
更多Python源代码:

Python网上商城源代码,基于Django+MySQL+Redis,支持支付宝付款相关推荐

  1. Python版超市管理系统源代码,基于django+mysql

    Python版超市管理系统源代码,基于django+mysql 安装步骤 1.在mysql中创建名为demo_django_supermarket的数据库,修改config/setting.py中数据 ...

  2. 基于django+mysql的教师教学质量评价系统源代码,教学评价系统源码

    基于django+mysql的教师教学质量评价系统源代码,教学评价系统源码 程序部署方法 1.安装程序依赖: 2.配置settings.py中的DATABASES,并在mysql中创建对应的数据库: ...

  3. Python个人网盘源码、云盘系统源程序,基于Django+Mysql

    Python个人网盘源码.云盘系统源程序,基于Django+Mysql 1.安装依赖 pip install -r requirements.txt 2.检查配置文件,修改邮箱和数据库配置 # myc ...

  4. SpringBoot网上商城(源代码+数据库)014

    部分代码地址 https://gitee.com/ynwynwyn/starsea-mall-public SpringBoot网上商城(源代码+数据库) 一.系统介绍 前台商城系统:包含首页登录.商 ...

  5. SpringBoot网上商城(源代码+数据库+13000字文档)013

    部分代码地址 https://gitee.com/ynwynwyn/mall-public SpringBoot网上商城(源代码+数据库+13000字文档)013 一.系统介绍 前台功能 商品分类查询 ...

  6. 校园二手书商城源代码基于微信小程序云开发,可在线支付提现,含详细配置教程

    校园二手书商城源代码基于微信小程序云开发,可在线支付提现,含详细配置教程 完整代码下载地址:校园二手书商城源代码基于微信小程序云开发 欢迎使用,下面是配置教程 长话短说,下面直接说配置流程 一.小程序 ...

  7. Python自行车租车系统设计与实现报告,基于Django+MySQL,含完整源代码

    一.项目介绍 1.项目名称 自行车租赁系统 2.项目简介 自行车租赁系统是为客户服务的自行车租赁管理系统, 可用于用户注册登录借车还车使用,根据用户借车租车时间自行计算花费 3.项目环境 该系统用Py ...

  8. 基于javaweb+mysql的网上图书商城网上书店(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)

    这个项目涉及到Shiro整合JWT.秒杀功能所具备的基本要求(限流.乐观锁.接口隐藏.JMeter高并发测试等等).消息中间件RabbitMQ的异步邮件通知和死信队列.沙箱支付宝模拟支付等等技术亮点. ...

  9. python商品管理系统_基于django的奶茶店的管理系统

    TeaShopManagemant 奶茶店的管理系统 项目简介 奶茶店管理系统,课设任务.管理系统大都大同小异,都是由一些用于管理的功能形成的.本不想做这个管理系统的,但是这个算是做了这么长时间的管理 ...

最新文章

  1. javascript 常用功能總結
  2. 将字符串下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出
  3. 静态html搜索,如何为网站增加相关性较强的静态搜索页?
  4. matlab中画花瓣,matlab画心,画玫瑰花,表白合集
  5. grasshop 犀牛5.0下载_新安|原创剑尊下载新版本 2020最新安卓版剑尊下载地址整理...
  6. Navicat导出表结构
  7. [算法 笔记]堆排序(续)
  8. golang bloom filter实现
  9. jQuery取得select选中的值
  10. Delphi 7序列号过期的解决方法
  11. 洛谷 2017.7月赛解题报告
  12. 淘宝账号如何快速提升到更高等级
  13. 安大计算机学院ACM,全员考研上岸、ACM大赛获奖,乘风破浪的学霸寝室!
  14. JAVA实现邮箱注册功能
  15. 微信小程序文件预览(doc、ppt、pdf)
  16. 计算机基础:7、计算机的输入输出设备
  17. Excel单元格内插入图片(VBA创建函数,根据图片名称批量插入)
  18. 看到“java单例模式”脑壳疼,学会这几招分分钟搞定
  19. yapi接口导出为word_接口文档神器YApi
  20. aria2c下载磁力链接

热门文章

  1. java接口测试解析soap_使用SOAPUI作为服务端测试soap接口(WSDL)
  2. 基于Java毕业设计高校共享机房管理系统的设计与实现源码+系统+mysql+lw文档+部署软件
  3. php 对全角字符的过滤,php在做敏感词过滤时怎么解决用特殊符号分割、简繁体、半角全角,来绕开过滤的问题?...
  4. 十种常用算法之分治算法(java版)
  5. 如何正确地提出热处理工艺
  6. 路漫漫其修远兮:js的成长经历(二十五)—— Node.js中的MongoDB
  7. 台达DVP ES系列plc与3台台达MS300变频器通讯程序 实现频率设定,启停控制,实际频率读取等
  8. 测试用例管理与Jenkins集成
  9. java电商和企业项目_java电商和企业项目
  10. Android Dialog中加载GIF