Python服務器運維筆記:第三章電商實戰 - 3.1.4.訂單功能

前言:本文是學習網易微專業的《python全棧工程師》 中的《服務器運維開發工程師》專題的課程筆記,歡迎學習交流。同時感謝老師們的精彩傳授!

一、課程目標

  • 訂單創建流程
  • 訂單系統模型關係

二、詳情解讀

2.1.訂單創建流程

在這裏插入圖片描述

創建購物車代碼:

# -*- coding=utf-8 -*-
import time, math, datetime

from flask import current_app, render_template, redirect, request, jsonify, url_for
from flask_login import current_user, login_required
from xp_mall.extensions import db,csrf
from xp_mall.member import member_module
from xp_mall.member.cart import empty
from xp_mall.forms.member import AddressForm
from xp_mall.models.order import Order, OrderGoods, Cart, Logistics
from xp_mall.utils import get_pay_obj

@member_module.route('/create_order', methods=['get', 'post'])
def create_order():
    '''
    訂單創建
    :return:
    '''
    cart_list = Cart.query.filter_by(user_id=current_user.user_id).all()
    total_price = get_total_price(cart_list)
    form = AddressForm()
    if form.validate_on_submit() and cart_list:
        order = Order(
            order_no = get_order_no(),
            subject = "平哥商城訂單",
            total_price = total_price,
            status = 0,
            buyer = current_user.user_id,
            payment = form.payment.data,
            createTime=datetime.datetime.now()
        )
        logistics = Logistics(
            receiver = form.receiver.data,
            mobile = form.mobile.data,
            address = form.address.data,
            status = ""
        )
        # 記錄訂單商品信息
        # 商品價格是變動的,需要記錄下單時價格,以備覈對

        [ order.goods.append(OrderGoods(**{
            "goods_id":cart.goods.goods_id,
            "price":cart.goods.price,
            "order_price":cart.goods.price,
            "order_active":"",
            "amount":cart.amount,
            "discount":100
        })) for cart in cart_list]
        order.logistics.append(logistics)
        try:
            empty()
            db.session.add(order)
            db.session.commit()
        except Exception as e:
            db.session.rollback()
        else:
            return redirect(url_for(".pay_order", order_no=order.order_no))
    return render_template('member/order/buy.html', form=form, cart_list=cart_list, total_price=total_price)

需要注意的問題:
在這裏插入圖片描述
不能以前端頁面顯示的總價格做爲最終的付款依據,要以後臺計算的爲準。因爲前端的數據可以被惡意修改後提交。

對於實體商品訂單,由於需要進行物流傳送,所以還需要確認收貨地址。通常會員可以預先設置多個地址備選擇使用。

虛擬商品不用物流,但是需要後續操作,比如充值。

訂單支付需要選擇支付方式,又如常見的支付寶渠道,微信渠道,以及會員 儲值型消費。
在這裏插入圖片描述

2.2.訂單模型
2.2.1.訂單模型 - 關聯關係

在這裏插入圖片描述

2.2.2.訂單模型 - orders
Column Data type 說明
id INTEGER
order_no VARCHAR(50) 訂單編號,用於支付時,訂單識別
subject VARCHAR(100) 訂單說明,本次訂單內容
total_price FLOAT/Numeric 訂單金額
status VARCHAR(10) 訂單狀態(等待支付,等待發貨,等待收貨,已收貨)
seller VARCHAR(50) 賣家賬號(多商戶商城)
buyer VARCHAR(50) 買家賬號
createTime DATATIME 訂單創建時間
payment VARCHAR(30) 支付方式
paytime DATETIME 支付時間

說明:
1.order_no爲了不重複,一般用時間戳生成
2.total_priceDecimal類型,用其他類型會有精度問題

2.2.3.訂單模型 - orders_goods
Column Data type 說明
id INTEGER
goods_id INTEGER 訂單關聯商品
order_id INTEGER 與order表關聯
price FLOAT/Numeric 訂單創建時商品價格
order_price FLOAT/Numeric 訂單創建實際價格
order_active INTEGER 訂單參與活動關聯鍵
amount INTEGER 訂單商品數量
discount FLAOT/Numeric 訂單折扣計算

一份訂單可以包含多件商品,每一件商品也可以包含在多個訂單內。訂單與商品的關係,是多對多關係,需要中間表order_goods關聯。

2.2.4.訂單模型 - logistics
Column Data type 說明
id INTEGER
order_id INTEGER 關聯訂單
receiver VARCHAR(20) 收件人
mobile VARCHAR(30) 聯繫電話
address VARCHAR(100) 地址
status VARCHAR(100) 物流狀態
2.3.開發任務
  • 增加一個用戶地址管理功能
  • 在訂單生成頁面使用可選地址列表
    在這裏插入圖片描述

三、課程小結

  • 01 訂單模型
  • 02 訂單創建流程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章