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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

1生成結算頁面的相關數據

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

def place_order(request):

if request.method == 'GET':

獲取當前登陸系統的用戶對象

user = request.user

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

計算小計和總價

total_price = 0

for cart in carts:

小計金額

price = cart.goods.shop_price * cart.nums

給cart添加一個小計的屬性并賦值

cart.goods_price = price

總金額

total_price += price

獲取當前登陸系統的用戶的收貨地址信息

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 %}

金額結算

總金額結算

共{{ num }}件商品,總金額{{ total_price }}元運費:10元實付款:{{ total_price | add:'10' }}元

ajax異步請求傳輸數據并進行提示

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

$('#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){

{#創建訂單#}

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標簽中name為address_ridio的標簽

獲取按鈕中name屬性為address_ridio的一系列標簽的選擇狀態

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提交訂單時后臺處理函數

def order(request):

if request.method == 'POST':

1.獲取收貨地址值

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

2.創建訂單

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

獲取訂單編號

order_sn = get_order_sn()

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

is_select=True)

計算訂單總金額

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.創建訂單詳情

for cart in shop_cart:

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

goods_nums=cart.nums)

4.刪除購物車中已結算的商品

刪除數據庫中的商品

shop_cart.delete()

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

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

for se_goods in session_goods[:]:

se_goods結果[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))

獲取登陸系統用戶的id值

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

查詢當前用戶產生的訂單信息

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

status = OrderInfo.ORDER_STATUS

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

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’ %}表示把其他頁面的內容直接拿過來在本頁面用

{% include 'base_user.html' %}

‘xxx.html’中內容

當點擊選項時,頁面會對應出現activate中對應傳過來的路由

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

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

  • · 收貨地址

視圖函數中引入activate

def user_info(request):

if request.method == 'GET':

activate = 'info'

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

4.文件部署

當需要對頁面進行分頁設置的時候,可以在settings中設置ORDER_NUMBER = 3,然后再,需要使用的位置導入這個變量。

當部署文章的時候,端口號設置成80端口時,訪問的時候可以不加端口號訪問。

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

from goods import views

path('', views.index),

上面表示從index所在的goods應用中導入views,然后將訪問應用設置成空,最后設置所訪問的主頁

4.1直接訪問index下中間件設置訪問攔截

由于index主頁不需要進行訪問攔截,故需要重新設置中間件登陸校驗

主要添加以下兩句

if path == '/':

return None

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

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

全部代碼如下:

class LoggingMiddleware(MiddlewareMixin):

def process_request(self, request):

攔截請求之前的函數

判斷是否處于登陸狀態

1.給request.user屬性賦值,賦值為當前登陸系統的用戶

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

if user_id:

拿到用戶對象

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

請求中的用戶屬性改為當前登陸用戶對象

request.user = user

2 .登陸校驗,需區分哪些地址需要做登陸校驗,哪些地址不需要做登陸校驗

path = request.path

if path == '/':

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

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

return None

不需要做登陸校驗的地址

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):

當前path路徑為不需要做登陸校驗的路由,則直接訪問對應頁面

return None

if not user_id:

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。