当前位置: 首页 > news >正文

东莞市塘厦网站建设做导航网站用什么源码

东莞市塘厦网站建设,做导航网站用什么源码,江苏省建设招标网站首页,网站转app免费实操在线商城 一、今日学习内容概述 模块重要程度主要内容商品模型⭐⭐⭐⭐⭐商品信息、分类管理购物车系统⭐⭐⭐⭐⭐购物车功能实现订单系统⭐⭐⭐⭐⭐订单处理、支付集成用户中心⭐⭐⭐⭐订单管理、个人信息 二、模型设计 # models.py from django.db import models fro…实操在线商城 一、今日学习内容概述 模块重要程度主要内容商品模型⭐⭐⭐⭐⭐商品信息、分类管理购物车系统⭐⭐⭐⭐⭐购物车功能实现订单系统⭐⭐⭐⭐⭐订单处理、支付集成用户中心⭐⭐⭐⭐订单管理、个人信息 二、模型设计 # models.py from django.db import models from django.contrib.auth.models import User from django.core.validators import MinValueValidator from decimal import Decimalclass Category(models.Model):name models.CharField(分类名称, max_length100)slug models.SlugField(URL, uniqueTrue)description models.TextField(描述, blankTrue)image models.ImageField(分类图片, upload_tocategories/, blankTrue)class Meta:verbose_name 商品分类verbose_name_plural verbose_namedef __str__(self):return self.nameclass Product(models.Model):category models.ForeignKey(Category, on_deletemodels.CASCADE, related_nameproducts)name models.CharField(商品名称, max_length200)slug models.SlugField(URL, uniqueTrue)description models.TextField(商品描述)price models.DecimalField(价格, max_digits10, decimal_places2)stock models.PositiveIntegerField(库存)available models.BooleanField(是否可用, defaultTrue)created models.DateTimeField(创建时间, auto_now_addTrue)updated models.DateTimeField(更新时间, auto_nowTrue)image models.ImageField(商品图片, upload_toproducts/)class Meta:verbose_name 商品verbose_name_plural verbose_nameordering [-created]def __str__(self):return self.nameclass Cart(models.Model):user models.OneToOneField(User, on_deletemodels.CASCADE)created models.DateTimeField(创建时间, auto_now_addTrue)updated models.DateTimeField(更新时间, auto_nowTrue)class Meta:verbose_name 购物车verbose_name_plural verbose_namedef get_total_price(self):return sum(item.get_cost() for item in self.items.all())class CartItem(models.Model):cart models.ForeignKey(Cart, related_nameitems, on_deletemodels.CASCADE)product models.ForeignKey(Product, on_deletemodels.CASCADE)quantity models.PositiveIntegerField(数量, default1)class Meta:verbose_name 购物车项目verbose_name_plural verbose_namedef get_cost(self):return self.product.price * self.quantityclass Order(models.Model):STATUS_CHOICES [(pending, 待支付),(paid, 已支付),(shipped, 已发货),(completed, 已完成),(cancelled, 已取消),]user models.ForeignKey(User, on_deletemodels.CASCADE)address models.TextField(收货地址)phone models.CharField(联系电话, max_length20)total_amount models.DecimalField(总金额, max_digits10, decimal_places2)status models.CharField(订单状态, max_length10, choicesSTATUS_CHOICES, defaultpending)created models.DateTimeField(创建时间, auto_now_addTrue)updated models.DateTimeField(更新时间, auto_nowTrue)class Meta:verbose_name 订单verbose_name_plural verbose_nameordering [-created]def __str__(self):return fOrder {self.id}class OrderItem(models.Model):order models.ForeignKey(Order, related_nameitems, on_deletemodels.CASCADE)product models.ForeignKey(Product, on_deletemodels.CASCADE)price models.DecimalField(价格, max_digits10, decimal_places2)quantity models.PositiveIntegerField(数量, default1)class Meta:verbose_name 订单项目verbose_name_plural verbose_namedef get_cost(self):return self.price * self.quantity三、视图实现 # views.py from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.contrib import messages from .models import Product, Cart, CartItem, Order, OrderItemdef product_list(request, category_slugNone):category Nonecategories Category.objects.all()products Product.objects.filter(availableTrue)if category_slug:category get_object_or_404(Category, slugcategory_slug)products products.filter(categorycategory)return render(request, shop/product_list.html, {category: category,categories: categories,products: products})login_required def add_to_cart(request, product_id):product get_object_or_404(Product, idproduct_id)cart, created Cart.objects.get_or_create(userrequest.user)cart_item, item_created CartItem.objects.get_or_create(cartcart,productproduct)if not item_created:cart_item.quantity 1cart_item.save()messages.success(request, f{product.name} 已添加到购物车)return redirect(cart_detail)login_required def cart_detail(request):cart, created Cart.objects.get_or_create(userrequest.user)return render(request, shop/cart_detail.html, {cart: cart})login_required def checkout(request):cart get_object_or_404(Cart, userrequest.user)if request.method POST:# 创建订单order Order.objects.create(userrequest.user,addressrequest.POST.get(address),phonerequest.POST.get(phone),total_amountcart.get_total_price())# 创建订单项目for item in cart.items.all():OrderItem.objects.create(orderorder,productitem.product,priceitem.product.price,quantityitem.quantity)# 清空购物车cart.items.all().delete()messages.success(request, 订单创建成功)return redirect(order_detail, order_idorder.id)return render(request, shop/checkout.html, {cart: cart})四、购物车流程图 五、模板实现 !-- templates/shop/product_list.html -- {% extends base.html %}{% block content %} div classcontainer mt-4div classrow!-- 分类侧边栏 --div classcol-md-3div classlist-groupa href{% url product_list %} classlist-group-item list-group-item-action所有商品/a{% for c in categories %}a href{{ c.get_absolute_url }} classlist-group-item list-group-item-action{{ c.name }}/a{% endfor %}/div/div!-- 商品列表 --div classcol-md-9div classrow{% for product in products %}div classcol-md-4 mb-4div classcardimg src{{ product.image.url }} classcard-img-top alt{{ product.name }}div classcard-bodyh5 classcard-title{{ product.name }}/h5p classcard-text价格: ¥{{ product.price }}/pform action{% url add_to_cart product.id %} methodpost{% csrf_token %}button typesubmit classbtn btn-primary加入购物车/button/form/div/div/div{% endfor %}/div/div/div /div {% endblock %}!-- templates/shop/cart_detail.html -- {% extends base.html %}{% block content %} div classcontainer mt-4h2购物车/h2{% if cart.items.all %}table classtabletheadtrth商品/thth单价/thth数量/thth小计/thth操作/th/tr/theadtbody{% for item in cart.items.all %}trtd{{ item.product.name }}/tdtd¥{{ item.product.price }}/tdtd{{ item.quantity }}/tdtd¥{{ item.get_cost }}/tdtdform action{% url remove_from_cart item.id %} methodpost{% csrf_token %}button typesubmit classbtn btn-danger btn-sm删除/button/form/td/tr{% endfor %}/tbodytfoottrtd colspan3strong总计/strong/tdtdstrong¥{{ cart.get_total_price }}/strong/tdtd/td/tr/tfoot/tablea href{% url checkout %} classbtn btn-primary去结算/a{% else %}p购物车是空的。/p{% endif %} /div {% endblock %}六、URL配置 # urls.py from django.urls import path from . import viewsurlpatterns [path(, views.product_list, nameproduct_list),path(category/slug:category_slug/, views.product_list, nameproduct_list_by_category),path(product/int:id/slug:slug/, views.product_detail, nameproduct_detail),path(cart/, views.cart_detail, namecart_detail),path(add/int:product_id/,views.add_to_cart,nameadd_to_cart),path(remove/int:item_id/,views.remove_from_cart,nameremove_from_cart),path(checkout/,views.checkout,namecheckout),path(orders/,views.order_list,nameorder_list),path(order/int:order_id/,views.order_detail,nameorder_detail), ]七、订单处理 # services.py from django.db import transaction from .models import Order, OrderItem, Cartclass OrderService:staticmethodtransaction.atomicdef create_order(user, address, phone):创建订单cart Cart.objects.get(useruser)# 检查库存for item in cart.items.all():if item.quantity item.product.stock:raise ValueError(f{item.product.name} 库存不足)# 创建订单order Order.objects.create(useruser,addressaddress,phonephone,total_amountcart.get_total_price())# 创建订单项目并更新库存for item in cart.items.all():OrderItem.objects.create(orderorder,productitem.product,priceitem.product.price,quantityitem.quantity)item.product.stock - item.quantityitem.product.save()# 清空购物车cart.items.all().delete()return order八、测试代码 # tests.py from django.test import TestCase from django.contrib.auth.models import User from .models import Product, Cart, CartItem from decimal import Decimalclass ShopTest(TestCase):def setUp(self):self.user User.objects.create_user(usernametestuser,passwordtestpass123)self.product Product.objects.create(nameTest Product,priceDecimal(99.99),stock10)def test_add_to_cart(self):self.client.login(usernametestuser, passwordtestpass123)response self.client.post(f/add/{self.product.id}/)self.assertEqual(response.status_code, 302)cart Cart.objects.get(userself.user)self.assertEqual(cart.items.count(), 1)# tests.py def test_checkout(self):self.client.login(usernametestuser, passwordtestpass123)# 添加商品到购物车cart Cart.objects.create(userself.user)CartItem.objects.create(cartcart,productself.product,quantity2)# 提交订单response self.client.post(/checkout/, {address: Test Address,phone: 1234567890})self.assertEqual(response.status_code, 302)self.assertEqual(cart.items.count(), 0) # 购物车已清空# 检查订单是否创建成功order Order.objects.filter(userself.user).first()self.assertIsNotNone(order)self.assertEqual(order.total_amount, Decimal(199.98))def test_stock_management(self):测试库存管理self.client.login(usernametestuser, passwordtestpass123)# 添加超出库存数量的商品cart Cart.objects.create(userself.user)CartItem.objects.create(cartcart,productself.product,quantity15 # 大于库存)# 尝试结算response self.client.post(/checkout/, {address: Test Address,phone: 1234567890})# 应该返回错误self.assertEqual(response.status_code, 400)self.assertIn(库存不足, response.content.decode())九、支付集成 # payment.py from decimal import Decimal import stripe from django.conf import settingsstripe.api_key settings.STRIPE_SECRET_KEYclass PaymentService:staticmethoddef create_payment_intent(order):创建支付意图try:intent stripe.PaymentIntent.create(amountint(order.total_amount * 100), # 转换为分currencycny,metadata{order_id: order.id})return intent.client_secretexcept stripe.error.StripeError as e:raise ValueError(f支付创建失败: {str(e)})staticmethoddef confirm_payment(payment_intent_id):确认支付try:intent stripe.PaymentIntent.retrieve(payment_intent_id)return intent.status succeededexcept stripe.error.StripeError as e:raise ValueError(f支付确认失败: {str(e)})# views.py 添加支付相关视图 login_required def payment_process(request, order_id):order get_object_or_404(Order, idorder_id, userrequest.user)if request.method POST:# 创建支付意图try:client_secret PaymentService.create_payment_intent(order)return render(request, shop/payment.html, {client_secret: client_secret,order: order,STRIPE_PUBLIC_KEY: settings.STRIPE_PUBLIC_KEY})except ValueError as e:messages.error(request, str(e))return redirect(order_detail, order_idorder.id)return render(request, shop/payment.html, {order: order})十、异步任务处理 # tasks.py from celery import shared_task from django.core.mail import send_mail from .models import Ordershared_task def send_order_confirmation(order_id):发送订单确认邮件order Order.objects.get(idorder_id)subject f订单确认 #{order.id}message f亲爱的 {order.user.username}您的订单 #{order.id} 已确认。订单总金额¥{order.total_amount}感谢您的购买send_mail(subject,message,noreplyexample.com,[order.user.email],fail_silentlyFalse,)shared_task def check_order_timeout():检查超时未支付订单from django.utils import timezonefrom datetime import timedeltatimeout timezone.now() - timedelta(hours24)orders Order.objects.filter(statuspending,created__lttimeout)for order in orders:order.status cancelledorder.save()十一、性能优化建议 查询优化 使用select_related和prefetch_related添加适当的索引缓存热门商品 缓存策略 缓存商品列表缓存分类信息使用页面缓存 异步处理 邮件发送订单状态更新库存检查 前端优化 图片懒加载静态资源压缩AJAX局部刷新 十二、扩展功能建议 商品功能 商品评价系统商品收藏商品推荐 订单功能 订单跟踪订单导出退换货处理 用户功能 会员等级积分系统优惠券 统计分析 销售报表用户行为分析库存预警 怎么样今天的内容还满意吗再次感谢朋友们的观看关注GZH凡人的AI工具箱回复666送您价值199的AI大礼包。最后祝您早日实现财务自由还请给个赞谢谢
http://www.w-s-a.com/news/129639/

相关文章:

  • 建网站选号域名网站优化大赛
  • 师范街网站建设广告制作公司口号
  • 电子商务网站开发设计报告为什么wordpress主题中字体不统一
  • 百度站长快速收录网站建设完工确认书
  • 企业网站备案代理商建设工程施工合同2013
  • 要学做网站wordpress xss漏洞
  • 白云品牌型网站建设在网上做国际快递淘宝网站
  • 无锡网站建设方式推广软件赚钱的app
  • 如何控制一个网站软件开发wordpress教育插件
  • 网站开发属于软件开发类吗wordpress邮件失败
  • 凡科网站怎么设计win8网站模板
  • 深圳整站seo个人网站建设一般流程
  • 济南网站中企动力wordpress主题ripro
  • 淮北网站建设求职简历怎么做点击图片进网站
  • 自适应网站推广注册公司流程和费用公司注册
  • 电子商务网站建设预算表网站建设卩金手指科杰
  • 广西响应式网站哪家好产品网络推广怎样做
  • 移动网可以上的网站是什么样子的淘宝优惠券网站开发
  • wordpress php设置伊宁seo网站建设
  • 兰陵住房建设局网站wordpress中文标题
  • 福州搜索优化网站个人网页网站制作模板
  • 网站开发分哪几个步骤使用wordpress开发一个页面跳转
  • 网站制作后还能更改么wordpress 近期文章 代码
  • 做一个小网站需要多少钱wordpress集成paypal
  • 加强网站建设管理 及时更新自己设计装修的app
  • 集团网站设计案例网页制作网站开发
  • 怎么优化网站的单个关键词排名惠州品牌网站建设
  • 上海跨境电商网站制作wordpress弃用react
  • phpcms网站模版下载电商网站建设属于研发费用吗
  • 动画毕业设计代做网站高校门户网站建设需要多少钱