国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flask 與小程序 購物車刪除和編輯庫存功能

這篇具有很好參考價(jià)值的文章主要介紹了flask 與小程序 購物車刪除和編輯庫存功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

編輯? :? ?數(shù)量加減? ?價(jià)格匯總? 數(shù)據(jù)清空

mina/pages/cart/index.wxml

<!--index.wxml-->
<view class="container">
    <view class="title-box" wx:if="{{ !list.length }}">
        購物車空空如也~
    </view>
    <view class="to-index-btn" bindtap="toIndexPage" wx:if="{{ !list.length }}">
        去逛逛
    </view>

    <view class="list-top" wx:if="{{ list.length }}">
        <view class="label">購物車</view>
        <view class="edit-btn" hidden="{{!saveHidden}}" bindtap="editTap">編輯</view>
        <view class="edit-btn" hidden="{{saveHidden}}" bindtap="saveTap">完成</view>
    </view>

    <view class="goodsList" wx:if="{{ list.length }}">
        <view class="a-gooods" wx:for="{{ list }}"  wx:key="{{index}}" >
            <view class="a-goods-conts {{item.active? 'active':''}}" bindtap="selectTap" data-index="{{index}}">
                <view class="goods-info">
                    <view class="img-box">
                        <image src="{{item.pic_url}}" class="img"/>
                    </view>
                    <view class="text-box">
                        <view class="goods-title">{{item.name}}</view>
                        <view class="goods-price">¥ {{item.price}}</view>
                        <view class="buy-num">
                            <view class="jian-btn" catchtap="jianBtnTap" data-index="{{index}}">-</view>
                            <input  type="number" value="{{item.number}}" disabled/>
                            <view class="jia-btn" catchtap="jiaBtnTap" data-index="{{index}}">+</view>
                        </view>
                    </view>
                </view>
            </view>
        </view>
    </view>
    <view class="jiesuan-box" wx:if="{{ list.length }}">
        <view class="left-price">
            <view class="all-selected  {{allSelect?'active':''}}" bindtap="bindAllSelect">全選</view>
            <view class="total" hidden="{{noSelect}}">合計(jì):¥ {{totalPrice}}</view>
        </view>
        <view class="to-pay-btn {{noSelect?'no-select':''}}" hidden="{{!saveHidden}}" bindtap="toPayOrder">去結(jié)算</view>
        <view class="to-pay-btn {{noSelect?'no-select':''}}" hidden="{{saveHidden}}" bindtap="deleteSelected">刪除</view>
    </view>
</view>

知識(shí)點(diǎn)1: <view class="jian-btn" catchtap="jianBtnTap" data-index="{{index}}">

是一個(gè)微信小程序中的一個(gè)視圖組件,具有以下特點(diǎn):

  • class="jian-btn":該組件的樣式類名為jian-btn,可以通過CSS樣式表對(duì)其進(jìn)行樣式設(shè)置。
  • catchtap="jianBtnTap":該組件綁定了一個(gè)catchtap事件,當(dāng)用戶點(diǎn)擊該組件時(shí),會(huì)觸發(fā)名為jianBtnTap的事件處理函數(shù)。微信小程序 事件_w3cschool
  • data-index="{{index}}":該組件設(shè)置了一個(gè)自定義屬性data-index,其值為{{index}},可以在事件處理函數(shù)中獲取該屬性的值。

根據(jù)提供的信息,這個(gè)組件可能是一個(gè)按鈕,當(dāng)用戶點(diǎn)擊該按鈕時(shí),會(huì)觸發(fā)jianBtnTap事件處理函數(shù),并且可以通過data-index屬性傳遞一些額外的數(shù)據(jù)。

請(qǐng)注意,以上是根據(jù)提供的引用內(nèi)容推測的答案,具體的功能和效果還需要根據(jù)實(shí)際代碼和上下文來確定。

mina/pages/cart/index.js

//index.js
var app = getApp();
Page({
    data: {},
    onLoad: function () {

    },
    onShow:function(){
        this.getCartList();
    },
    //每項(xiàng)前面的選中框
    selectTap: function (e) {
        var index = e.currentTarget.dataset.index;
        var list = this.data.list;
        if (index !== "" && index != null) {
            list[ parseInt(index) ].active = !list[ parseInt(index) ].active;
            this.setPageData(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
        }
    },
    //計(jì)算是否全選了
    allSelect: function () {
        var list = this.data.list;
        var allSelect = false;
        for (var i = 0; i < list.length; i++) {
            var curItem = list[i];
            if (curItem.active) {
                allSelect = true;
            } else {
                allSelect = false;
                break;
            }
        }
        return allSelect;
    },
    //計(jì)算是否都沒有選
    noSelect: function () {
        var list = this.data.list;
        var noSelect = 0;
        for (var i = 0; i < list.length; i++) {
            var curItem = list[i];
            if (!curItem.active) {
                noSelect++;
            }
        }
        if (noSelect == list.length) {
            return true;
        } else {
            return false;
        }
    },
    //全選和全部選按鈕
    bindAllSelect: function () {
        var currentAllSelect = this.data.allSelect;
        var list = this.data.list;
        for (var i = 0; i < list.length; i++) {
            list[i].active = !currentAllSelect;
        }
        this.setPageData(this.getSaveHide(), this.totalPrice(), !currentAllSelect, this.noSelect(), list);
    },
    //加數(shù)量
    jiaBtnTap: function (e) {
        var that = this;
        var index = e.currentTarget.dataset.index;
        var list = that.data.list;
        list[parseInt(index)].number++;
        that.setPageData(that.getSaveHide(), that.totalPrice(), that.allSelect(), that.noSelect(), list);
        this.setCart( list[parseInt(index)].food_id,list[parseInt(index)].number );
    },
    //減數(shù)量
    jianBtnTap: function (e) {
        var index = e.currentTarget.dataset.index;
        var list = this.data.list;
        if (list[parseInt(index)].number > 1) {
            list[parseInt(index)].number--;
            this.setPageData(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);

            this.setCart( list[parseInt(index)].food_id,list[parseInt(index)].number );
        }
    },
    //編輯默認(rèn)全不選
    editTap: function () {
        var list = this.data.list;
        for (var i = 0; i < list.length; i++) {
            var curItem = list[i];
            curItem.active = false;
        }
        this.setPageData(!this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
    },
    //選中完成默認(rèn)全選
    saveTap: function () {
        var list = this.data.list;
        for (var i = 0; i < list.length; i++) {
            var curItem = list[i];
            curItem.active = true;
        }
        this.setPageData(!this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
    },
    getSaveHide: function () {
        return this.data.saveHidden;
    },
    totalPrice: function () {
        var list = this.data.list;
        var totalPrice = 0.00;
        for (var i = 0; i < list.length; i++) {
            if ( !list[i].active) {
                continue;
            }
            totalPrice = totalPrice + parseFloat( list[i].price ) * list[i].number;
        }
        return totalPrice;
    },
    setPageData: function (saveHidden, total, allSelect, noSelect, list) {
        this.setData({
            list: list,
            saveHidden: saveHidden,
            totalPrice: total,
            allSelect: allSelect,
            noSelect: noSelect,
        });
    },
    //去結(jié)算
    toPayOrder: function () {
        var data = {
            type:"cart",
            goods: []
        };

        var list = this.data.list;
        for (var i = 0; i < list.length; i++) {
            if ( !list[i].active) {
                continue;
            }
            data['goods'].push({
                "id": list[i].food_id,
                "price": list[i].price,
                "number": list[i].number
            });
        }

        wx.navigateTo({
            url: "/pages/order/index?data=" + JSON.stringify(data)
        });
    },
    //如果沒有顯示去光光按鈕事件
    toIndexPage: function () {
        wx.switchTab({
            url: "/pages/food/index"
        });
    },
    //選中刪除的數(shù)據(jù)
    deleteSelected: function () {
        var list = this.data.list;
        var goods = [];
        list = list.filter(function ( item ) {
            if( item.active ){
                goods.push( {
                    "id":item.food_id
                } )
            }

            return !item.active;
        });

        this.setPageData( this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
        //發(fā)送請(qǐng)求到后臺(tái)刪除數(shù)據(jù)
        wx.request({
            url: app.buildUrl("/cart/del"),
            header: app.getRequestHeader(),
            method: 'POST',
            data: {
                goods: JSON.stringify( goods )
            },
            success: function (res) {
            }
        });
    },
    getCartList: function () {
        var that = this;
        wx.request({
            url: app.buildUrl("/cart/index"),
            header: app.getRequestHeader(),
            success: function (res) {
                var resp = res.data;
                if (resp.code != 200) {
                    app.alert({"content": resp.msg});
                    return;
                }
                that.setData({
                    list:resp.data.list,
                    saveHidden: true,
                    totalPrice: 0.00,
                    allSelect: true,
                    noSelect: false
                });

                that.setPageData(that.getSaveHide(), that.totalPrice(), that.allSelect(), that.noSelect(), that.data.list);
            }
        });
    },
    setCart:function( food_id, number ){
        var that = this;
        var data = {
            "id": food_id,
            "number": number
        };
        wx.request({
            url: app.buildUrl("/cart/set"),
            header: app.getRequestHeader(),
            method: 'POST',
            data: data,
            success: function (res) {
            }
        });
    }
});

setCart 數(shù)據(jù)統(tǒng)一提交

問題1: .push()

JavaScript push() 方法_w3cschool? ? ?類似python中append

push() 方法可向數(shù)組的末尾添加一個(gè)或多個(gè)元素,并返回新的長度。

注意:?新元素將添加在數(shù)組的末尾。

注意:?此方法改變數(shù)組的長度。

提示:?在數(shù)組起始位置添加元素請(qǐng)使用?unshift()?方法。

問題2:? JSON.stringify(? )

JSON.stringify()方法用于將JavaScript對(duì)象轉(zhuǎn)換為JSON字符串。

下面是一個(gè)關(guān)于goods對(duì)象的例子:

const goods = {
  name: "Apple",
  price: 2.99,
  quantity: 10
};

const jsonString = JSON.stringify(goods);
console.log(jsonString);

輸出結(jié)果為:

{"name":"Apple","price":2.99,"quantity":10}

這里,goods對(duì)象被轉(zhuǎn)換為了一個(gè)JSON字符串,其中包含了對(duì)象的屬性和對(duì)應(yīng)的值。注意,JSON.stringify()方法會(huì)自動(dòng)將對(duì)象的屬性名和屬性值轉(zhuǎn)換為字符串,并且會(huì)忽略掉不可枚舉的屬性。

web/controllers/api/Cart.py

# -*- coding: utf-8 -*-
from web.controllers.api import route_api
from  flask import request,jsonify,g
from common.models.food.Food import Food
from common.models.member.MemberCart import MemberCart
from common.libs.member.CartService import CartService
from common.libs.Helper import selectFilterObj,getDictFilterField
from common.libs.UrlManager import UrlManager
from application import app,db
import json

@route_api.route("/cart/index")
def cartIndex():
    resp = {'code': 200, 'msg': '添加購物車成功~', 'data': {}}
    member_info = g.member_info
    if not member_info:
        resp['code'] = -1
        resp['msg'] = "獲取失敗,偽登錄~~"
        return jsonify(resp)
    cart_list = MemberCart.query.filter_by( member_id=member_info.id).all()
    data_cart_list = []
    if cart_list:
        food_ids = selectFilterObj( cart_list,"food_id" )
        food_map = getDictFilterField( Food,Food.id,"id",food_ids )
        for item in cart_list:
            tmp_food_info = food_map[ item.food_id ]
            tmp_data = {
                "id":item.id,
                "number":item.quantity,
                "food_id": item.food_id,
                "name":tmp_food_info.name,
                "price":str( tmp_food_info.price ),
                "pic_url": UrlManager.buildImageUrl( tmp_food_info.main_image ),
                "active":True
            }
            data_cart_list.append( tmp_data )

    resp['data']['list'] = data_cart_list
    return jsonify(resp)

@route_api.route("/cart/set", methods=["POST"])
def setCart():
    resp = {'code': 200, 'msg': '添加購物車成功~', 'data': {}}
    req = request.values
    food_id = int(req['id']) if 'id' in req else 0
    number = int(req['number']) if 'number' in req else 0
    if food_id < 1 or number < 1:
        resp['code'] = -1
        resp['msg'] = "添加購物車失敗-1~~"
        return jsonify(resp)

    member_info = g.member_info
    if not member_info:
        resp['code'] = -1
        resp['msg'] = "添加購物車失敗-2~~"
        return jsonify(resp)

    food_info = Food.query.filter_by( id =  food_id ).first()
    if not food_info:
        resp['code'] = -1
        resp['msg'] = "添加購物車失敗-3~~"
        return jsonify(resp)

    if food_info.stock < number:
        resp['code'] = -1
        resp['msg'] = "添加購物車失敗,庫存不足~~"
        return jsonify(resp)

    ret =  CartService.setItems( member_id=member_info.id,food_id = food_info.id,number = number )
    if not ret:
        resp['code'] = -1
        resp['msg'] = "添加購物車失敗-4~~"
        return jsonify(resp)
    return jsonify(resp)

@route_api.route("/cart/del", methods=["POST"])
def delCart():
    resp = {'code': 200, 'msg': '添加購物車成功~', 'data': {}}
    req = request.values
    params_goods = req['goods'] if 'goods' in req else None

    items = []
    if params_goods:
        items = json.loads(params_goods)
    if not items or len( items ) < 1:
        return jsonify(resp)

    member_info = g.member_info
    if not member_info:
        resp['code'] = -1
        resp['msg'] = "刪除購物車失敗-1~~"
        return jsonify(resp)

    ret = CartService.deleteItem( member_id = member_info.id, items = items )
    if not ret:
        resp['code'] = -1
        resp['msg'] = "刪除購物車失敗-2~~"
        return jsonify(resp)
    return jsonify(resp)

@route_api.route("/cart/del", methods=["POST"])

問題1: json.loads()

json.loads()是Python標(biāo)準(zhǔn)庫json模塊中的一個(gè)方法,用于將JSON字符串轉(zhuǎn)換為Python數(shù)據(jù)類型。它的使用方法如下所示:

import json

json_str = '{"name": "John", "age": 30, "city": "New York"}'
data = json.loads(json_str)

print(data)  # 輸出:{'name': 'John', 'age': 30, 'city': 'New York'}

在上面的例子中,我們首先導(dǎo)入了json模塊。然后,我們定義了一個(gè)JSON字符串json_str,其中包含了一個(gè)名為"name"的鍵和對(duì)應(yīng)的值"John",一個(gè)名為"age"的鍵和對(duì)應(yīng)的值30,以及一個(gè)名為"city"的鍵和對(duì)應(yīng)的值"New York"。接下來,我們使用json.loads()方法將JSON字符串轉(zhuǎn)換為Python數(shù)據(jù)類型,并將結(jié)果賦值給變量data。最后,我們打印出data的值,即轉(zhuǎn)換后的Python字典。

需要注意的是,json.loads()只適用于讀取JSON字符串,如果想要從JSON文件中讀取數(shù)據(jù),請(qǐng)使用json.load()方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-816306.html

common/libs/Helper.py

# -*- coding: utf-8 -*-
import hashlib,requests,random,string,json
from application import app,db
from common.models.member.MemberCart import MemberCart
from common.libs.Helper import getCurrentDate
class CartService():

    @staticmethod
    def deleteItem( member_id = 0,items = None ):
        if member_id < 1 or not items:
            return False
        for item in items:
            MemberCart.query.filter_by( food_id = item['id'],member_id = member_id ).delete()
        db.session.commit()
        return True

    @staticmethod
    def setItems( member_id = 0,food_id = 0,number = 0 ):
        if member_id < 1 or food_id < 1 or number < 1:
            return False
        cart_info = MemberCart.query.filter_by( food_id = food_id, member_id= member_id ).first()
        if cart_info:
            model_cart = cart_info
        else:
            model_cart = MemberCart()
            model_cart.member_id = member_id
            model_cart.created_time = getCurrentDate()

        model_cart.food_id = food_id
        model_cart.quantity = number
        model_cart.updated_time = getCurrentDate()
        db.session.add(model_cart)
        db.session.commit()
        return True

到了這里,關(guān)于flask 與小程序 購物車刪除和編輯庫存功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【微信小程序】 實(shí)現(xiàn)購物車

    【微信小程序】 實(shí)現(xiàn)購物車

    原生實(shí)現(xiàn),不使用任何框架,網(wǎng)上沒有啥好看的購物車,而且都是抄來抄去的,我來寫一個(gè)好點(diǎn)的作為參考吧,拿來就能用。 接口自行添加 。 鏈接:購物車代碼片段。圖片太大了沒辦法上傳到代碼片段,自己找?guī)讖垐D片就行。 購物車功能包括: 顯示默認(rèn)地址,或選擇地址

    2024年02月03日
    瀏覽(18)
  • 商城小程序(7.加入購物車)

    商城小程序(7.加入購物車)

    新建store目錄,并創(chuàng)建store.js文件用于管理vuex相關(guān)內(nèi)容 在store.js中 初始化store的實(shí)例對(duì)象 在main.js 中導(dǎo)入store實(shí)例對(duì)象并掛載到vue的實(shí)例上 同樣目錄下創(chuàng)建cart.js模塊 在cart.js中,初始化如下的vuex模塊 在store/store.js 模塊中,導(dǎo)入并掛載購物車中的vue模塊 商品詳情頁面測試,是

    2024年02月02日
    瀏覽(22)
  • 微信小程序(五)購物車

    微信小程序(五)購物車

    shoppingcart.wxml shoppingcart.js shoppingcart.wxss 效果圖 ?

    2024年02月16日
    瀏覽(21)
  • 商城小程序(8.購物車頁面)

    商城小程序(8.購物車頁面)

    本章主要完成pages下的cart購物頁面編寫 定義如下UI結(jié)構(gòu) 美化樣式 通過 mapState 輔助函數(shù),將Store中的cart數(shù)組映射到當(dāng)前頁面中使用: 在UI結(jié)構(gòu)中,通過v-for渲染自定義組件my-goods 打開my-goods.vue組件,為商品左側(cè)圖片區(qū)域添加radio足跡 并美化UI ,使radio組件和image組件左右布局

    2024年01月23日
    瀏覽(20)
  • 11、微信小程序——購物車

    11、微信小程序——購物車

    目錄 1、代碼分析 1.1? dom結(jié)構(gòu)分析 1.2? 全選控制反選 1.3? 反選控制全選 1.4、計(jì)算總價(jià) 1.4 加、減 2、效果、代碼演示? 1.1? dom結(jié)構(gòu)分析 購物車的組件結(jié)構(gòu)主要由兩部分組成: 多選框部分( checkbox-group ) + 全選框部分( view ) 1.2? 全選控制反選 業(yè)務(wù)邏輯: 1、全選框(選中)——

    2024年02月02日
    瀏覽(25)
  • php開發(fā)實(shí)戰(zhàn)分析(2):cookie的動(dòng)態(tài)使用(設(shè)置、獲取、刪除、猜你喜歡原理、購物車調(diào)用)

    在 PHP 中,cookie 是一種用于在客戶端(瀏覽器)和服務(wù)器之間存儲(chǔ)數(shù)據(jù)的一種機(jī)制。 它們通常用于跟蹤和識(shí)別用戶,并存儲(chǔ)用戶的偏好設(shè)置。下面是一些常見的用法和函數(shù)來操作 cookie。 可以使用 setcookie() 函數(shù)來設(shè)置 cookie。該函數(shù)有多個(gè)參數(shù),其中最重要的是名稱和值。下

    2024年02月15日
    瀏覽(22)
  • 微信小程序 - 商城項(xiàng)目 - 購物車

    微信小程序 - 商城項(xiàng)目 - 購物車

    ? 引入 WeUI:

    2023年04月22日
    瀏覽(21)
  • 模擬瑞幸小程序購物車

    模擬瑞幸小程序購物車

    是根據(jù)渡一袁老師的大師課寫的,如有什么地方存在問題,還請(qǐng)大家指出來喲ど?????????う?~

    2024年01月16日
    瀏覽(22)
  • 微信小程序購物車頁面實(shí)現(xiàn)

    微信小程序購物車頁面實(shí)現(xiàn)

    目錄 32.商品加入購物車邏輯實(shí)現(xiàn)(前端) 33.購物車頁面收貨地址實(shí)現(xiàn) 34.購物車商品列表顯示實(shí)現(xiàn) 37.購物車商品復(fù)選框選中業(yè)務(wù)處理 38.購物車全選復(fù)選框選中業(yè)務(wù)處理 39.購物車商品數(shù)量編輯實(shí)現(xiàn) 40.購物車商品數(shù)量為0判定是否刪除 42.商品詳情立即購買邏輯實(shí)現(xiàn) 1.先在produc

    2024年02月11日
    瀏覽(21)
  • 微信小程序?qū)崿F(xiàn)商品加入購物車案例

    微信小程序?qū)崿F(xiàn)商品加入購物車案例

    思考: 購物車中的數(shù)據(jù)保存在哪里?用哪種數(shù)據(jù)結(jié)構(gòu)進(jìn)行保存? 小程序中可能有多個(gè)頁面需要對(duì)購物車中的數(shù)據(jù)進(jìn)行操作,因此我們想到把數(shù)據(jù)存到全局中。可以使用 wx.setStorageSync() 儲(chǔ)存,用 wx.getStorageSync() 進(jìn)行獲取,以數(shù)組格式方便對(duì)數(shù)據(jù)進(jìn)行操作。 一、商品加入購物車

    2024年02月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包