Django电商项目(九)用户中心-订单页、支付宝对接、订单评论

2023-10-31

订单支付页面

订单支付模板

{% extends 'base_user_center.html' %}
{% load staticfiles %}
{% block right_content %}
		<div class="right_content clearfix">
                {% csrf_token %}
				<h3 class="common_title2">全部订单</h3>
                {% for order in order_page %}
				<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>

				<table class="order_list_table w980">
					<tbody>
						<tr>
							<td width="55%">
                                {% for order_sku in order.order_skus %}
								<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>
									<li class="col04">{{ order_sku.amount }}元</li>
								</ul>
								{% endfor %}
							</td>
							<td width="15%">{{ order.total_price|add:order.transit_price }}(含运费:{{ order.transit_price }})元</td>
							<td width="15%">{{ order.status_name }}</td>
							<td width="15%"><a href="#" order_id="{{ order.order_id }}" status="{{ order.order_status }}" class="oper_btn">去付款</a></td>
						</tr>
					</tbody>
				</table>
				{% endfor %}
				<div class="pagenation">
                    {% if order_page.has_previous_page %}
					<a href="{% url 'user:order' order_page.previous_page_number %}"><上一页</a>
                    {% endif %}
                    {% for pindex in pages %}
                        {% if pindex == order_page.number %}
					        <a href="{% url 'user:order' pindex %}" class="active">{{ pindex }}</a>
                        {% else %}
					        <a href="{% url 'user:order' pindex %}">{{ pindex }}</a>
                        {% endif %}
					{% endfor %}
                    {% if order_page.has_next_page %}
					<a href="{% url 'user:order' order_page.next_page_number %}">下一页></a>
                    {% endif %}
				</div>
		</div>
{% endblock right_content %}
{% block bottomfiles %}
    <script src="{% static 'js/jquery-1.12.4.min.js' %}"></script>
    <script>
    $('.oper_btn').each(function () {
        // 获取支付状态
        status = $(this).attr('status')
        if (status == 1){
            $(this).text('去支付')
        }
        else if (status == 4){
            $(this).text('去评价')
        }
        else if (status == 5){
            $(this).text('已完成')
        }
    })

    $('.oper_btn').click(function () {
        // 获取status
        status = $(this).attr('status')
        // 获取订单id
        order_id = $(this).attr('order_id')
        if (status == 1){
            // 进行支付
            csrf = $('input[name="csrfmiddlewaretoken"]').val()
            // 组织参数
            params = {'order_id':order_id, 'csrfmiddlewaretoken':csrf}
            // 发起ajax post请求,访问/order/pay, 传递参数:order_id
            $.post('/order/pay', params, function (data) {
                if (data.res == 3){
                    // 引导用户到支付页面
                    window.open(data.pay_url)
                    // 浏览器访问/order/check, 获取支付交易的结果
                    // ajax post 传递参数:order_id
                    $.post('/order/check', params, function (data){
                        if (data.res == 3){
                            alert('支付成功')
                            // 刷新页面
                            location.reload()
                        }
                        else{
                            alert(data.errmsg)
                        }
                    })
                }
                else{
                    alert(data.errmsg)
                }
            })
        }
        else if (status == 4){
            // 其他情况
            // 跳转到评价页面
            location.href = '/order/comment/'+order_id
        }
    })
    </script>
{% endblock bottomfiles %}

订单支付view

# ajax post
# 前端传递的参数:订单id(order_id)
# /order/pay
class OrderPayView(View):
    '''订单支付'''
    def post(self, request):
        '''订单支付'''
        # 用户是否登录
        user = request.user
        if not user.is_authenticated():
            return JsonResponse({'res':0, 'errmsg':'用户未登录'})

        # 接收参数
        order_id = request.POST.get('order_id')

        # 校验参数
        if not order_id:
            return JsonResponse({'res':1, 'errmsg':'无效的订单id'})

        try:
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=user,
                                          pay_method=3,
                                          order_status=1)
        except OrderInfo.DoesNotExist:
            return JsonResponse({'res':2, 'errmsg':'订单错误'})

        # 业务处理:使用python sdk调用支付宝的支付接口
        # 初始化
        alipay = AliPay(
            appid="2016090800464054", # 应用id
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(settings.BASE_DIR, 'apps/order/app_private_key.pem'),
            alipay_public_key_path=os.path.join(settings.BASE_DIR, 'apps/order/alipay_public_key.pem'), # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False
        )

        # 调用支付接口
        # 电脑网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
        total_pay = order.total_price+order.transit_price # Decimal
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id, # 订单id
            total_amount=str(total_pay), # 支付总金额
            subject='天天生鲜%s'%order_id,
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        # 返回应答
        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
        return JsonResponse({'res':3, 'pay_url':pay_url})


# ajax post
# 前端传递的参数:订单id(order_id)
# /order/check
class CheckPayView(View):
    '''查看订单支付的结果'''
    def post(self, request):
        '''查询支付结果'''
        # 用户是否登录
        user = request.user
        if not user.is_authenticated():
            return JsonResponse({'res': 0, 'errmsg': '用户未登录'})

        # 接收参数
        order_id = request.POST.get('order_id')

        # 校验参数
        if not order_id:
            return JsonResponse({'res': 1, 'errmsg': '无效的订单id'})

        try:
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=user,
                                          pay_method=3,
                                          order_status=1)
        except OrderInfo.DoesNotExist:
            return JsonResponse({'res': 2, 'errmsg': '订单错误'})

        # 业务处理:使用python sdk调用支付宝的支付接口
        # 初始化
        alipay = AliPay(
            appid="2016090800464054",  # 应用id
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(settings.BASE_DIR, 'apps/order/app_private_key.pem'),
            alipay_public_key_path=os.path.join(settings.BASE_DIR, 'apps/order/alipay_public_key.pem'),
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False
        )

        # 调用支付宝的交易查询接口
        while True:
            response = alipay.api_alipay_trade_query(order_id)

            # response = {
            #         "trade_no": "2017032121001004070200176844", # 支付宝交易号
            #         "code": "10000", # 接口调用是否成功
            #         "invoice_amount": "20.00",
            #         "open_id": "20880072506750308812798160715407",
            #         "fund_bill_list": [
            #             {
            #                 "amount": "20.00",
            #                 "fund_channel": "ALIPAYACCOUNT"
            #             }
            #         ],
            #         "buyer_logon_id": "csq***@sandbox.com",
            #         "send_pay_date": "2017-03-21 13:29:17",
            #         "receipt_amount": "20.00",
            #         "out_trade_no": "out_trade_no15",
            #         "buyer_pay_amount": "20.00",
            #         "buyer_user_id": "2088102169481075",
            #         "msg": "Success",
            #         "point_amount": "0.00",
            #         "trade_status": "TRADE_SUCCESS", # 支付结果
            #         "total_amount": "20.00"
            # }

            code = response.get('code')

            if code == '10000' and response.get('trade_status') == 'TRADE_SUCCESS':
                # 支付成功
                # 获取支付宝交易号
                trade_no = response.get('trade_no')
                # 更新订单状态
                order.trade_no = trade_no
                order.order_status = 4 # 待评价
                order.save()
                # 返回结果
                return JsonResponse({'res':3, 'message':'支付成功'})
            elif code == '40004' or (code == '10000' and response.get('trade_status') == 'WAIT_BUYER_PAY'):
                # 等待买家付款
                # 业务处理失败,可能一会就会成功
                import time
                time.sleep(5)
                continue
            else:
                # 支付出错
                print(code)
                return JsonResponse({'res':4, 'errmsg':'支付失败'})


用户订单页面

view


# /user/order
class UserOrderView(LoginRequiredMixin, View):
    '''用户中心-订单页'''
    def get(self, request, page):
        '''显示'''
        # 获取用户的订单信息
        user = request.user
        orders = OrderInfo.objects.filter(user=user).order_by('-create_time')

        # 遍历获取订单商品的信息
        for order in orders:
            # 根据order_id查询订单商品信息
            order_skus = OrderGoods.objects.filter(order_id=order.order_id)

            # 遍历order_skus计算商品的小计
            for order_sku in order_skus:
                # 计算小计
                amount = order_sku.count*order_sku.price
                # 动态给order_sku增加属性amount,保存订单商品的小计
                order_sku.amount = amount

            # 动态给order增加属性,保存订单状态标题
            order.status_name = OrderInfo.ORDER_STATUS[order.order_status]
            # 动态给order增加属性,保存订单商品的信息
            order.order_skus = order_skus

        # 分页
        paginator = Paginator(orders, 1)

        # 获取第page页的内容
        try:
            page = int(page)
        except Exception as e:
            page = 1

        if page > paginator.num_pages:
            page = 1

        # 获取第page页的Page实例对象
        order_page = paginator.page(page)

        # todo: 进行页码的控制,页面上最多显示5个页码
        # 1.总页数小于5页,页面上显示所有页码
        # 2.如果当前页是前3页,显示1-5页
        # 3.如果当前页是后3页,显示后5页
        # 4.其他情况,显示当前页的前2页,当前页,当前页的后2页
        num_pages = paginator.num_pages
        if num_pages < 5:
            pages = range(1, num_pages + 1)
        elif page <= 3:
            pages = range(1, 6)
        elif num_pages - page <= 2:
            pages = range(num_pages - 4, num_pages + 1)
        else:
            pages = range(page - 2, page + 3)

        # 组织上下文
        context = {'order_page':order_page,
                   'pages':pages,
                   'page': 'order'}

        # 使用模板
        return render(request, 'user_center_order.html', context)

模板

{% extends 'base_user_center.html' %}
{% load staticfiles %}
{% block right_content %}
		<div class="right_content clearfix">
                {% csrf_token %}
				<h3 class="common_title2">全部订单</h3>
                {% for order in order_page %}
				<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>

				<table class="order_list_table w980">
					<tbody>
						<tr>
							<td width="55%">
                                {% for order_sku in order.order_skus %}
								<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>
									<li class="col04">{{ order_sku.amount }}元</li>
								</ul>
								{% endfor %}
							</td>
							<td width="15%">{{ order.total_price|add:order.transit_price }}(含运费:{{ order.transit_price }})元</td>
							<td width="15%">{{ order.status_name }}</td>
							<td width="15%"><a href="#" order_id="{{ order.order_id }}" status="{{ order.order_status }}" class="oper_btn">去付款</a></td>
						</tr>
					</tbody>
				</table>
				{% endfor %}
				<div class="pagenation">
                    {% if order_page.has_previous_page %}
					<a href="{% url 'user:order' order_page.previous_page_number %}"><上一页</a>
                    {% endif %}
                    {% for pindex in pages %}
                        {% if pindex == order_page.number %}
					        <a href="{% url 'user:order' pindex %}" class="active">{{ pindex }}</a>
                        {% else %}
					        <a href="{% url 'user:order' pindex %}">{{ pindex }}</a>
                        {% endif %}
					{% endfor %}
                    {% if order_page.has_next_page %}
					<a href="{% url 'user:order' order_page.next_page_number %}">下一页></a>
                    {% endif %}
				</div>
		</div>
{% endblock right_content %}
{% block bottomfiles %}
    <script src="{% static 'js/jquery-1.12.4.min.js' %}"></script>
    <script>
    $('.oper_btn').each(function () {
        // 获取支付状态
        status = $(this).attr('status')
        if (status == 1){
            $(this).text('去支付')
        }
        else if (status == 4){
            $(this).text('去评价')
        }
        else if (status == 5){
            $(this).text('已完成')
        }
    })

    $('.oper_btn').click(function () {
        // 获取status
        status = $(this).attr('status')
        // 获取订单id
        order_id = $(this).attr('order_id')
        if (status == 1){
            // 进行支付
            csrf = $('input[name="csrfmiddlewaretoken"]').val()
            // 组织参数
            params = {'order_id':order_id, 'csrfmiddlewaretoken':csrf}
            // 发起ajax post请求,访问/order/pay, 传递参数:order_id
            $.post('/order/pay', params, function (data) {
                if (data.res == 3){
                    // 引导用户到支付页面
                    window.open(data.pay_url)
                    // 浏览器访问/order/check, 获取支付交易的结果
                    // ajax post 传递参数:order_id
                    $.post('/order/check', params, function (data){
                        if (data.res == 3){
                            alert('支付成功')
                            // 刷新页面
                            location.reload()
                        }
                        else{
                            alert(data.errmsg)
                        }
                    })
                }
                else{
                    alert(data.errmsg)
                }
            })
        }
        else if (status == 4){
            // 其他情况
            // 跳转到评价页面
            location.href = '/order/comment/'+order_id
        }
    })
    </script>
{% endblock bottomfiles %}

支付宝支付

在这里插入图片描述

  1. 支付宝开放平台登录
    使用已有的支付宝账号即可
    https://open.alipay.com/platform/home.htm

  2. 关于沙箱环境(开发模拟环境)

  3. 在这里插入图片描述

https://docs.open.alipay.com/200/105311

登录后,在页面顶部可以选择进入沙箱环境设置页面
在这里插入图片描述

  1. 支付宝开发者文档
    https://openhome.alipay.com/developmentDocument.htm
    电脑网站支付
    https://docs.open.alipay.com/270

  2. 电脑网站支付流程

在这里插入图片描述
在这里插入图片描述

  1. 签名
    在这里插入图片描述

发送给支付的请求都需要进行签名
https://docs.open.alipay.com/291/106118

  1. 使用python工具包
    https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
    安装
# 从 1.3.0升级上来的用户, 请先卸载pycrypto:
pip uninstall pycrypto
# 安装python-alipay-sdk
pip install python-alipay-sdk --upgrade

生成密钥文件

openssl
OpenSSL> genrsa -out app_private_key.pem   2048  # 私钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
OpenSSL> exit

cat app_publict_key.pem 查看公钥的内容
在这里插入图片描述

将-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----中间的内容保存在支付宝的用户配置中(沙箱或者正式)
https://openhome.alipay.com/platform/appDaily.htm?tab=info

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载支付宝的公钥文件

在这里插入图片描述
在这里插入图片描述

将公钥的内容复制保存到一个文本文件中(alipay_pubilc_key.pem),注意需要在文本的首尾添加标记位(-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----) ,形如:

将刚刚生成的私钥app_private_key.pem和支付宝公钥alipay_public_key.pem放到我们的项目目录中
在这里插入图片描述

使用支付宝 python包的初始化
在这里插入图片描述

  1. 支付接口
    https://docs.open.alipay.com/270/alipay.trade.page.pay/
    在这里插入图片描述
    在这里插入图片描述

  2. 获取支付结果接口
    https://docs.open.alipay.com/api_1/alipay.trade.query
    在这里插入图片描述
    在这里插入图片描述

订单评论

模板

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

view


class CommentView(LoginRequiredMixin, View):
    """订单评论"""
    def get(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"))

        # 根据订单的状态获取订单的状态标题
        order.status_name = OrderInfo.ORDER_STATUS[order.order_status]

        # 获取订单商品信息
        order_skus = OrderGoods.objects.filter(order_id=order_id)
        for order_sku in order_skus:
            # 计算商品的小计
            amount = order_sku.count*order_sku.price
            # 动态给order_sku增加属性amount,保存商品小计
            order_sku.amount = amount
        # 动态给order增加属性order_skus, 保存订单商品信息
        order.order_skus = order_skus

        # 使用模板
        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}))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django电商项目(九)用户中心-订单页、支付宝对接、订单评论 的相关文章

  • 提供多个 Base64 图像下载

    我的 django 应用程序有一个带有 base64 编码图像的模型 我想向我的 ListView 添加选项 以将所有显示的图像下载到用户选择的位置 我应该创建一个 AJAX 视图 还是 jQuery 可以处理它 我用谷歌搜索了一下 看到了
  • 如何在 Django 中获取查询集中的倒数第二条记录?

    我有一个名为employees salary我需要获得员工第二高的薪水 我知道我可以过滤latest first last 这些都有效 但是如何过滤倒数第二个 我错过了什么吗 将 order by 与反向过滤器 一起使用 然后使用 1 抓取
  • IP保持不变

    我正在尝试通过代码连接到 Tor 并更改我的身份 到目前为止我得到的结果是我连接成功但无法更改我的身份 这是我的代码 import socket import socks import httplib def connectTor sock
  • 使用 lxml 和 xpath 解析 xml 文件时如何保留 &

    我试图从输入 xml 文件中提取一些信息 并使用 lxml 和 xpath 指令将其打印到输出文件中 我在读取如下所示的 xml 标签时遇到问题
  • Flask / Werkzeug - 套接字卡在 CLOSE_WAIT 中

    我遇到过一种情况 API 构建于Flask 宁静 https github com flask restful flask restful间歇性变得无反应 目前它从 Werkzeug 运行 我知道它仅用于非生产用途 并且是单线程的 让事情变
  • 为什么del是Python中的指令而不是方法? [复制]

    这个问题在这里已经有答案了 为什么Python的创建者更喜欢这种语法 指令 del list index 超过这个 方法 list del index 在我看来 这del属于同一 类别 append remove find ETC 因此应该
  • 到底什么是序列?

    蟒蛇docs https docs python org 3 glossary html term sequence有点模棱两可 sequence 一个可迭代对象 支持通过以下方式使用整数索引进行有效的元素访问 getitem 特殊方法并定
  • Panda如何将行分组到不同的时间桶中?

    我有一个带有名为时间戳的日期时间类型列的数据帧 我想根据时间部分的时间戳将数据帧拆分为多个数据帧 每个数据帧包含按其值模 x 分钟进行值的行 其中 x 是变量 请注意e and f不按原来的顺序 以 10 分钟为模 我希望所有时间都以3在一
  • 将 *.appspot.com 重定向到自定义域:Google 应用引擎 (Django)

    我直接将我的一些示例代码放在这里以获得更好的了解 url py r robots txt myapp views robots r myapp views home views py def home request my code ret
  • Scrapy规则如何与爬行蜘蛛一起工作

    我很难理解 scrapy 爬行蜘蛛规则 我有一个例子 它并不像我希望的那样工作 所以它可能是两件事 我不明白规则是如何运作的 我形成了不正确的正则表达式 导致我无法获得所需的结果 好吧 这就是我想做的 我想编写爬行蜘蛛 它将获取所有可用的统
  • 使用 Python 访问 MP3 音乐数据

    我正在尝试编写一个 Python 脚本 用于使用歌曲的数据作为比较的基础来搜索重复的 mp3 4 文件 我的情况涉及许多文件名相似但 ID3 标签不同的 mp3 4 文件 起初 我尝试循环并使用 md5 来查找重复文件 忽略文件名 当然 当
  • django在服务器上同步数据库时出错

    我有一个完整运行的区域设置 django 应用程序 但我在迁移到 site5 服务器时遇到了麻烦 当我启动 django 时syncdb命令 我所有模型的表都已创建 但是然后 我猜当它创建关系表时 我收到以下错误 mysql excepti
  • 使用 cv2 在 python 中创建多通道零垫

    我想用 cv2 opencv 包装器在 python 中创建一个多通道 mat 对象 我在网上找到了一些例子 其中 c Mat zeros 被 numpy zeros 替换 这看起来不错 但似乎没有多通道类型适合 看代码 import cv
  • 如何为 matplotlib 中已绘制的线设置标签?

    在我的代码中我已经执行了 ax plot x y b 并且需要能够在事后设置相应行的标签 以达到与我相同的效果 ax plot x y b label lbl 有没有办法在 Matplotlib 中做到这一点 如果你抓住了line2D创建对
  • 无法在 AWS Elastic Beanstalk 上创建新的 RDS 数据库

    使用后eb create要创建新环境 我无法使用 AWS 控制台在我的环境中创建新的 RDS 数据库 它要求我从四个可用区列表中至少选择两个可用区 无论我选择哪个 我都会收到错误 DBSubnets 无效选项值 subnet 3dbb956
  • 将人员分配到床位 - 自动化方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我每年都会帮助举办青年营 将与会者分配到卧室是一项艰巨的任务 有 92 个卧室 活动持续一周 与会者停留的时间长短不一 而且床需要重复
  • 异常:AttributeError:使用 Azure Function 和 Python 的“DefaultAzureCredential”对象没有属性“signed_session”

    我编写了一个运行 Python3 的 Azure 函数来简单地打开 Azure VM 该函数应用程序具有系统分配的托管标识 我已为其授予 VM 贡献者角色 为了让该函数使用托管标识 我使用了 DefaultAzureCredential 类
  • 打开 PDF 到书签/指定目标?

    我正在尝试使用 python 打开特定书签的 PDF 到目前为止 我可以在命令提示符中运行以下命令并得到我想要的 last是 PDF test pdf 中指定目的地的名称 C Program Files x86 Adobe Reader 1
  • 阅读 setup.py 中的 README

    所以 我想要long description我的设置脚本的内容是我的README md文件 但是当我这样做时 源代码发行版的安装将失败 因为python setup py sdist不复制自述文件 有没有办法让distutils core
  • Bokeh 中的相关图问题

    当我通过绘制数据时rect 来自 Bokeh 我在可视化中得到了一条由水平块组成的单行 数据打印正确 据我所知格式正确 type 验证它们都是列表 谁能诊断这个吗 如果问题不在这里 那么我可以附加更多代码 如果需要 在 Ubuntu 14

随机推荐

  • 推荐一个超好用的视觉算法可视化分析工具

    First of all 先甩个项目github链接 https github com aiyojun cv algo analysis 如果觉得不错的给个star吧 鉴于视觉软件的开发成本太高 所以本人基于历史经验写了一个超级方便的可视化
  • vue项目编译打包到服务器,vue项目打包部署到服务器报错

    报错如下 webpack prod配置如下 const webpack require webpack const HtmlWebpackPlugin require html webpack plugin const ExtractTex
  • 【Linux基础IO之 内存文件操作】

    目录 前言 一 引入 C语言中的文件操作 系统文件操作 open 位图 权限 close write read lseek C语言中的文件操作函数与系统文件操作函数的联系 三 文件描述符 1 文件描述符是什么 2 文件缓冲区 再谈重定向 四
  • 虚拟机大小(1)

    2017 03 22 昨天也是弄了很久的虚拟机大小 这部分 我觉得还是应该从镜像的虚拟化角度来考虑 首先 我明白 分配出来的虚拟机大小 他当时分区的一些内容 都是跟最初制作镜像的时候相关的 因为这部分是写入到景象的磁盘里面去的 所以已经固化
  • (一)LTspice简介

    文章目录 前言 一 举例 1 1 RC滤波 1 2 仿真结果 二 软件安装 总结 前言 LTspice 是一款高性能SPICE仿真器软件 包括原理图捕获图形界面 可探测原理图以产生仿真结果 通过LTspice内置波形查看器轻松探索 与其他S
  • 【C++】map和set的介绍+使用

    前言 我们前面一起学习了二叉搜索树 这便是为了引入本章我们所学的map和set容器 map和set的底层实现就和二叉搜索树有关 目录 一 键值对的引入 1 关联式容器 2 键值对 二 set 1 set的介绍 2 set的使用 set的插入
  • 直接插入排序(有图,有实例)

    接下来从算法思想 实例讲解 代码实现 时间复杂度和空间复杂度 适用场景五个方面进 行讲解 目录 1 直接插入排序 2 折半插入排序 1 直接插入排序 算法思想 直接插入排序是一种最基本的插入排序方法 基本操作是将第i个记录插入到前面i 1个
  • FileReader FileInputStream InputStreamReader BufferedReader 作用与区别详解

    ava io下面有两个抽象类 InputStream和Reader InputStream是表示字节输入流的所有类的超类 Reader是用于读取字符流的抽象类 InputStream提供的是字节流的读取 而非文本读取 这是和Reader类的
  • 【华为OD机试2023】荒地电站建设 java

    荒地电站建设 代码仅供参考 若需使用请进行一定修改 提供java代码 题目 题目描述 祖国西北部有一片大片荒地 其中零星的分布着一些湖泊 保护区 矿区 整体上常年光照良好 但是也有一些地区光照不太好 某电力公司希望在这里建设多个 光伏电站
  • 01-windows调试工具(ProcDump使用)

    工具msdn下载地址 https learn microsoft com zh cn sysinternals downloads procdump csdn的下载地址 windows调试工具 C 文档类资源 CSDN下载 ProcDump
  • 使用注解开发(CRUD 注解增删改查)

    我们可以在工具类创建的时候实现自动提交事务 方法存在多个参数 所有的参数前面必须加上 Param 注解 注意 所有的基本类型和String类型都要加上 Param 如果是User和Map等等之类的对象不需要加 Param 注意事项 1 设置
  • 【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细

    参考这个博客 作者写的很流畅 一看就是个大佬 要向大佬学习 企名片地址 要获取图中数据 分析请求 根据大佬博客的点拨 我们可以知道这个网站的数据都在这个参数当中 要获取这些数据 我们需要这个网页是怎么把这一段参数解析的 解析参数 encry
  • AI平台介绍及竞品分析

    一 概念 what 在说AI平台之前 首先可以对AI进行了一个大致的解释 AI即人工智能 是研究并模拟 延伸和扩展人脑复杂行为的一种技术科学 范围包括机器学习 计算机视觉等等 那么AI平台就是支持这种复杂科学研究的一种辅助工具 该工具可以进
  • 判断是否是Symbol类型

    判断 value 是否是 Symbol 类型 Checks if value is classified as a Symbol primitive or Object param value The value to check retu
  • 常见多线程与并发服务器设计方案举例

    常见多线程与并发服务器设计方案举例 一 3点基础知识 1 一个主机的端口号为所有进程所共享 但普通用户进程绑定bind不了一些特殊端口号如20 80等 多个进程不能同时监听listen同一个端口 会失败 当然父进程可以先listen然后fo
  • kotlin时间戳转格式化时间

    kotlin时间戳转对应时间格式有很简洁的语法糖 下面就一起了解一下吧 比如说UI图需要这样的时间格式 10月20日 10 24 data createTime toLong formatBy MM月dd日 HH mm 10 20 10 2
  • 【VirtualBox】win10安装配置 Vbox---超详细 最新 持续更新中

    概述 一个好的文章能够帮助开发者完成更便捷 更快速的开发 书山有路勤为径 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 开发环境 VirtualBox 官网 开发环境 windows10 VirtualB
  • 程序,进程,作业之间的区别和联系

    程序与进程之间的区别 1 进程更能真实地描述并发 而程序不能 2 进程由程序和数据两部分组成 进程是竞争计算机系统有限资源的基本单位 也是进程处理机调度的基本单位 3 程序是静态的概念 进程是程序在处理机上一次执行的过程 是动态的概念 4
  • vue-cli3.0 项目内使用vue-skeleton-webpack-plugin插件根据路由来渲染不同的骨架屏

    为了前端体验更加友好 减缓用户的焦虑情绪 提升项目质量等 我们在项目里面可以使用骨架屏 提前渲染出来一个跟正式页面相似的页面出来 减小首屏加载时间 在vue中使用骨架屏 因为我们的代码会使用webpack打包 所以在我们的js下载运行之前
  • Django电商项目(九)用户中心-订单页、支付宝对接、订单评论

    Django电商项目 订单支付页面 用户订单页面 支付宝支付 订单评论 订单支付页面 订单支付模板 extends base user center html load staticfiles block right content div