django学习记录07——订单案例(复选框+ajax请求)

news2024/10/2 6:39:13

1.订单的数据表

1.1 数据表结构

在这里插入图片描述

1.2 数据表的创建

models.py

class Order(models.Model):
    """订单号"""
    oid = models.CharField(max_length=64, verbose_name="订单号")
    title = models.CharField(max_length=64, verbose_name="名称")
    price = models.FloatField(verbose_name="价格")
    status_choice = (
        (1,"待支付"),
        (2,"已支付"),
    )
    status = models.SmallIntegerField(verbose_name="状态",choices=status_choice,default=1)
    admin = models.ForeignKey(verbose_name="管理员",to="Admin",on_delete=models.CASCADE)
  • status字段采用choice方式,获取值特别注意使用`get_status_display``

  • ``admin`作为外键,使订单表与管理员连接,自动创建admin_id字段,采用级联删除方式。

获取admin表username字段的方法

  • 直接 .字段
  • 在admin中设置默认返回username,def __str__(self): return self.username

2.订单案例的实现

2.1 订单案例功能概述

​ 将订单的展示、订单的增加、订单的更新、订单的删除等功能集成到一个页面中。增加和删除页面使用模态框实现,增删改查均使用Ajax请求进行数据传输。

2.2 订单案例总页面和列表展示功能

oeder_list

def order_list(request):
    queryset = models.Order.objects.all()
    form = OrderModelForm()
    page_object = Pagination(request, queryset)
    context = {
        'queryset': page_object.query_set,
        'form': form,
        'page_str': page_object.createHtml()
    }
    return render(request, "order_list.html", context)

queryset = models.Order.objects.all() 获取数据库数据

form = OrderModelForm() 向前端传输构造的表单,用与增加更新页面的形成

page_object = Pagination(request, queryset) 分页组件的应用

order_list.html

{% extends 'layout.html' %}

{% block content %}
	...
    <!-- 新建 /编辑订单的对话框-->
	...
	...
	...
    <!--删除订单的对话框-->
    ...
	...
	...
    <!-- 数据展示 -->
    <div class="panel panel-default">
        <div class="panel-heading">订单列表</div>
        <div class="bs-example" data-example-id="hoverable-table">
            <table class="table table-hover">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>订单号</th>
                    <th>名称</th>
                    <th>价格</th>
                    <th>状态</th>
                    <th>管理员</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                    <tr>
                        <td>{{ obj.id }}</td>
                        <td>{{ obj.oid }}</td>
                        <td>{{ obj.title }}</td>
                        <td>{{ obj.price }}</td>
                        <td>{{ obj.get_status_display }}</td>
                        <td>{{ obj.admin.username }}</td>
                        <td>
						...
                        ...
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
        <ul class="pagination">
            {{ page_str }}
        </ul>

    </div>
{% endblock %}

{% block js %}
...
...
...
{% endblock %}

<td>{{ obj.get_status_display }}</td> choice字段的数据展示
<td>{{ obj.admin.username }}</td> 外键各字段的展示方法

<ul class="pagination"> {{ page_str }} </ul> 分页功能

2.3 订单增加与订单更新功能

由于增加和更新都是用复选框,而且一般情况下增加页面和更新页面可以各使用一个复选框,但本文将增加页面和更新页面集成到一个复选框中。

增加和更新功能集成到一个复选框中,并且两个功能都需要创建数据输入的表单。不同的是,增加功能相对较简单,更新功能需要获取待更新数据的id,并且将待更新数据旧数据填充到表单中

因此增加和更新功能复选框的区分标准是是否定义了待删除数据id

2.3.1 复选框的生成

order_list.html

{% extends 'layout.html' %}

{% block content %}
    <div style="margin-bottom: 10px">
        <div>
            <input type="button" class="btn btn-primary" value="新建订单1" data-toggle="modal" data-target="#Modal">
            <input id="addShow" type="button" class="btn btn-primary" value="新建订单2">
        </div>
    </div>
    <!-- 新建 /编辑订单的对话框-->
    <div class="modal fade" id="Modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title" id="myModalLabel"></h4>
                </div>
                <div class="modal-body">
                    <form id="formAdd">
                        <div class="clearfix">
                            {% for field in form %}
                                <div class="col-xs-6">
                                    <div class="form-group" style="position: relative;margin-bottom: 20px;">
                                        <label>{{ field.label }}</label>
                                        {{ field }}
                                        <span class="error-msg" style="color: red"></span>
                                    </div>
                                </div>
                            {% endfor %}
                        </div>
                    </form>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
                    <button id="btnSave" type="button" class="btn btn-primary">保 存</button>
                </div>
            </div>
        </div>
    </div>
    <!--删除订单的对话框-->
	...
	...
    <!-- 数据展示 -->
	...
	...
{% endblock %}

{% block js %}
...
...
{% endblock %}

2.3.2复选框的内容

    <div class="modal fade" id="Modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title" id="myModalLabel"></h4>
                </div>
                <div class="modal-body">
                    正常的modelForm表单构造
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
                    <button id="btnSave" type="button" class="btn btn-primary">保 存</button>
                </div>
            </div>
        </div>
    </div>

ModelForm的表单构造,由order_list视图函数传来的form来实现

2.3.3增加订单绑定复选框

<div>
    <input type="button" class="btn btn-primary" value="新建订单1" data-toggle="modal" data-target="#Modal">
    <input id="addShow" type="button" class="btn btn-primary" value="新建订单2">
</div>
  1. 新建订单1按钮,采用官方文档给的唤醒复选框的方法 data-target="#Modal" 直接写复选框的id即可
  2. 新建订单2按钮,采用jQuery+js进行唤醒复选框
<script type="text/javascript">
    var UPDATE_ID;
    $(function () {
        //增加订单按钮
        bindBtnaddShow();
    })

    function bindBtnaddShow() {
        $('#addShow').click(function () {
            //由于添加和更新使用同一个对话框,每次点击要清除表单
            //成功后清除表单
            // $("#formAdd")jQuery对象无重置功能  $("#formAdd")[0] Dom对象,有重置功能
            $("#formAdd")[0].reset();
            //根据对话框的id,更改对话框标题
            $('#myModalLabel').text('新建订单');
            // 点击新建按钮,显示对话框
            $('#Modal').modal('show');
        })

    }

</script>

加载页面自动执行函数

$(function () {
    //增加订单按钮
    bindBtnaddShow();
})

$('#addShow').click(function () { }) 将id为addshow的按钮绑定以下事件

$('#myModalLabel').text('新建订单'); 由于增加与更新共用复选框,因此可以根据不同请求对id为myModalLabel的标签的文本进行赋值

$('#Modal').modal('show'); 显示id=model的复选框

2.3.4 更新订单绑定复选框

<td>
	<input uid="{{ obj.id }}" type="button" class="btn btn-warning btn-sm updateShow" value="编辑">
</td>

设置属性uid,表示待操作数据的id

<script type="text/javascript">
    //全局变量存储待更新/删除的订单id
    var DELETE_ID;
    var UPDATE_ID;

    $(function () {
        bindBtnupdateShow();
    })

    function bindBtnupdateShow() {
        $('.updateShow').click(function () {
            //由于添加和更新使用同一个对话框,每次点击要清除表单
            //成功后清除表单
            // $("#formAdd")jQuery对象无重置功能  $("#formAdd")[0] Dom对象,有重置功能
            $("#formAdd")[0].reset();

            //获取待更新的数据id
            UPDATE_ID = $(this).attr('uid')
            //更新窗口需要展示待更新数据各字段,因此需要利用ajax请求获取相关信息
            $.ajax({
                url: '/order/details',
                type: 'get',
                data: {
                    uid: UPDATE_ID,
                },
                dataType: 'JSON',
                success: function (res) {
                    // 数据存在,弹出编辑对话框
                    if (res.status) {
                        //将对应数据填充到input输入框中
                        $.each(res.data, function (name, value) {
                            console.log(name, value);
                            //找到id为id_name的下一个标签,对value赋值
                            $("#id_" + name).val(value);
                        })
                        //根据对话框的id,更改对话框标题
                        $('#myModalLabel').text('编辑订单');
                        // 点击新建按钮,显示对话框
                        $('#Modal').modal('show');
                    } else {
                        alert(res.error)
                    }
                }
            })
        })
    }
</script>
  • 加载页面自动执行函数
$(function () {
    //增加订单按钮
    bindBtnupdateShow();
})
  • 更新复选框的展示

$('.updateShow').click(function () { }) 将class为updateshow的按钮绑定以下事件,使用class是因为每条数据均有一个更新按钮

  • 获取待更新数据的基本信息并填充的到更新复选框的输入框中

    • UPDATE_ID = $(this).attr('uid') 获取待更新的数据id
    • 更新窗口需要展示待更新数据各字段,因此需要利用ajax请求获取相关信息
    $.ajax({
                    url: '/order/details', //请求地址
                    type: 'get',
                    data: {
                        uid: UPDATE_ID,     //传输带更改的数据id
                    },
                    dataType: 'JSON',
                    success: function (res) { 
                        // 数据存在,弹出编辑对话框
                        if (res.status) {
                            //将对应数据填充到input输入框中
                            $.each(res.data, function (name, value) {
                                //找到id为id_name的下一个标签,对value赋值
                                $("#id_" + name).val(value);
                            })
                            //根据对话框的id,更改对话框标题
                            $('#myModalLabel').text('编辑订单');
                            // 点击新建按钮,显示对话框
                            $('#Modal').modal('show');
                        } else {
                            alert(res.error)
                        }
                    }
                })
    

    getdetails视图函数

    def order_details(request):
        uid = request.GET.get('uid')
    
    
        # 方式2 采用value 使查询数据库时按需返回并组成字典
        # 若不加first  返回queryset类型
        row_dict = models.Order.objects.filter(id=uid).values('title', 'price', 'status').first()
        print(row_dict)
        if not row_dict:
            data_dict = {'status': False, 'error': '数据不存在'}
            return HttpResponse(json.dumps(data_dict))
        data_dict = {
            'status': True,
            'data': row_dict,
        }
        print(json.dumps(data_dict))  # {"status": true, "date": {"title": "1111", "price": 2222.0, "status": 2}}
        return HttpResponse(json.dumps(data_dict))
    

    根据id查询数据的两种方式

    1. 方式1 返回数据对象
     若不加first 返回queryset类型
     row_object = models.Order.objects.filter(id=uid).first()
     if not row_object:
         data_dict = {'status': False, 'error': '数据不存在'}
         return HttpResponse(json.dumps(data_dict))
     data_dict = {
         'status': True,
         'date': {
             'title': row_object.title,
             'price': row_object.price,
             'status': row_object.status,
         }
     }
     print(json.dumps(data_dict))  
    # {"status": true, "date": {"title": "1111", "price": 2222.0, "status": 2}}
     return HttpResponse(json.dumps(data_dict))
    
    1. 方式2 采用value 使查询数据库时按需返回并组成字典
    # 若不加first  返回queryset类型
    # 加value和first  返回字典类型
        row_dict = models.Order.objects.filter(id=uid).values('title', 'price', 'status').first()
        print(row_dict)
        if not row_dict:
            data_dict = {'status': False, 'error': '数据不存在'}
            return HttpResponse(json.dumps(data_dict))
        data_dict = {
            'status': True,
            'data': row_dict,
        }
        print(json.dumps(data_dict))  # {"status": true, "date": {"title": "1111", "price": 2222.0, "status": 2}}
        return HttpResponse(json.dumps(data_dict))
    

    主要使用方式二

    订单字段主要有名称、订单号、价格、状态和负责人,对于订单号让系统自动生成、负责人由当前登录用户确定(在order_updat视图函数实现)

  • Ajax请求获取待修改数据的信息并打开复选框

//将对应数据填充到input输入框中
$.each(res.data, function (name, value) {
//找到id为id_name的下一个标签,对value赋值
	$("#id_" + name).val(value);
})

利用ModelForm生成的input输入框,id形式均为id_xxx,因此遍历视图函数传来的字典数据,并根据id给其value属性赋值

$('#Modal').modal('show'); 找到id为Model的复选框,显示

2.3.5 增加与更新的保存实现

order_list

{% extends 'layout.html' %}

{% block content %}
...
...
    <!-- 新建 /编辑订单的对话框-->
...
     <div class="modal-footer">
         <button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
          <button id="btnSave" type="button" class="btn btn-primary">保 存</button>
     </div>
...
    <!--删除订单的对话框-->
...
...
    <!-- 数据展示 -->
...
...
{% endblock %}

{% block js %}
    <script type="text/javascript">
        //全局变量存储待删除的订单id
        var DELETE_ID;
        var UPDATE_ID;

        $(function () {
        	...
            bindBtnSaveEvent();

        })

        function bindBtnSaveEvent() {
            $('#btnSave').click(function () {
                console.log(UPDATE_ID)
                if (UPDATE_ID) {
                    //更新操作
                    doUpdate();
                } else {
                    //编辑操作
                    doAdd();
                }
            })
        }

        function doAdd() {
            UPDATE_ID = 0;
            $(".error-msg").empty();
            $.ajax({
                url: '/order/add',
                type: "post",
                data: $("#formAdd").serialize(),
                dataType: "JSON",
                success: function (res) {
                    if (res.status) {
                        //alert("添加成功");
                        //成功后清除表单
                        // $("#formAdd")jQuery对象无重置功能  $("#formAdd")[0] Dom对象,有重置功能
                        //$("#formAdd")[0].reset();

                        //关闭添加框
                        //$('#myModal').modal('hide');

                        //成功后刷新页面,更新展示列表
                        location.reload();
                    } else {
                        $.each(res.errors, function (name, data) {
                            // console.log(name,data);
                            //找到id为id_name的下一个标签,给赋予文本
                            $("#id_" + name).next().text(data[0]);
                        })
                    }
                }
            })
        }

        function doUpdate() {
            $.ajax({
                // 由于data传输的是整个表单,因此传输待修改的数据id时,利用url
                url: '/order/update' + '?uid=' + UPDATE_ID,
                type: "post",
                data: $("#formAdd").serialize(),
                dataType: "JSON",
                success: function (res) {
                    if (res.status) {
                        location.reload();
                    } else {
                        $.each(res.errors, function (name, data) {
                            // console.log(name,data);
                            //找到id为id_name的下一个标签,给赋予文本
                            $("#id_" + name).next().text(data[0]);
                        })
                    }
                }
            })
        }

    </script>
{% endblock %}
  • 按钮绑定

data-dismiss="modal" 取消按钮绑定 点击取消,关闭复选框

id="btnSave" 保存通过id绑定jQuery

        function bindBtnSaveEvent() {
            $('#btnSave').click(function () {
                console.log(UPDATE_ID)
                if (UPDATE_ID) {
                    //更新操作
                    doUpdate();
                } else {
                    //编辑操作
                    doAdd();
                }
            })
        }

根据保存按钮传来的UPDATE_ID来判断操作类型

2.3.5.1 增加

doAdd()

function doAdd() {
            UPDATE_ID = 0;
            $(".error-msg").empty();
            
            $.ajax({
                url: '/order/add',
                type: "post",
                data: $("#formAdd").serialize(),
                dataType: "JSON",
                success: function (res) {
                    if (res.status) {
                        location.reload();
                    } else {
                        $.each(res.errors, function (name, data) {
                            //找到id为id_name的下一个标签,给赋予文本
                            $("#id_" + name).next().text(data[0]);
                        })
                    }
                }
            })
        }

order_add()

def order_add(request):
    form = OrderModelForm(request.POST)
    if form.is_valid():
        # 由于post请求未传来oid的数据,因此oid的数据需手动添加
        # print(form.cleaned_data) {'title': 'dadw', 'price': 123.0, 'status': 1, 'admin': <Admin: WYT>}
        # 随机生成oid(当前日期+四位随机数)
        oid = datetime.datetime.now().strftime('%Y%m%d%H%M') + str(random.randint(1000, 9999))
        ########### 手动对某个字段添加数据的方法
        # form.instance.字段 = 数据
        form.instance.oid = oid

        # 对于管理员字段,自动填写为当前登录的用户,而不是用户输入
        # form.instance.admin_id = 当前用户登录的id(利用session), admin为外键,默认生成admin_id
        # request.session.get('info')['id']————当前用户登录的id
        form.instance.admin_id = request.session.get('info')['id']

        form.save()
        data_dict = {'status': True}
        return HttpResponse(json.dumps(data_dict))
    data_dict = {'status': False, 'errors': form.errors}
    return HttpResponse(json.dumps(data_dict, ensure_ascii=False))

订单字段主要有名称、订单号、价格、状态和负责人,对于订单号让系统自动生成、负责人由当前登录用户确定

  • 订单号

oid = datetime.datetime.now().strftime('%Y%m%d%H%M') + str(random.randint(1000, 9999)) 随机生成oid(当前日期+四位随机数)

手动对某个字段添加数据的方法

form.instance.字段 = 数据 form.instance.oid = oid

  • 负责人

对于管理员字段,自动填写为当前登录的用户,而不是用户输入

form.instance.admin_id = 当前用户登录的id(利用session), admin为外键,默认生成admin_id

request.session.get('info')['id']————当前用户登录的id

form.instance.admin_id = request.session.get('info')['id']

  • json返回

HttpResponse(json.dumps(data_dict, ensure_ascii=False))

等同于

return JsonResponse(data_dict)

2.3.5.2 更新

doUpdate()

function doUpdate() {
    $.ajax({
        url: '/order/update' + '?uid=' + UPDATE_ID,
        type: "post",
        data: $("#formAdd").serialize(),
        dataType: "JSON",
        success: function (res) {
            if (res.status) {
                location.reload();
            } else {
                $.each(res.errors, function (name, data) {
                    // console.log(name,data);
                    //找到id为id_name的下一个标签,给赋予文本
                    $("#id_" + name).next().text(data[0]);
                })
            }
        }
    })
}

url: '/order/update' + '?uid=' + UPDATE_ID,由于data传输的是整个表单,因此传输待修改的数据id时,利用url

order_update()

@csrf_exempt
def order_update(request):
    uid = request.GET.get('uid')
    print(uid)
    row_object = models.Order.objects.filter(id=uid).first()
    # 此处row_object 无需判断是否存在  查找待删除id的信息时已校验(order_details)
    form = OrderModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        data_dict = {'status': True}
        return HttpResponse(json.dumps(data_dict))
    data_dict = {'status': False,'errors': form.errors}
    return HttpResponse(json.dumps(data_dict))

2.4 订单的删除

2.4.1 删除确认复选框的显示

{% extends 'layout.html' %}

{% block content %}
...
...

    <!--删除订单的对话框-->
    <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="alert alert-danger alert-dismissible fade in" role="alert">
                <h4>是否删除该数据!!!</h4>
                <p style="text-align: right">
                    <button type="button" class="btn btn-danger btnDelete">确 定</button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
                </p>
            </div>
        </div>
    </div>
    <!-- 数据展示 -->
....
....
<td>
    {# 设置属性uid,表示待操作数据的id #}
    <input uid="{{ obj.id }}" type="button" class="btn btn-warning btn-sm updateShow" value="编辑">

    <input uid="{{ obj.id }}" type="button" class="btn btn-danger btn-sm deleteShow" value="删除">
</td>
....

    </div>
{% endblock %}

<input uid="{{ obj.id }}" type="button" class="btn btn-danger btn-sm deleteShow" value="删除"> 此按钮绑定复选框显示,并且将待删除的数据通过属性uid传输。

       function bindBtndeleteShow() {
           
           $('.deleteShow').click(function () {
               
               $('#deleteModal').modal('show');
               //获取待删除订单的id
               // $(this)获取当前标签[$('.deleteShow')]
               //attr() 方法设置或返回被选元素的属性值   返回uid属性的值
               DELETE_ID = $(this).attr('uid')

           })
       }

$('.deleteShow').click(function () { }) 点击所有class为deleteShow的按钮执行以下操作

$('#deleteModal').modal('show'); 点击删除按钮,显示删除警告框

(this)获取当前标签[$('.deleteShow')]

attr() 方法设置或返回被选元素的属性值 返回uid属性的值

DELETE_ID = $(this).attr('uid') 获取待删除订单的id

2.4.2 删除的实现

<!--删除订单的对话框-->
    <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="alert alert-danger alert-dismissible fade in" role="alert">
                <h4>是否删除该数据!!!</h4>
                <p style="text-align: right">
                    <button type="button" class="btn btn-danger btnDelete">确 定</button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
                </p>
            </div>
        </div>
    </div>

<button type="button" class="btn btn-danger btnDelete">确 定</button> 此按钮绑定删除Ajax请求

<button type="button" class="btn btn-default" data-dismiss="modal">取 消</button> 此按钮绑定取消复选框

function bindBtndeleteEvent() {
            $('.btnDelete').click(function () {
                $.ajax({
                    url: '/order/delete', 
                    type: 'get',
                    data: {
                        uid: DELETE_ID
                    },
                    dataType: 'JSON',
                    success: function (res) {
                        if (res.status) {
                            //alert("删除成功")
                            //关闭删除框
                            $('#deleteModal').modal('hide');
                            //待删除的数据id置空
                            DELETE_ID = 0;
                            //更新展示数据,页面刷新
                            location.reload();

                        } else {
                            alert(res.error)
                        }

                    }

                })
            })

        }

url: '/order/delete', 或 /order/delete?uid=? 或"/order/" + DELETE_ID + "/delete" uid的传输方法,data传输或者url传输

$('#deleteModal').modal('hide'); 关闭删除复选框

2.5 数据库获取数据方式对比

想要去数据库中获取数据时:对象/字典

  • 对象,当前行的所有数据。
row_object = models.Order.objects.filter(id=uid).first()
row_object.id
row_object.title
  • 字典,{“id”:1,“title”:“xx”}
row_dict = models.Order.objects.filter(id=uid).values("id","title").first()
  • queryset = [obj,obj,obj,]
queryset = models.Order.objects.all()
  • queryset = [ {‘id’:1,‘title’:“xx”},{‘id’:2,‘title’:“xx”}, ]
queryset = models.Order.objects.all().values("id","title")
  • queryset = [ (1,“xx”),(2,“xxx”), ]
queryset = models.Order.objects.all().values_list("id","title")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】vscode快捷键和实用Api整理

vscode的快捷键 创建a.html 生成模板 !回车 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

Galxe:被低估的加密市场掘金地+Web3门户

在BTC ETF获得 SEC 的批准之后&#xff0c;机构资金大量买入推动BTC上涨&#xff0c;并带动整个加密市场回暖进入牛市。那么&#xff0c;对于习惯了熊市保守心态的投资者来说&#xff0c;接下来如何转换策略适应牛市&#xff1f;对即将进场的Web2用户来说&#xff0c;如何玩赚W…

《汇编语言》第3版 (王爽)实验11解析

第11章 实验11解析 检测点11.3 &#xff08;1&#xff09;.补全下面的程序&#xff0c;统计F000&#xff1a;0处32个字节中&#xff0c;大小在[32&#xff0c;128]的数据个数。 mov ax,0f000hmov ds,axmov bx,0mov dx,0mov cx,32s:mov al,[bx]cmp al,32jb s0 ;由于包含32&#…

深入理解Java泛型:灵活、安全、可重用的编程利器

Java泛型是一项强大的编程特性&#xff0c;为程序员提供了一种灵活、类型安全、可重用的编码方式。通过泛型&#xff0c;我们能够编写更加通用、适应多种数据类型的代码&#xff0c;从而提高了代码的灵活性和可维护性。在这篇博客中&#xff0c;我们将深入探讨Java泛型的各个方…

selenium元素定位问题

具体网页信息如下&#xff1a; 定位的时候driver.find_element(By.CLASS_NAME, 方法搞不定。 定位方法&#xff1a; 方法一&#xff1a;通过文本定位 driver.find_element(By.XPATH, "//*[text()高分一号]").click() time.sleep(3) 如果是部分文字 #部分文字py…

GFP-GAN环境搭建推理测试

引子 近期&#xff0c;文生图&#xff0c;wav2lip很火&#xff0c;文生图&#xff0c;见识的太多&#xff0c;不多说了。wav2lip其通过语音驱动唇部动作并对视频质量进行修复&#xff0c;里面一般涉及到三个步骤&#xff0c;文本到语音转化&#xff0c;语音驱动唇部动作&#…

HIVE伪分布安装

引言 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,类似于RDBMS(关系型数据库,如MySQL、Oracle、PgSQL),并提供类SQL的查询功能。 实验准备 1.搭建好伪分布安装模式的Hadoop的虚拟机,并配置了Linux网络。(可看我前面发布的文章) 2.apache…

美国签证|附面签相关事项√

小伙伴最近都忙着办签证吧&#xff01;但是需要注意的是&#xff0c;美国的签证跟其他任何国家的签证不同&#xff0c;并不是办理了就一定拿得到&#xff0c;据说概率是50%左右。所以办理美国签证&#xff0c;不要太着急啦&#xff01;先来了解一下美国签证的相片该怎么拍叭 ✅…

NPP VIIRS卫星数据介绍及获取

VIIRS&#xff08;Visible infrared Imaging Radiometer&#xff09;可见光红外成像辐射仪。扫描式成像辐射仪&#xff0c;可收集陆地、大气、冰层和海洋在可见光和红外波段的辐射图像。它是高分辨率辐射仪AVHRR和地球观测系列中分辨率成像光谱仪MODIS系列的拓展和改进。VIIRS数…

雷卯推荐电磁兼容保护器件-PPTC自恢复保险丝

一、PPTC的简介 自恢复保险丝, 简称PPTC。是一种正温度系数聚合物热敏电阻&#xff0c;作过流保护用&#xff0c;可代替电流保险丝。 电路正常工作时它的阻值很小&#xff08;压降很小&#xff09;&#xff0c;当电路出现过流使它温度升高时&#xff0c;阻值急剧增大几个数量级…

运行时错误‘53’:文件未找到:MathPage.WLL。Word粘贴复制时报错解决方案!

最近写文章使用 Word 时&#xff0c;粘贴复制总是出现这个报错&#xff0c;不能 ctrlc 和 v 好叫人苦恼。百度大致检索了一些过程&#xff0c;仍然有必要记录自己的问题解决过程。 快让本文进你的文件夹吃灰吧~ 报错如下&#xff1a; 运行时错误‘53’&#xff1a; 文件未找…

C++特殊类设计【特殊类 || 单例对象 || 饿汉模式 || 懒汉模式】

目录 1. 只在堆上创建的类 2. 只允许在栈上创建的类 3. 不能被继承的类 4. 不能被拷贝的类 5. 设计一个类&#xff0c;只能创建一个对象&#xff08;单例对象&#xff09; 饿汉模式 懒汉模式 嗨&#xff01;收到一张超美的风景图&#xff0c;愿你每天都能顺心&#xff0…

Java中常用的集合及方法(2)

在Java&#xff08;JDK8&#xff09;中&#xff0c;集合&#xff08;Collection&#xff09;是数据结构的实现&#xff0c;用于存储和操作对象集合。 集合&#xff08;Collection&#xff09;中包含的一般类或接口&#xff1a; 在这其中呢&#xff0c;我们经常使用的其实就是L…

实验一:华为VRP系统的基本操作

1.1实验介绍 1.1.1关于本实验 本实验通过配置华为设备&#xff0c;了解并熟悉华为VRP系统的基本操作 1.1.2实验目的 理解命令行视图的含义以及进入离开命令行视图的方法 掌握一些常见的命令 掌握命令行在线帮助的方法 掌握如何撤销命令 掌握如何使用命令快捷键 1.1.3实验组网 …

数据结构(十)——头插法和尾插法建立单链表

&#x1f600;前言 在数据结构中&#xff0c;单链表是一种常见的数据结构&#xff0c;它由一个头节点和若干个数据节点组成。创建单链表的过程可以通过头插法或尾插法来实现。头插法是将新节点插入到链表的头部&#xff0c;而尾插法是将新节点插入到链表的尾部。本文将介绍头插…

qt 格式化打印 日志 QMessagePattern 格式词法语法及设置

一、qt源码格式化日志 关键内部类 QMessagePattern qt为 格式化打印日志 提供了一个简易的 pattern(模式/格式) 词法解析的简易的内部类QMessagePattern,作用是获取和解析自定义的日志格式信息。 该类在qt的专门精心日志操作的源码文件Src\qtbase\src\corelib\global\qloggi…

ChatGPT预训练的奥秘:大规模数据、Transformer架构与自回归学习【文末送书-31】

文章目录 ChatGPT原理与架构ChatGPT的预训练ChatGPT的迁移学习ChatGPT的中间件编程 ChatGPT原理与架构&#xff1a;大模型的预训练、迁移和中间件编程【文末送书-31】 ChatGPT原理与架构 近年来&#xff0c;人工智能领域取得了巨大的进展&#xff0c;其中自然语言处理&#xf…

微信小程序onLoad加载定义好的函数

这里小程序开发中容易犯的错误-1 给客户做一个程序。需要在页面加载的时候在onLoad(options){}中加载定义好的函数&#xff0c;代码如下 onLoad(options) {get_week_()},运行时老报错 后来修改为正确的代码 onLoad(options) {this.get_week_()//必须加this},再尝试运行&#x…

java学习(Arrays类和System类)

目录 一.Arrays类 二.System常见方法 一.Arrays类 Arrays包含了一系 列静态方法&#xff0c;用于管理或操作数组&#xff08;比如排序和搜索&#xff09; Integer[] s{1,2,3};//1.Arrays.toString方法&#xff0c;遍历数组//2.Arrays.sortArrays.sort(s);//默认排序&#xf…

幕译--本地字幕生成与翻译--Whisper客户端

幕译–本地字幕生成与翻译 本地离线的字幕生成与翻译&#xff0c;支持GPU加速。可免费试用&#xff0c;无次数限制 基于Whisper&#xff0c;希望做最好的Whisper客户端 功能介绍 本地离线&#xff0c;不用担心隐私问题支持GPU加速支持多种模型支持&#xff08;中文、英语、日…