【Django】网上蛋糕项目商城-购物车和我的订单功能

1.购物车功能

在首页中的滚动栏的商品,热门商品,新品,以及商品详情中都有加入购物车按钮

在models文件中创建购物车表,用于保存当前用户添加的商品信息

# 购物车表
class ShoppingCar(models.Model):
    # 用户id
    userId=models.IntegerField()
    # 商品id
    goodsId=models.IntegerField()
    # 商品数量
    goodsNumber=models.IntegerField()

并执行python manage.py makemigrations生成迁移数据库文件

再执行python manage.py migrate生成数据库表

点击加入购物车后,向服务器发出请求,不同页面发出的请求,携带的参数信息不同

在urls文件中定义接收该请求的地址

path('goods_buy/',views.goods_buy),

在views文件中定义处理该请求的函数

# 处理添加购物车功能
def goods_buy(request):
    # 创建购物车表,判断用户是否登录,如果登录,将用户选中的商品id添加至购物车表,未登录,则跳转至登录页面
    # 先判断是否登录
    isLogin=request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    # 然后判断库存是否充足
    # 获取url地址
    url = request.GET["url"]
    # 获得将要购买的商品的id
    goodsid = request.GET["id"]
    # 根据商品id查询该商品
    g = Goods.objects.get(id=goodsid)
    # 判断该商品是否还有库存
    if g.stock <= 0:
        key="failMsg"
        value="库存不足,请购买其他商品!"
        request.session[key]=value
        if "index" == url:
            return redirect(index)
        elif "recommend"==url:
            t=request.GET["type"]
            return HttpResponseRedirect("/goodsrecommend_list/?type=" + t)
        elif "search"==url:
            keyword=request.session.get("keyword")
            return HttpResponseRedirect("/goods_search/?keyword=" + keyword)
        elif "list"==url:
            typeId=request.session.get("typeId")
            return HttpResponseRedirect("/goods_list/?typeid=" + typeId)
        else:
            return HttpResponseRedirect("/goods_detail/?id="+goodsid)
    else:
        key="msg"
        value="已添加到购物车!"
        request.session[key] = value
        # 再判断该用户的购物车是否已添加过该商品,如果有,则修改该商品购物车中的数量
        u=request.session.get("user")
        sc=ShoppingCar.objects.filter(userId=u["id"],goodsId=goodsid)
        if sc:
            number=sc[0].goodsNumber
            number=number+1
            sc.update(goodsNumber=number)
        # 如果没有,则添加该商品信息到购物车中
        else:
            ShoppingCar.objects.create(userId=u["id"],goodsId=goodsid,goodsNumber=1)

        # 查询出,当前用户的购物车总数
        shops=ShoppingCar.objects.filter(userId=u["id"]).values()
        total=0
        for shop in shops:
            total+=shop["goodsNumber"]
        request.session["total"]=total
        # 最后根据url的参数值判断刷新哪个页面
        if "index" == url:
            return redirect(index)
        elif "recommend"==url:
            t=request.GET["type"]
            return HttpResponseRedirect("/goodsrecommend_list/?type=" + t)
        elif "search" == url:
            keyword = request.session.get("keyword")
            return HttpResponseRedirect("/goods_search/?keyword=" + keyword)
        elif "list"==url:
            typeId=request.session.get("typeId")
            return HttpResponseRedirect("/goods_list/?typeid=" + typeId)
        else:
            return HttpResponseRedirect("/goods_detail/?id=" + goodsid)

并同时刷新header.html头部页面中的购物车总数,因此需要在首页的函数中添加以下代码

 u = request.session.get("user")
    if u:
        # 查询出,当前用户的购物车总数
        shops = ShoppingCar.objects.filter(userId=u["id"]).values()
        total = 0
        for shop in shops:
            total += shop["goodsNumber"]
        request.session["total"] = total

在登录成功之后,获取该用户的购物车数据,在登录的函数中添加以下代码

# 查询出,当前用户的购物车总数
        shops = ShoppingCar.objects.filter(userId=u["id"]).values()
        total = 0
        for shop in shops:
            total += shop["goodsNumber"]
        request.session["total"] = total

点击上图中的购物车,进入购物车页面

 在urls文件中定义接收该请求

path('goods_cart/',views.goods_cart),

在views文件中创建该函数处理该请求

# 获取购物车数据,跳转至购物车页面
def goods_cart(request):
    # 先判断是否登录
    isLogin = request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    # 根据当前登录的用户,查询出该用户添加在购物车中的所有商品
    u=request.session.get("user")
    sc=ShoppingCar.objects.filter(userId=u["id"]).values()
    # 遍历每一个商品,根据商品编号查询商品详细信息的数据
    totalPrice=0.0
    for s in sc:
        goods=Goods.objects.filter(id=s["goodsId"]).values()
        s["goods"]=goods[0]
        # 计算每一个商品的总金额
        n1=float(s["goodsNumber"])
        n2=float(goods[0]["price"])
        totalPrice = totalPrice+(n1*n2)

    return render(request,"goods_cart.html",{"typeList": types,"sc":sc,"totalPrice":totalPrice})
<!DOCTYPE html>
<html>
<head>
	<title>购物车</title>
    {% load static %}
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
	<link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}">
	<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'layer/layer.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/cart.js' %}"></script>
</head>
<body>
	{% include "header.html" with flag=7 typeList=typeList %}
	<div class="cart-items">
		<div class="container">
			<h2>我的购物车</h2>
            {% for s in sc %}
            <div class="cart-header col-md-6">
					<div class="cart-sec simpleCart_shelfItem">
						<div class="cart-item cyc">
							<a href="/goods_detail/?id={{ s.goodsId }}">
								<img src="{% static s.goods.cover %}" class="img-responsive">
							</a>
						</div>
						<div class="cart-item-info">
							<h3><a href="/goods_detail/?id={{ s.goodsId }}">{{ s.goods.name }}</a></h3>
							<h3><span>单价: ¥ {{ s.goods.price }}</span></h3>
							<h3><span>数量: {{ s.goodsNumber }}</span></h3>
							<a class="btn btn-info" href="/addShops/?id={{ s.goodsId }}">增加</a>
							<a class="btn btn-warning" href="/removeShops/?id={{ s.goodsId }}">减少</a>
							<a class="btn btn-danger" href="/deleteShops/?id={{ s.goodsId }}">删除</a>
						</div>
						<div class="clearfix"></div>
					</div>
				</div>
            {% endfor %}
			
			<div class="cart-header col-md-12">
				<hr>
				<h3>订单总金额: ¥ {{ totalPrice }}</h3>
				<a class="btn btn-success btn-lg" style="margin-left:74%" href="/order_submit/?totalPrice={{ totalPrice }}">提交订单</a>
			</div>
		</div>
	</div>
	{% include "footer.html" %}

</body>
</html>

点击增加按钮,向服务器发送请求,修改购物车表,给指定的商品增加商品数量

在urls文件中定义接收该请求的地址

path('addShops/',views.addShops),

在views文件中定义处理该请求的函数

# 购物车中增加商品
def addShops(request):
    # 先判断是否登录
    isLogin = request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    # 获取商品id
    goodsId=request.GET["id"]
    u = request.session.get("user")
    sc=ShoppingCar.objects.filter(goodsId=goodsId,userId=u["id"])
    sc.update(goodsNumber=(sc[0].goodsNumber+1))
    # 查询出,当前用户的购物车总数
    shops = ShoppingCar.objects.filter(userId=u["id"]).values()
    total = 0
    for shop in shops:
        total += shop["goodsNumber"]
    request.session["total"] = total
    return redirect(goods_cart)

这样当在购物车列表页面中,选中其中某个商品点击添加按钮,则会修改购物车表中该商品的数量,并同步统计购物车的商品总价格。

点击减少按钮,向服务器发送请求,修改购物车表,给指定的商品减少商品数量

在urls文件中定义该请求地址

path('removeShops/',views.removeShops),

在views文件中创建函数处理该请求

# 购物车中删除减少商品
def removeShops(request):
    # 先判断是否登录
    isLogin = request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    # 获取商品id
    goodsId = request.GET["id"]
    u = request.session.get("user")
    sc = ShoppingCar.objects.filter(goodsId=goodsId, userId=u["id"])
    if sc[0].goodsNumber == 1:
        # 如果当前商品数量为1,再减少则表示删除该商品
        sc.delete()
    else:
        sc.update(goodsNumber=(sc[0].goodsNumber - 1))
    # 查询出,当前用户的购物车总数
    shops = ShoppingCar.objects.filter(userId=u["id"]).values()
    total = 0
    for shop in shops:
        total += shop["goodsNumber"]
    request.session["total"] = total
    return redirect(goods_cart)

点击删除按钮,向服务器发送请求,修改购物车表,给指定的商品删除该商品

 在urls文件中定义该请求地址

path('deleteShops/',views.deleteShops),

在views文件中创建处理该请求的函数

# 购物车中删除商品
def deleteShops(request):
    # 先判断是否登录
    isLogin = request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    # 获取商品id
    goodsId = request.GET["id"]
    u = request.session.get("user")
    sc = ShoppingCar.objects.filter(goodsId=goodsId, userId=u["id"])
    sc.delete()
    # 查询出,当前用户的购物车总数
    shops = ShoppingCar.objects.filter(userId=u["id"]).values()
    total = 0
    for shop in shops:
        total += shop["goodsNumber"]
    request.session["total"] = total
    return redirect(goods_cart)

2.提交订单

点击购物车页面中的提交订单按钮

在urls文件中定义该请求的地址

path('order_submit/',views.order_submit),

在views文件中处理该请求

# 提交订单请求
def order_submit(request):
    # 先判断是否登录
    isLogin = request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    totalPrice=request.GET["totalPrice"]
    request.session["totalPrice"]=totalPrice
    return render(request,"order_submit.html",{"typeList": types})
<!DOCTYPE html>
<html>
<head>
	<title>支付</title>
    {% load static %}
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
	<link type="text/css" rel="stylesheet" href="{%  static 'css/style.css' %}">
	<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'layer/layer.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/cart.js' %}"></script>
</head>
<body>
	{% include "header.html" with  typeList=typeList %}
	<div class="cart-items">
		<div class="container">
			<h2>确认收货信息</h2>
			<form class="form-horizontal" action="/order_confirm/" method="post" id="payform">
                {% csrf_token %}
				<div class="row">
					<label class="control-label col-md-1">收货人</label>
					<div class="col-md-6">
						<input type="text" class="form-control" name="name" value="{{ request.session.user.name  }}" style="height:auto;padding:10px;" placeholder="输入收货人" required="required"><br>
					</div>
				</div>
				<div class="row">
					<label class="control-label col-md-1">收货电话</label>
					<div class="col-md-6">
						<input type="text" class="form-control" name="phone" value="{{ request.session.user.phone  }}" style="height:auto;padding:10px;" placeholder="输入收货电话" required="required"><br>
					</div>
				</div>
				<div class="row">
					<label class="control-label col-md-1">收货地址</label>
					<div class="col-md-6">
						<input type="text" class="form-control" name="address" value="{{ request.session.user.address  }}" style="height:auto;padding:10px;" placeholder="输入收货地址" required="required"><br>
					</div>
				</div>
				<br><hr><br>
				<h2>选择支付方式</h2>
				<h3>支付金额:  ${{ request.session.totalPrice }}</h3><br><br>
				<div class="col-sm-6 col-md-4 col-lg-3 " >
					<label>
						<div class="thumbnail">
							<input type="radio" name="paytype" value="1" checked="checked" />
							<img src="{% static 'images/wechat.jpg' %}" alt="微信支付">
						</div>
					</label>
				</div>
				<div class="col-sm-6 col-md-4 col-lg-3 " >
					<label>
						<div class="thumbnail">
							<input type="radio" name="paytype" value="2"  />
							<img src="{% static 'images/alipay.jpg' %}" alt="支付宝支付">
						</div>
					</label>
				</div>
				<div class="clearfix"> </div>
				<div class="register-but text-center">
					<input type="submit" value="确认订单">
					<div class="clearfix"> </div>
				</div>
			</form>
		</div>
	</div>
	<!--footer-->
	{% include "footer.html" %}
	<!--//footer-->
	<script type="text/javascript">
		function dopay(paytype){
			$("#paytype").val(paytype);
			$("#payform").submit();
		}
	</script>

</body>
</html>

点击确认订单按钮,将订单详情信息添加至数据库中

在urls文件中定义请求地址

path('order_confirm/',views.order_confirm),

在views文件中定义处理该请求的函数

# 处理添加订单请求
def order_confirm(request):
    # 收件人
    name=request.POST["name"]
    # 手机号
    phone=request.POST["phone"]
    # 收货地址
    address=request.POST["address"]
#   支付方式
    paytype=request.POST["paytype"]
#    支付状态为2,已付款
    status=2
    # 获取当前的时间
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    # 总金额
    totalPrice=request.session.get("totalPrice")
    # 总数量
    totalnum=request.session.get("total")
    #用户id
    u=request.session.get("user")
    order=Order.objects.create(name=name,phone=phone,address=address,
                         paytype=paytype,status=status,total=totalPrice,
                         amount=totalnum,datetime=current_time,user_id=u["id"])
    # 获得订单编号
    orderId=order.id
    # 将该订单中包含的所有商品信息添加至子订单中
    # 查询该用户的所有购物车商品编号
    sc=ShoppingCar.objects.filter(userId=u["id"])
    for s in sc:
        goodsId=s.goodsId # 商品编号
        number=s.goodsNumber # 商品数量
        goods=Goods.objects.get(id=goodsId)
        tPrice= goods.price * number # 该商品的总价
        # 将以上信息添加至子订单中
        			      OrderItem.objects.create(price=tPrice,amount=number,goods_id=goodsId,order_id=orderId)

    # 将购物车中该用户的商品清空
    sc.delete()
    request.session["total"] = 0

    return render(request,"order_success.html",{"msg":"订单支付成功!","typeList": types})
<!DOCTYPE html>
<html>
<head>
	<title>支付成功</title>
    {% load static %}
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
	<link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}">
	<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'layer/layer.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/cart.js' %}"></script>
</head>
<body>
	{% include "header.html" with  typeList=typeList %}

	<div class="cart-items">
		<div class="container">
            {% if msg %}
            <div class="alert alert-success">{{ msg  }}</div>
            {% endif %}


			<p><a class="btn btn-success" href="/order_list">查看我的订单</a></p>
		</div>
	</div>
	{% include "footer.html" %}
</body>
</html>

3.我的订单功能

点击上图中的查看我的订单,或者是头部导航栏中的我的订单触发请求

在urls文件中定义该请求地址

path('order_list/',views.order_list),

在views文件中创建函数处理该请求

# 处理订单列表的请求
def order_list(request):
    # 先判断是否登录
    isLogin = request.session.get("isLogin")
    if not isLogin:
        return redirect(login)
    u=request.session.get("user")
    # 根据用户id查询订单列表
    orders=Order.objects.filter(user_id=u["id"]).values()
    # 根据订单编号查所有子订单
    for order in orders:
        order["datetime"]=str(order["datetime"])
        items = OrderItem.objects.filter(order_id=order["id"]).values()
        # 根据每个子订单中的商品编号查询商品名称
        for item in items:
            goods=Goods.objects.filter(id=item["goods_id"]).values()
            item["goods"]=goods[0]
        order["items"]=items

    return render(request,"order_list.html",{"typeList": types,"orders":orders})
<!DOCTYPE html>
<html>
<head>
    <title>我的订单</title>
    {% load static %}
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
    <link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}">
    <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'layer/layer.js' %}"></script>
    <script type="text/javascript" src="{% static 'js/cart.js' %}"></script>
</head>
<body>
{% include "header.html" with flag=5 typeList=typeList %}
<div class="cart-items">
    <div class="container">
        <h2>我的订单</h2>
        <table class="table table-bordered table-hover">
            <tr>
                <th width="10%">ID</th>
                <th width="10%">总价</th>
                <th width="20%">商品详情</th>
                <th width="20%">收货信息</th>
                <th width="10%">订单状态</th>
                <th width="10%">支付方式</th>
                <th width="20%">下单时间</th>
            </tr>
            {% for order in orders %}
                <tr>
                    <td><p>{{ order.id }}</p></td>
                    <td><p>{{ order.total }}</p></td>
                    <td>
                        {% for item in order.items %}
                            <p>{{ item.goods.name }}(${{ item.goods.price }}) x {{ item.amount }}</p>
                        {% endfor %}
                    </td>
                    <td>
                        <p>{{ order.name }}</p>
                        <p>{{ order.phone }}</p>
                        <p>{{ order.address }}</p>
                    </td>
                    <td>
                        <p>
                            {% if order.status == 2 %}
                                <span style="color:red;">已付款</span>
                            {% endif %}
                            {% if order.status == 3 %}
                                <span style="color:green;">已发货</span>
                            {% endif %}
                            {% if order.status == 4 %}
                                <span style="color:black;">已完成</span>
                            {% endif %}
                        </p>
                    </td>
                    <td>
                        <p>
                            {% if order.paytype == 1 %}
                                微信
                            {% endif %}
                            {% if order.paytype == 2 %}
                                支付宝
                            {% endif %}
                            {% if order.paytype == 3 %}
                                货到付款
                            {% endif %}
                        </p>
                    </td>
                    <td><p>{{ order.datetime }}</p></td>
                </tr>
            {% endfor %}
        </table>
    </div>
</div>
{% include "footer.html" %}
</body>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/801609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JRT打印设计器解耦

为了让打印设计器可以给多个产品打印通用&#xff0c;那么设计器就不能嵌入太多具体产品的业务信息。比如医院主键、工作组、医嘱关联登。 设计器在设计表的时候就没引入检验部分的依赖&#xff0c;采用产品组唯一标识和产品组业务ID来隔离不同组的模板设计。 维护菜单时候就…

CTFshow--web--xss

目录 web316 web317~319 web320~326 web327 web328 web329 web330 web331 web332 web333 先在自己的服务器写上代码 <?php$content $_GET[1]; if(isset($content)){file_put_contents(flag.txt,$content); }else{echo no data input; }要拿到管理员的cookie , 而…

Java - 程序员面试笔记记录 实现 - Part5

7.1 Struts 优点&#xff1a; 1. MVC模式实现了表现与逻辑的分离&#xff0c;扩展性高。 2. 提供页面导航功能&#xff0c;通过配置文件建立整个系统各部分之间的联系。 3. 集成了一些常用处理功能。 缺点&#xff1a; 1. 仅面向 Web 应用程序开发 2. Action 非线程安全…

HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下&#xff0c;计算机后下 源码在图片后面 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Tic Tac Toe Game</tit…

开始Linux之路

人生得一知己足矣&#xff0c;斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

技术周总结 2024.07.08~07.14(算法,Python,Java,Scala,PHP)

文章目录 一、07.13 周六1.0&#xff09;算法题&#xff1a;字符串中的单词反转1.1&#xff09; 问题01:可靠性计算中的MTTR MTTF MTBF 分别指什么&#xff1f;他们之间有什么联系&#xff1f;MTTR (Mean Time to Repair)MTTF (Mean Time to Failure)MTBF (Mean Time Between F…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型-课后作业

在内核源码中搜索 platform_device_register 可以得到很多驱动&#xff0c;选择 一个作为例子&#xff1a; ① 确定它的名字 ② 根据它的名字找到对应的 platform_driver ③ 进入 platform_device_register/platform_driver_register 内部&#xff0c;分析 dev 和 drv 的匹配过…

某林操作系统——网络系统

什么是零拷贝&#xff1f; DMA技术&#xff1a;使用一个DMA控制器将数据从硬盘传输到内存&#xff0c;除了一开始调用DMA控制器发起传输&#xff0c;数据搬运全称不需要CPU参与。 发送一段数据到网上如下所示 4次状态切换4次拷贝。 为了加快速度就要减少上下文切换&#xff…

网络安全防御【防火墙安全策略用户认证综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务&#xff08;带内管理的工作模式&#xff09; 2、在FW1的web网页中网络相关配置 3、交换机LSW6&#xff08;总公司&#xff09;的相关配置&#xff1a; 4、路由器相关接口配置&a…

【深度学习入门篇 ⑦】PyTorch池化层

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【查询密钥是否存在(ArkTS)】

查询密钥是否存在(ArkTS) HUKS提供了接口供应用查询指定密钥是否存在。 开发步骤 指定密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节。初始化密钥属性集。用于查询时指定密钥的属性TAG&#xff0c;比如查询的密钥范围(全量/单个)&#xff0c;当查询单个时&#xff…

工时计算软件比较:哪些功能是必需的?

国内外主流的10款工时计算软件对比&#xff1a;PingCode、Worktile、蓝凌OA、用友软件、金蝶软件、智能人事、Time Doctor、Toggl Track、Clockify、Harvest。 在选择合适的工时计算软件时&#xff0c;很多企业面临的一个主要痛点是如何找到既能满足功能需求又具有成本效益的解…

虚拟机及其Debian(kali)安装

本机电脑为Windows10系统专业版&#xff0c;在此基础上安装VMware和系统&#xff08;Kali&#xff09; 步骤如下 一、安装 VMware Workstation Pro v16.2.4 安装步骤可参照网上博客&#xff0c;该步骤较简单&#xff0c;此处不做讲解。文件中共计两个&#xff0c;其中一个是激活…

YOLOv8白皮书-第Y8周:yolov8.yaml文件解读

本文为365天深度学习训练营中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 请根据YOLOv8n、YOLOv8s模型的结构输出&#xff0c;手写出YOLOv8l的模型输出 文件位置&#xff1a;./ultralytics/cfg/models/v8/yolov8.yaml 一、参数配置 # Parameters nc: 80 # n…

android APP在蓝牙模拟键盘扫描条码设备开机时闪退

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

下载安装VSCode并添加插件作为仓颉编程入门编辑器

VSCode下载地址&#xff1a;下载 Visual Studio Code - Mac、Linux、Windows 插件下载&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…

【Unity2D 2022:UI】制作主菜单

一、创建主菜单游戏场景 1. 在Scenes文件夹中新建一个游戏场景Main Menu 2. 为场景添加背景 &#xff08;1&#xff09;创建画布Canvas &#xff08;2&#xff09;在Canvas中创建新的空游戏物体Main Menu &#xff08;3&#xff09;在Main Menu中新建一个图像游戏物体Backgrou…

c++基础(1)

c语言是结构化和模块化的语言&#xff0c;用于处理规模较小的程序。当问题需要高度抽象和建模时&#xff0c;c语言不适合。c是基于c语言产生的&#xff0c;既可以进行c语言过程化程序设计&#xff0c;又可以以抽象数据类型为特点的基于对象的程序设计&#xff0c;还可以进行面向…

pico+unity手柄和摄像机控制初级设置

1、摄像头配置 摄像头模式、floor是追踪原点类型&#xff08;将根据设备检测到地面的高度来计算追踪原点&#xff09;&#xff0c; Device 模式时&#xff0c;为通常理解的 Eye 模式&#xff0c;不会将根据设备检测到地面的高度来计算追踪原点 选择floor时&#xff0c;修改相…

达梦数据库的系统视图v$recover_status

达梦数据库的系统视图v$recover_status 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$RECOVER_STATUS 是一个系统视图&#xff0c;用于显示数据库的恢复状态信息。这个视图对于数据库管理员来说非常重要&#xff0c;尤其是在数据库发生故障需要进行恢复操…