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-天天生鲜项目订单管理相关推荐

  1. Java电商订单_Java电商项目学习(十) 订单管理模块开发

    订单管理接口设计前台订单管理接口 后台订单管理接口 创建订单控制器中传入参数为session和收货地址ID,首先校验用户是否登录,如果是则将用户id和shippingId交给服务层控制函数处理: 服务 ...

  2. 微信小程序商城项目实战(第十篇:订单管理)

    订单管理 订单页面 分析 代码实现 效果图展示 订单详情页 分析 详解 效果图 付完款的 未付款的 订单页面 分析 顶部改为"我的订单" 上方为导航栏:全部.待付款.待发货.退款/ ...

  3. django项目(天天生鲜电商项目)

    django项目(天天生鲜电商项目)代码如下: github链接(这个是自己写的源码,喜欢的给个星) 天天生鲜项目视频(这个是python全栈的视频,好不容易找到的, 这个包含天天生鲜项目自带的源码) ...

  4. Java毕设项目基于Web生鲜O2O订购平台的设计与实现(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目基于Web生鲜O2O订购平台的设计与实现(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + H ...

  5. JAVA项目之天天酷跑-Day02

    JAVA项目之天天酷跑-Day02 开始游戏界面制作 分析要求 MainFrame类 创建MainFrame类 MainFrame构造函数 实现开始游戏按钮(不添加鼠标事件监听) 实现帮助和退出按钮 ...

  6. 计算机三种不同类型的用户账户,网络操作系统——Windows Server 2008篇 教学课件 1 作者 刘本军 李建利 [项目5]用户与组的管理.ppt...

    网络操作系统--Windows Server 2008篇 教学课件 1 作者 刘本军 李建利 [项目5]用户与组的管理.ppt (76页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就 ...

  7. 巨人java生鲜app下载_Java生鲜电商平台-生鲜电商商品中心系统设计与数据库架构(生鲜小程序/APP)...

    Java生鲜电商平台-生鲜电商商品中心系统设计与数据库架构(生鲜小程序/APP) 说明:Java生鲜电商平台-生鲜电商商品中心系统设计与数据库架构(生鲜小程序/APP) 日日鲜-商品中心系统设计 项目 ...

  8. Java项目:后台管理系统脚手架项目(java+SpringBoot+FreeMarker+mysql+JSP)

    源码获取:博客首页 "资源" 里下载! 项目描述: 这是一个基于SpringBoot框架开发的后台管理系统脚手架项目.之所以称为脚手架项目,是因为这个项目复用性很强,如果以后有其他 ...

  9. Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 一款基于Springboot+Vue的电商项目,前后端分离项目,前台后台都有,前台商品展示购买,购物车分类, ...

  10. 将一个普通的java项目转化为maven项目

    在学习Spring事务时,我参考的书的源码不是maven项目,整本书依赖的100多个jar包都在一个文件夹里,我本来对spring每个模块的学习源码都放在一个Github仓库里,每一个项目都是mave ...

最新文章

  1. Java中的Cookie(1)——基本操作
  2. 数据库远程访问数据库服务器网站和端口问题
  3. 两种控制器的跳转与回跳
  4. html5父子页面数据传递,使用iframe标签嵌套页面时 如何进行父子页面通讯/传值...
  5. 浅谈.NET中的类型和装箱、拆箱原理
  6. [Jarvis OJ - PWN]——Smashes
  7. Hadoop(一)之初识大数据与Hadoop
  8. 另一种遍历Map的方式: Map.Entry 和 Map.entrySet()
  9. plsql如何执行存储过程_如何理解Spark应用的执行过程
  10. 京东:应届博士生年薪最高达200万元!确认过眼神,是我羡慕不来的人
  11. Vue条件渲染(v-if和v-show的区别)
  12. 全网首发:字体引擎中字符图像的插槽
  13. excel删除无尽空白行_Excel 快速删除空白行
  14. unicode 特殊字符表 特殊符号
  15. 基于Springboot拦截器的AES报文解密
  16. 那种语言不属于w3c标准,前端之W3C标准及规范
  17. 23考研需要准备哪些学习资料?
  18. 复数乘法 哔哩哔哩2020校园招聘面试题详解
  19. 华为微博回应鸿蒙,果不其然,华为放出终极大招!鸿蒙操作系统下月正式推送。就在刚刚,华为开通了鸿蒙操作系统的官方微博,关注人数已接近八万。 ... - 雪球...
  20. 当了一次人肉SMT贴片机后的感悟

热门文章

  1. 一文读懂什么是硬件开发、智能硬件、硬件系统?
  2. 通信原理 | 信道的概念和实际信道
  3. MySQL单元三试题与答案_2016年3月三级MySQL数据库试题及答案
  4. 清华大学李涓子教授:AI系统如何实现认知推理?
  5. python编写txt阅读器程序_Python 制作简易小说阅读器
  6. 网络蚂蚁的最基本原理nbsp;-nbsp;httpnbsp;1.1
  7. editplus html格式化,Editplus 格式化js,css,html工具
  8. 手把手教你迁移微信小程序到 QQ 浏览器
  9. 再战图形,一图一世界
  10. DIGITS安装和配置