19-Django实战项目[order]-确认订单

发布于:2025-08-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

1.创建应用order

2.配置settings.py

3.配置路由

 # 订单模块
    path('v1/orders/', include('order.urls')),
from django.urls import path
from . import views

urlpatterns = [
    path('<str:username>/advance', views.AdvanceView.as_views()),
]

视图撰写

from django.core.cache import caches
from django.http import JsonResponse
from django.shortcuts import render

from goods.models import SKU
from user.models import Address
from utils.baseview import BaseView


# Create your views here.
class AdvanceView(BaseView):
    def get(self, request, username):
        """
        确认订单页视图逻辑
        """
        user = request.user

        # 1.address处理
        addresses = []
        all_address = Address.objects.filter(user_profile=user, is_active=True)
        for item in all_address:
            add = {
                "id": item.id,
                "name": item.receiver,
                "mobile": item.receiver_mobile,
                "title": item.tag,
                "address": item.address
            }
            # 默认地址放第一个,非默认放后面
            if item.is_default:
                addresses.insert(0, add)
            else:
                addresses.append(add)
        print(addresses)

        # 2.sku_list处理
        # settlement_type=0-购物车;1-立即购买
        typ = request.GET.get("settlement_type")
        sku_list = []

        # 购物车-结算
        if typ == '0':
            # 尝试从缓存中读取数据
            cache_key = f"carts_{user.id}"
            carts_data = caches["carts"].get(cache_key)
            if not carts_data:
                carts_data = {}

            skus = SKU.objects.filter(id__in=carts_data.keys())
            for item in skus:
                sku = {
                    "id": item.id,
                    "name": item.name,
                    "count": carts_data[str(item.id)],
                    "selected": 1,
                    "default_image_url": str(item.default_image_url),
                    "price": item.price,
                    "sku_sale_attr_name": [i.spu_sale_attr.name for i in item.sale_attr_value.all()],
                    "sku_sale_attr_val": [i.name for i in item.sale_attr_value.all()]
                }
                sku_list.append(sku)

            # 选出筛选状态为1的商品
            # sku_list = [sku for sku in sku_list if sku["selected"] == 1]

        # 立即购买
        elif typ == '1':
            # 查询字符串中获取商品信息[sku_id=2&buy_num=3]
            sku_id = request.GET.get("sku_id")
            buy_num = request.GET.get("buy_num")
            if not all([sku_id, buy_num]):
                return JsonResponse({"code": 10500, "error": "参数有误"})

            try:
                sku = SKU.objects.get(id=sku_id, is_launched=True)
            except Exception as e:
                print("error", e)
                return JsonResponse({"code": 10501, "error": "商品下架了~"})
            sku_list = [{
                "id": sku.id,
                "name": sku.name,
                "count": int(buy_num),
                "selected": 1,
                "default_image_url": str(sku.default_image_url),
                "price": sku.price,
                "sku_sale_attr_name": [i.spu_sale_attr.name for i in sku.sale_attr_value.all()],
                "sku_sale_attr_val": [i.name for i in sku.sale_attr_value.all()]
            }]





        result = {
            "code": 200,
            "data": {
                "addresses": addresses,
                "sku_list": sku_list
            },
            "base_url": "http://127.0.0.1:8000/media/"
        }
        return JsonResponse(result)


网站公告

今日签到

点亮在社区的每一天
去签到