django-评论
视图函数views.py
# 订单评论
class OrderCommentView(View):
def get(self, request, order_id):
# 获取用户信息
user = request.user
# 获取用户所有订单的信息
try:
order = OrderInfo.objects.get(user=user, order_id=order_id)
except Exception as e:
return redirect(reverse("user:order"))
# 获取订单中的商品信息
order_skus = OrderGoods.objects.filter(order_id=order.order_id)
# 遍历订单中的商品信息
for order_sku in order_skus:
# 计算小计
amount = order_sku.price * order_sku.count
# 动态给order_skus增加小计amount 保存订单小计
order_sku.amount = amount # 动态给order添加商品信息
order.order_skus = order_skus
# 动态给order添加支付信息
order.status_name = OrderInfo.ORDER_STATUS[order.order_status]
return render(request, 'order_comment.html', {'order':order}) def post(self, request, order_id):
"""处理评论内容"""
user = request.user
# 校验数据
if not order_id:
return redirect(reverse('user:order')) try:
order = OrderInfo.objects.get(order_id=order_id, user=user)
except OrderInfo.DoesNotExist:
return redirect(reverse("user:order")) # 获取评论条数
total_count = request.POST.get("total_count")
total_count = int(total_count) # 循环获取订单中商品的评论内容
for i in range(1, total_count + 1):
# 获取评论的商品的id
sku_id = request.POST.get("sku_%d" % i) # sku_1 sku_2
# 获取评论的商品的内容
content = request.POST.get('content_%d' % i, '') # cotent_1 content_2 content_3
try:
order_goods = OrderGoods.objects.get(order=order, sku_id=sku_id)
except OrderGoods.DoesNotExist:
continue order_goods.comment = content
order_goods.save() order.order_status = 5 # 已完成
order.save() return redirect(reverse("user:order", kwargs={"page": 1}))
模板order_comment.html中
{% extends 'base_user_center.html' %}
{% load staticfiles %}
{% block title %}天天生鲜-用户中心{% endblock %}
{% block page_title %}用户中心{% endblock page_title %}
{% block right_content %}
        <div class="right_content clearfix">
            <h3 class="common_title2">订单评价</h3>
                <ul class="order_list_th w978 clearfix">
                    <li class="col01">{{order.create_time}}</li>
                    <li class="col02">订单号:{{order.order_id}}</li>
                    <li class="col02 stress">{{order.status_name}}</li>
                </ul>
            <form method="post">
                {% csrf_token %}
                {# 订单id #}
                <input type="hidden" name="order_id" value="{{order.order_id}}">
                {# 订单中有几个商品 #}
                <input type="hidden" name="total_count" value="{{order.order_skus|length}}">
                {% for order_sku in order.order_skus %}
                <table class="order_list_table w980">
                    <tbody>
                        <tr>
                            <td width="80%">
                                <ul class="order_goods_list clearfix">
                                    <li class="col01"><img src="{{ order_sku.sku.image.url }}"></li>
                                    <li class="col02">{{order_sku.sku.name}}<em>{{order_sku.price}}/{{order_sku.sku.unite}}</em></li>
                                    <li class="col03">{{order_sku.count}}</li>
                                </ul>
                            </td>
                            <td width="20%">{{order_sku.amount}}元</td>
                        </tr>
                    </tbody>
                </table>
                <div class="site_con">
                    <input type="hidden" name="sku_{{forloop.counter}}" value="{{order_sku.sku.id}}">
                    <div class="form_group form_group2">
                        <label>评价内容:</label>
                        <textarea class="site_area" name="content_{{forloop.counter}}"></textarea>
                    </div>
                </div>
                {% endfor %}
                <input type="submit" name="" value="提交" class="info_submit">
            </form>
        </div>
{% endblock right_content %}
详情页面detail.html中
{% extends 'layout/base_list_detail.html' %}
{% load staticfiles %}
{% block title %}天天生鲜-商品详情{% endblock title %}
{% block main_content %}
    <div class="breadcrumb">
        <a href="#">全部分类</a>
        <span>></span>
        <a href="#">{{ sku.type.name }}</a>
        <span>></span>
        <a href="#">商品详情</a>
    </div>
    <div class="goods_detail_con clearfix">
        <div class="goods_detail_pic fl"><img src="{{ sku.image.url }}"></div>
        <div class="goods_detail_list fr">
            <h3>{{ sku.name }}</h3>
            <p>{{ sku.desc }}</p>
            <div class="prize_bar">
                <span class="show_pirze">¥<em>{{ sku.price }}</em></span>
                <span class="show_unit">单  位:{{ sku.unite }}</span>
            </div>
            <div class="goods_num clearfix">
                <div class="num_name fl">数 量:</div>
                <div class="num_add fl">
                    <input type="text" class="num_show fl" value="1">
                    <a href="javascript:;" class="add fr">+</a>
                    <a href="javascript:;" class="minus fr">-</a>
                </div>
            </div>
            <div>
                <p>其他规格:</p>
                <ul>
                    {% for sku in same_spu_skus %}
                        <li><a href="{% url 'goods:detail' sku.id %}">{{ sku.name }}</a></li>
                    {% endfor %}
                </ul>
            </div>
            <div class="total">总价:<em>16.80元</em></div>
            <div class="operate_btn">
                {% csrf_token %}
                <a href="javascript:;" class="buy_btn">立即购买</a>
                <a href="javascript:;" sku_id="{{ sku.id }}" class="add_cart" id="add_cart">加入购物车</a>
            </div>
        </div>
    </div>
    <div class="main_wrap clearfix">
        <div class="l_wrap fl clearfix">
            <div class="new_goods">
                <h3>新品推荐</h3>
                <ul>
                    {% for sku in new_skus %}
                    <li>
                        <a href="{% url 'goods:detail' sku.id %}"><img src="{{ sku.image.url }}"></a>
                        <h4><a href="{% url 'goods:detail' sku.id %}">{{ sku.name }}</a></h4>
                        <div class="prize">¥{{ sku.price }}</div>
                    </li>
                    {% endfor %}
                </ul>
            </div>
        </div>
        <div class="r_wrap fr clearfix">
            <ul class="detail_tab clearfix">
                <li id="tag_detail" class="active">商品介绍</li>
                <li id="tag_comment">评论</li>
            </ul>
            <div class="tab_content" id="order_content">
                <dl>
                    <dt>商品详情:</dt>
                    <dd>{{ sku.goods.detail|safe }}</dd>
                </dl>
            </div>
            <div class="tab_content" id="order_comment" style="display: none">
                <dl>
                    {% for order in sku_orders %}
                    <dt>评论时间:{{ order.update_time }}  用户名:{{ order.order.user.username }}</dt>
                    <dd>评论内容:{{ order.comment }}</dd>
                    {% endfor %}
                </dl>
            </div>
        </div>
    </div>
{% endblock main_content %}
{% block bottom %}
    <div class="add_jump"></div>
{% endblock bottom %}
{% block bottomfiles %}
    <script type="text/javascript" src="{% static 'js/jquery-1.12.4.min.js' %}"></script>
    <script type="text/javascript">
         $('#tag_detail').click(function () {
            $('#tag_comment').removeClass('active')
            $(this).addClass('active')
            $('#order_content').show()
            $('#order_comment').hide()
        })
        $('#tag_comment').click(function () {
            $('#tag_detail').removeClass('active')
            $(this).addClass('active')
            $('#order_content').hide()
            $('#order_comment').show()
        })
        update_goods_amount()
        // 计算商品的总价格
        function update_goods_amount() {
            // 获取商品的单价和数量
            price = $('.show_pirze').children('em').text()
            count = $('.num_show').val()
            // 计算商品的总价
            price = parseFloat(price)
            count = parseInt(count)
            amount = price*count
            // 设置商品的总价
            $('.total').children('em').text(amount.toFixed(2)+'元')
        }
        // 增加商品的数量
        $('.add').click(function () {
            // 获取商品原有的数目
            count = $('.num_show').val()
            // 加1
            count = parseInt(count)+1
            // 重新设置商品的数目
            $('.num_show').val(count)
            // 更新商品的总价
            update_goods_amount()
        })
        // 减少商品的数量
        $('.minus').click(function () {
            // 获取商品原有的数目
            count = $('.num_show').val()
            // 减1
            count = parseInt(count)-1
            if (count <= 0){
                count = 1
            }
            // 重新设置商品的数目
            $('.num_show').val(count)
            // 更新商品的总价
            update_goods_amount()
        })
        // 手动输入商品的数量
        $('.num_show').blur(function () {
            // 获取用户输入的数目
            count = $(this).val()
            // 校验count是否合法
            if (isNaN(count) || count.trim().length==0 || parseInt(count) <=0){
                count = 1
            }
            // 重新设置商品的数目
            $(this).val(parseInt(count))
            // 更新商品的总价
            update_goods_amount()
        })
        // 获取add_cart div元素左上角的坐标
        var $add_x = $('#add_cart').offset().top;
        var $add_y = $('#add_cart').offset().left;
        // 获取show_count div元素左上角的坐标
        var $to_x = $('#show_count').offset().top;
        var $to_y = $('#show_count').offset().left;
        $('#add_cart').click(function(){
            // 获取商品id和商品数量
            sku_id = $(this).attr('sku_id') // attr prop
            count = $('.num_show').val()
            csrf = $('input[name="csrfmiddlewaretoken"]').val()
            // 组织参数
            params = {'sku_id':sku_id, 'count':count, 'csrfmiddlewaretoken':csrf}
            // 发起ajax post请求,访问/cart/add, 传递参数:sku_id count
            $.post('/cart/add', params, function (data) {
                if (data.res == 5){
                    // 添加成功
                    $(".add_jump").css({'left':$add_y+80,'top':$add_x+10,'display':'block'})
                    $(".add_jump").stop().animate({
                        'left': $to_y+7,
                        'top': $to_x+7},
                        "fast", function() {
                            $(".add_jump").fadeOut('fast',function(){
                                // 重新设置用户购物车中商品的条目数
                                $('#show_count').html(data.total_count);
                            });
                    });
                }
                else{
                    // 添加失败
                    alert(data.errmsg)
                }
            })
        })
    </script>
{% endblock bottomfiles %}
django-评论的更多相关文章
- Django--评论功能实现和用户登录
		1.确定实现评论功能的方式 1.第三方社会化评论插件(有言.多说.网易云跟帖等) 优点:可以直接用,紧急时开发快 缺点:评论存储在第三方,第三方挂了就不弄用 2.Django评论库 django-co ... 
- 免费开源的 HelloDjango 系列教程,结束还是开始?
		作者:HelloGitHub-追梦人物 我们已经成功地开发了一个功能比较完备的个人博客,是时候来总结一下我们的工作了.博客系列完整的源代码地址: https://github.com/HelloGit ... 
- Django博客功能实现—文章评论功能
		功能:在A网页提交一个评论Forms_B,提交之后自动刷新页面,能够显示刚刚的画面思路:利用一个已经创建的表单,通过视图让其在网页中表现出来,填写玩信息之后提交,会提交到一个新的视图里面去做接受,接受 ... 
- django 1.8  评论库comments配置问题
		comments库是django框架内置的评论库,可以快速搭建网站需要的评论系统.不过1.8的配置和1.6的出现了一点小小配置,由于刚刚接触,按照网上的文档配置,需要在 settings.py的INS ... 
- Django Web开发【7】 投票与评论
		为了让用户更好的发现和共享bookmark,可以提供投票与评论功能.现在我们的主页还是一个很简单的欢迎页面,我们可以让用户在主页共享自己的bookmark,此外,用户还可以对主页的bookmark进行 ... 
- Django contrib Comments 评论模块详解
		老版本的Django中自带一个评论框架.但是从1.6版本后,该框架独立出去了,也就是本文的评论插件. 这个插件可给models附加评论,因此常被用于为博客文章.图片.书籍章节或其它任何东西添加评论. ... 
- Django使用forms来实现评论功能
		貌似Django从版本1.6开始就放弃了对自带的comments的使用,具体原因未查,但是现在使用Django的内部的模块也可以实现评论功能,那就是借助于forms模块,下面是我的一个小例子. 环境准 ... 
- [个人网站搭建]·Django增加评论功能(Python3)
		[个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ... 
- $Django 站点:样式--文章--分类文章--文章详情--文章评论点赞--文章评论点赞统计(数据库优化)
		<h3>个人站点下的</h3> 知识点 url (r'(?P<username>\w+)/p/(?P<id>\d+)', xiangxi,name='x ... 
- django表格form无法保存评论排查步骤
		初学django项目,在网上找了个blog教程,还是很不错的,这里感谢一下博主https://www.zmrenwu.com/post/2/ 这个项目适合django初学者,是一个完整的blog项目 ... 
随机推荐
- mapreduce 函数入门   一
			MapReduce 程序的业务编码分为两个大部分,一部分配置程序的运行信息,一部分 编写该 MapReduce 程序的业务逻辑,并且业务逻辑的 map 阶段和 reduce 阶段的代码分别继 承 Ma ... 
- 解决wireshark抓包校验和和分片显示异常
			问题描述: 在使用wireshark抓取报文时,发现从10.81.2.92发过来的报文绝大部分标记为异常报文(开启IPv4和TCP checksum) 分析如下报文,发现http报文(即tcp pay ... 
- 小程序 - 底部导航栏“tabBar”
			小程序底部导航 1.app.json页面配置: { "pages": [ "pages/movie/movie", "pages/cinema/cin ... 
- Linux下常用目录有哪些?分别有什么作用?
			/boot:这个目录是用来存放与系统启动相关的文件 /root:root用户的家目录 /bin:存放大部分的二进制的可执行文件,也就是大部分的linux命令. /tmp:这个文件目录一般是公共的,也就 ... 
- Flutter 宽高比(比率)控件 AspectRatio
			const AspectRatio({ Key key, @required this.aspectRatio, Widget child,}) void main() { runApp( n ... 
- Docker 搭建简单 LVS
			LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基 ... 
- 阿里云服务器连接ftp服务(软件的使用)
			首先你需要有一个阿里云的ECS服务器 开通了宽带之后,ECS服务器就可以上网了 可以在本地电脑cmd控制台运行mstsc.exe启动远程桌面连接 windows+R 计算机名输入ECS服务器的公网ip ... 
- lnmp1.4安装包
			https://lnmp.org/install.html nginx中虚拟机中的配置 location ~ .*\.(php|php5)?$ { try_files $uri =404; fastc ... 
- NET MVC 上传文件
			1.HTML @using (Html.BeginForm("UploadFile", "Student", FormMethod.Post, new { en ... 
- Vert.x(vertx)发送 HTTP/HTTPS请求
			Vert.x Web服务有两种协议,一种是HTTP,另外一种是使用ssl的HTTPS,请求的方式有五种,分别是get.post.put.delete.head.为了简单,服务端主要实现对HTTP协议的 ... 
