日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

html天天生鲜项目,day54-天天生鲜项目订单管理

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html天天生鲜项目,day54-天天生鲜项目订单管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1生成結(jié)算頁面的相關(guān)數(shù)據(jù)

生成提交頁面的商品種類及小計(jì),總價等信息

def place_order(request):

if request.method == 'GET':

獲取當(dāng)前登陸系統(tǒng)的用戶對象

user = request.user

carts = ShoppingCart.objects.filter(user=user, is_select=True).all()

計(jì)算小計(jì)和總價

total_price = 0

for cart in carts:

小計(jì)金額

price = cart.goods.shop_price * cart.nums

給cart添加一個小計(jì)的屬性并賦值

cart.goods_price = price

總金額

total_price += price

獲取當(dāng)前登陸系統(tǒng)的用戶的收貨地址信息

user_addrss = UserAddress.objects.filter(user=user).all()

return render(request, 'place_order.html', {'carts': carts,

'total_price': total_price, 'num': len(carts),

'user_address': user_addrss})

寄送地址

寄送到:

{% for address in user_address %}

{{ address.address }}

({{ address.signer_name }} 收 )

{{ address.signer_mobile }}

{% endfor %}

所提交的商品詳情頁面

{% for cart in carts %}

  • {{ forloop.counter }}
  • {{ cart.goods.name }}
  • 500g
  • {{ cart.goods.shop_price }}元
  • {{ cart.nums }}
  • {{ cart.goods_price }}元

{% endfor %}

金額結(jié)算

總金額結(jié)算

共{{ num }}件商品,總金額{{ total_price }}元運(yùn)費(fèi):10元實(shí)付款:{{ total_price | add:'10' }}元

ajax異步請求傳輸數(shù)據(jù)并進(jìn)行提示

多對多數(shù)據(jù)表,中間表中只有關(guān)聯(lián)的兩個表的外鍵,而將多對多的中間表自己定義成另一個表格,則除了添加兩個一對多,還可以自己添加其他的一些字段;

$('#order_btn').click(function() {

localStorage.setItem('order_finish', 2);

{#判斷是否選擇收貨地址#}

var address_radio = $('input[name="address_radio"]')

for(var i=0;i

if(address_radio[i].checked == true){

var ad_id = address_radio[i].value;

}

}

if(ad_id){

{#創(chuàng)建訂單#}

var csrf = $('input[name="csrfmiddlewaretoken"]').val()

$.ajax({

url:'/order/order/',

type:'POST',

data:{'ad_id':ad_id},

dataType:'json',

headers:{'X-CSRFToken':csrf},

success:function (data) {

$('.popup p').text('提交訂單成功')

$('.popup_con').fadeIn('fast', function() {

setTimeout(function(){

$('.popup_con').fadeOut('fast',function(){

window.location.href = '{% url 'goods:index' %}';

});

},3000)

});

},

error:function (data) {

}

})

}else {

{#沒有收貨地址,修改彈窗的信息“提交訂單失敗”#}

$('.popup p').text('提交訂單失敗(請選擇收貨地址)')

$('.popup_con').fadeIn('fast', function() {

setTimeout(function(){

$('.popup_con').fadeOut('fast',function(){

{#window.location.href = '{% url 'goods:index' %}';#}

});

},3000)

});

}

});

收貨地址選擇按鈕判斷

$('input[name="address_ridio"]')獲取input標(biāo)簽中name為address_ridio的標(biāo)簽

獲取按鈕中name屬性為address_ridio的一系列標(biāo)簽的選擇狀態(tài)

var address_radio = $('input[name="address_radio"]')

for(var i=0;i

if(address_radio[i].checked == true){

var ad_id = address_radio[i].value;

}

}

2提交訂單時后臺處理函數(shù)

def order(request):

if request.method == 'POST':

1.獲取收貨地址值

ad_id = request.POST.get('ad_id')

2.創(chuàng)建訂單

user_id = request.session.get('user_id')

獲取訂單編號

order_sn = get_order_sn()

shop_cart = ShoppingCart.objects.filter(user_id=user_id,

is_select=True)

計(jì)算訂單總金額

order_mount = 0

for cart in shop_cart:

order_mount += cart.goods.shop_price * cart.nums

收貨信息

user_address = UserAddress.objects.filter(pk=ad_id).first()

order = OrderInfo.objects.create(user_id=user_id, order_sn=order_sn,

order_mount=order_mount, address=user_address,

signer_name=user_address.signer_name,

signer_mobile=user_address.signer_mobile)

3.創(chuàng)建訂單詳情

for cart in shop_cart:

OrderGoods.objects.create(order=order, goods=cart.goods,

goods_nums=cart.nums)

4.刪除購物車中已結(jié)算的商品

刪除數(shù)據(jù)庫中的商品

shop_cart.delete()

session_goods = request.session.get('goods')

刪除session中已選擇(結(jié)算)的物品

for se_goods in session_goods[:]:

se_goods結(jié)果[goods_id, nums, is_select]

if se_goods[2]:

session_goods.remove(se_goods)

request.session['goods'] = session_goods

return JsonResponse({'code': 200, 'msg': '請求成功'})

分頁

{% if orders.has_previous %}

上一頁

{% endif %}

{% for i in orders.paginator.page_range %}

{{ i }}

{% endfor %}

{% if orders.has_next %}

下一頁

{% endif %}

分頁

def user_order(request):

if request.method == 'GET':

activate = 'order'

page = int(request.GET.get('page', 1))

獲取登陸系統(tǒng)用戶的id值

user_id = request.session.get('user_id')

查詢當(dāng)前用戶產(chǎn)生的訂單信息

orders = OrderInfo.objects.filter(user_id=user_id)

status = OrderInfo.ORDER_STATUS

分頁,ORDER_NUMBER為工程目錄中設(shè)置的每頁顯示的信息數(shù)量

pg = Paginator(orders, ORDER_NUMBER)

my_page = pg.page(page)

return render(request, 'user_center_order.html',

{'orders': my_page, 'status': status,'activate': activate}

3按鈕頁面選擇

在html頁面中嵌入{% include ‘xxx.html’ %}表示把其他頁面的內(nèi)容直接拿過來在本頁面用

{% include 'base_user.html' %}

‘xxx.html’中內(nèi)容

當(dāng)點(diǎn)擊選項(xiàng)時,頁面會對應(yīng)出現(xiàn)activate中對應(yīng)傳過來的路由

  • {% if activate == 'info' %} class = "active" {% endif %}>· 個人信息

  • {% if activate == 'order' %} class = "active" {% endif %}>· 全部訂單

  • · 收貨地址

視圖函數(shù)中引入activate

def user_info(request):

if request.method == 'GET':

activate = 'info'

return render(request, 'user_center_info.html', {'activate': activate})

4.文件部署

當(dāng)需要對頁面進(jìn)行分頁設(shè)置的時候,可以在settings中設(shè)置ORDER_NUMBER = 3,然后再,需要使用的位置導(dǎo)入這個變量。

當(dāng)部署文章的時候,端口號設(shè)置成80端口時,訪問的時候可以不加端口號訪問。

當(dāng)需要直接輸入網(wǎng)址(不帶端口后的路由)就訪問某個指定的網(wǎng)頁時,可以在工程目錄的urls文件中的urlpatterns中添加首頁路徑

from goods import views

path('', views.index),

上面表示從index所在的goods應(yīng)用中導(dǎo)入views,然后將訪問應(yīng)用設(shè)置成空,最后設(shè)置所訪問的主頁

4.1直接訪問index下中間件設(shè)置訪問攔截

由于index主頁不需要進(jìn)行訪問攔截,故需要重新設(shè)置中間件登陸校驗(yàn)

主要添加以下兩句

if path == '/':

return None

由于訪問地址都會自動在最后加/,所以不加路由訪問的時候地址就是http://127.0.0.1:80/,當(dāng)獲取到路由的時候一般都是('/user/register/')這種格式,所以當(dāng)直接將/加入到免登陸訪問頁面的時候,所有頁面都會面登陸訪問;故要將其分開來單獨(dú)判斷。

也可以在免登陸訪問的路由列表中加入'^/$'使用正則的單詞開頭和單詞結(jié)尾來對其進(jìn)行限制。則不需要單獨(dú)對其進(jìn)行判斷

全部代碼如下:

class LoggingMiddleware(MiddlewareMixin):

def process_request(self, request):

攔截請求之前的函數(shù)

判斷是否處于登陸狀態(tài)

1.給request.user屬性賦值,賦值為當(dāng)前登陸系統(tǒng)的用戶

user_id = request.session.get('user_id')

if user_id:

拿到用戶對象

user = User.objects.filter(pk=user_id).first()

請求中的用戶屬性改為當(dāng)前登陸用戶對象

request.user = user

2 .登陸校驗(yàn),需區(qū)分哪些地址需要做登陸校驗(yàn),哪些地址不需要做登陸校驗(yàn)

path = request.path

if path == '/':

如果直接訪問不帶路由的地址(通常為主頁),則不用進(jìn)行強(qiáng)制登陸(也可在下面不用校驗(yàn)的集合中寫成

# '^/$‘,則此處不用寫這個if語句)。

return None

不需要做登陸校驗(yàn)的地址

not_need_check = ['/user/register/', '/user/login/', '/goods/index/',

'/goods/detail/.*/', '/cart/.*/']

for check_path in not_need_check:

if re.match(check_path, path):

當(dāng)前path路徑為不需要做登陸校驗(yàn)的路由,則直接訪問對應(yīng)頁面

return None

if not user_id:

path為需要做登陸校驗(yàn)的路由時,判斷用戶是否登陸,沒有登陸則跳轉(zhuǎn)到登陸頁面

return HttpResponseRedirect(reverse('user:login'))

總結(jié)

以上是生活随笔為你收集整理的html天天生鲜项目,day54-天天生鲜项目订单管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。