【玩转全栈】----靓号管理系统实现

news2025/1/30 20:49:30

先赞后看,养成习惯。。。

目录

数据库设置

基本功能

路由器

靓号显示

靓号添加

靓号编辑

视图函数

额外功能

搜索功能

分页

一般逻辑

动态页码

上下页

首尾页

数据库设置

新建一个数据库(或者就用之前部门、用户管理的也行),用Django连接到数据库:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "mydata_1",
        "USER": "root",
        "PASSWORD": "您的密码",
        "HOST": "127.0.0.1",
        "PORT": "3306",
    }
}

新建数据库,在models中新建数据表,定义表的结构:

from django.db import models

# Create your models here.
class Vanitynumber(models.Model):
    mobile = models.CharField(verbose_name="手机号",max_length=11, unique=True)
    price = models.IntegerField(verbose_name="价格",default=0)
    # 默认为空:null=True,blank=True
    level_ = {
        (1,"一类号"),
        (2,"二类号"),
        (3,"三类号"),
    }
    statues_ = {
        (1,"占用"),
        (2,"未占用"),
    }
    level = models.SmallIntegerField(verbose_name="级别",choices=level_,default=1)
    status = models.SmallIntegerField(verbose_name="占用情况",choices=statues_,default=2)

迁移数据库命令:

# 生成迁移文件
python manage.py makemigrations

# 应用迁移
python manage.py migrate

可以自己添加点数据并在终端查看是否存入数据库:

 insert into app01_vanitynumber(mobile,price,level,status) values(13992349299,2400,2,2);

与预期无异。

基本功能

大体跟之前用户、部门管理类似,大家也可以玩玩其他的BootStrap样式

路由器

from django.contrib import admin
from django.urls import path
from sqlalchemy.dialects.mssql.information_schema import views
from app01 import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.vanity_show),
    path("vanity/show/", views.vanity_show),
    path("vanity/add/", views.vanity_add),
    path("vanity/<int:nid>/edit/", views.vanity_edit),
    path("vanity/<int:nid>/delete/", views.vanity_delete),
]

靓号显示

vanity_show.html:

{% extends 'layout.html' %}
{% block content %}
    <div class="panel panel-default" style="margin-left: 40px;margin-right: 40px">
      <div class="panel-heading" style="color: #1265b5">靓号列表</div>
        <a href="/vanity/add/">
            <button type="button" class="btn btn-success" style="margin-top: 10px;margin-left: 10px">
            <span class="glyphicon glyphicon-pencil" aria-hidden="true" ></span>
                添加靓号</button>
        </a>
      <div class="panel-body">
        <div class="bs-example" data-example-id="bordered-table">
        <table class="table table-bordered table-hover table-striped">
          <thead>
            <tr>
              <th>ID</th>
              <th>号码</th>
              <th>价格</th>
              <th>类别</th>
              <th>占用情况</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
          {% for items in queryset %}
            <tr>
              <th scope="row">{
  
  { items.id }}</th>
              <td>{
  
  { items.mobile }}</td>
              <td>{
  
  { items.price }}</td>
              <td>{
  
  { items.get_level_display }}</td>
              <td>{
  
  { items.get_status_display }}</td>
            <td>
                <a class="btn btn-primary btn-xs" href="/vanity/{
  
  { items.id }}/edit/">编辑</a>
                <a class="btn btn-danger btn-xs" href="/vanity/{
  
  { items.id }}/delete/">删除</a>
            </td>
            </tr>
          {% endfor %}
          </tbody>
        </table>
  </div>
      </div>
    </div>

{% endblock %}

靓号添加

vanity_add.html:

{% extends 'layout.html' %}
{% block content %}
    <div class="container-fluid" style="margin-top: 10px">
     <div class="my-div">
        <div class="container">
            <div class="panel panel-default" style="width: 750px;margin-top: 10px">
              <!-- Default panel contents -->
              <div class="panel-heading" style="margin-top: 0">新建 靓号</div>
              <div class="panel-body">
                <form class="form-horizontal" method="POST" action="/vanity/add/">
                    {% csrf_token %}
                  <!-- 输入框 -->
                    {% for items in form %}
                  <div class="form-group">
                    <label class="col-sm-2 control-label">{
  
  { items.label }}</label>
                    <div class="col-sm-5">
{#                      <input type="text" class="form-control" id="inputDepartmentName" placeholder="" name="{
  
  { items.label }}">#}
                        {
  
  { items }}
{#                        要是有错误信息,会显示#}
                        <span style="color: red">{
  
  { items.errors.0 }}</span>
{#                        直接手写{
  
  { items }},因为他会自动帮我们生成html标签#}
                    </div>
                  </div>
{#                        {
  
  { items.label }} : {
  
  { items }}#}
                    {% endfor %}
                  <!-- 提交按钮 -->
                  <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                      <button type="submit" class="btn btn-primary">提 交</button>
                    </div>
                  </div>
                </form>
              </div>
            </div>
        </div>
    </div>
</div>

{% endblock %}

靓号编辑

vanity_edit.html:

{% extends 'layout.html' %}
{% block content %}
    <div class="container">
        <div class="panel panel-default" style="width: 750px;margin-top: 10px">
              <div class="panel-heading" style="margin-top: 0">编辑 靓号</div>
              <div class="panel-body">
                <form class="form-horizontal" method="POST" >
                    {% csrf_token %}
                  <!-- 输入框 -->
                    {% for items in form %}
                  <div class="form-group">
                    <label for="inputDepartmentName" class="col-sm-2 control-label">{
  
  { items.label }}</label>
                    <div class="col-sm-5">
                        {
  
  { items }}
                        <span style="color: red">{
  
  { items.errors.0 }}</span>
                    </div>
                  </div>
                    {% endfor %}
                  <!-- 提交按钮 -->
                  <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                      <button type="submit" class="btn btn-primary">提 交</button>
                    </div>
                  </div>
                </form>
              </div>
            </div>
    </div>
{% endblock %}

视图函数

from django.shortcuts import render,HttpResponse,redirect
from app01.models import Vanitynumber
from django import forms


class VanitynumberForm(forms.ModelForm):
    class Meta:
        model = Vanitynumber
        fields = ['mobile','price','level','status']

    # 2、循环到所有的插件再赋予form-control样式
    def __init__(self,*args,**kwargs):
        super(VanitynumberForm,self).__init__(*args,**kwargs)
        # 循环找到所有的插件
        for name,field in self.fields.items():
            field.widget.attrs = {'class':'form-control'}
def vanity_show(request):
    form = VanitynumberForm()
    queryset = Vanitynumber.objects.all()
    return render(request,'vanity_show.html',{'form':form,'queryset':queryset})

def vanity_add(request):
    """添加用户,ModelForm版本"""
    if request.method == "GET":
        form = VanitynumberForm()
        return render(request, "vanity_add.html",{"form":form})
    # 用户提交POST请求,校验数据
    form = VanitynumberForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect("/vanity/show")
    else:
        print(form.errors)

def vanity_edit(request,nid):
    row_object = Vanitynumber.objects.filter(id=nid).first()
    if request.method == "GET":
        # 根据ID去数据库获取要编辑的那一行数据(对象)
        # 加上instance=row_object会默认将对应ID的数据显示到页面输入框中,这就比之前的部门管理要方便很多
        form = VanitynumberForm(instance=row_object)
        return render(request, "vanity_edit.html", {"form": form})
    # 如果不加下面这行代码,并且UserForm中加instance,那么数据库中就不是更新数据,因为程序不知道要更新哪一行数据,所有程序会自动新添加一行数据,原来数据保持不变
    form = VanitynumberForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        return redirect("/vanity/show/")
    return render(request, "vanity_edit.html", {"form": form})

def vanity_delete(request,nid):
    Vanitynumber.objects.filter(id=nid).delete()
    return redirect("/vanity/show/")

额外功能

搜索功能

搜索功能就是按照输入的某些数字,在已有号码中搜索满足某些条件的内容

Django中搜索的两张方式:

都是差不多的,区别在于第二种传字典作为参数

第一种:

q1 = Vanitynumber.objects.filter(status=1,id=1)
print(q1)

第二种:

data_list = {"mobile":"19999234567","id":3}
q2 = Vanitynumber.objects.filter(**data_list)
print(q2)

使用第二种更方便做其他操作,比如加正则。

Django还提供了一些更加便捷的索引规则,比如双下划线,可将具体筛选规则以字典形式传参,前面要加上双星号。

Vanitynumber.objects.filter(id=12)       # 等于12
Vanitynumber.objects.filter(id__gt=12)   # 大于12
Vanitynumber.objects.filter(id__gte=12)  # 大于等于12
Vanitynumber.objects.filter(id__lt=12)   # 小于12
Vanitynumber.objects.filter(id__lte=12)  # 小于等于12

data_dict1 = {"id__lte":12}
Vanitynumber.objects.filter(**data_dict1)

Vanitynumber.objects.filter(mobile="999")               # 等于
Vanitynumber.objects.filter(mobile__startswith="1999")  # 筛选出以1999开头
Vanitynumber.objects.filter(mobile__endswith="222")     # 筛选出以222结尾
Vanitynumber.objects.filter(mobile__contains="222")     # 筛选出包含222

data_dict2 = {"mobile__contains":"222"}
Vanitynumber.objects.filter(**data_dict2)

在展示页面,我们可以在右上方加个输入框和提交按钮,用户接收用户搜索输入语句,有时用户输入可能包含其他字符,我们可以用正则提取到符合条件的内容,这里是连续的数字。通过data_list搜索到的数据,可以返还到html上,显示搜索到的内容。具体实现代码如下:

views.py:

import re
def vanity_show(request):
    form = VanitynumberForm()
    # 先定义一个壳子,再添加
    data_list = {}
    search_data = request.GET.get('q',"")
    search_data = re.search(r'\d+', search_data)
    if search_data:
        search_data=search_data.group()
    else:
        search_data=""
    if search_data:
        data_list["mobile__contains"] = search_data
    queryset = Vanitynumber.objects.filter(**data_list).order_by('-level')
    return render(request,'vanity_show.html',{'form':form,'queryset':queryset,'search_data':search_data})

        这里通过GET传参获取q和一个空字符串,作用是使当q无值时,默认为空,以避免因data_list无值而产生报错;对search_data运行正则提取第一个出现的连续数字,如果不为空,则解对象,如果为空,赋值空字符串;再将search_data添加到search_list中;通过filter找到符合条件的queryset,传回html

vanity_show.html:

{% extends 'layout.html' %}
{% block content %}
    <div class="panel panel-default" style="margin-left: 40px;margin-right: 40px">
      <div class="panel-heading" style="color: #1265b5">靓号列表</div>
        <a href="/vanity/add/">
            <button type="button" class="btn btn-success" style="margin-top: 10px;margin-left: 10px">
            <span class="glyphicon glyphicon-pencil" aria-hidden="true" ></span>
                添加靓号</button>
        </a>
        <div style="float: right;width: 300px">
            <div class="input-group" style="display: flex; align-items: center;">
                <form action="" method="GET" style="display: flex; align-items: center;">
                    <label style="margin-top: 11px;margin-right: 4px;margin-bottom: 11px">
                        <input type="text" name="q" class="form-control" placeholder="Search" value="{
  
  { search_data }}" style="margin-right: 4px;">
                    </label>
                    <span class="input-group-btn">
                        <button class="btn btn-primary" type="submit">
                            <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                            <span class="glyphicon-class">搜索</span>
                        </button>
                    </span>
                </form>
            </div>
        </div>
      <div class="panel-body">
        <div class="bs-example" data-example-id="bordered-table">
        <table class="table table-bordered table-hover table-striped">
          <thead>
            <tr>
              <th>ID</th>
              <th>号码</th>
              <th>价格</th>
              <th>类别</th>
              <th>占用情况</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
          {% for items in queryset %}
            <tr>
              <th scope="row">{
  
  { items.id }}</th>
              <td>{
  
  { items.mobile }}</td>
              <td>{
  
  { items.price }}</td>
              <td>{
  
  { items.get_level_display }}</td>
              <td>{
  
  { items.get_status_display }}</td>
            <td>
                <a class="btn btn-primary btn-xs" href="/vanity/{
  
  { items.id }}/edit/">编辑</a>
                <a class="btn btn-danger btn-xs" href="/vanity/{
  
  { items.id }}/delete/">删除</a>
            </td>
            </tr>
          {% endfor %}
          </tbody>
        </table>
  </div>
      </div>
    </div>

{% endblock %}

再将符合条件信息展示到页面上,并将输入框传入search_data作为默认值。

这样,就完成了搜索功能。

分页

一般逻辑

        当数据量很大的时候,页面会向下延伸很长,这样不仅影响观感,还浪费空间,可以设置分页功能,为每一页都设置一个最大数据量。

分页的具体逻辑也很简单,也是html标签实现跳转:

<li><a href="/vanity/show/?page={i}"></a></li>

但如果页数很多的话,html文件会很长,而且也不利于一些更复杂的操作,可以在视图函数中以字符串的形式传给html页面,但直接传的话会报错,Django无法正常将字符串标签转换为标签,需要在视图函数中引入mark_safe函数,对字符串进行包裹,类似这样:

mark_safe('<li><a href="/vanity/show/?page={i}"></a></li>')

也可将一个一个的标签,动态存入列表,再使用join函数构造字符串,再用mark_safe包裹,传回html,例如:

data_list = []
for i in range(start_page,end_page+1):
    if i == page:
        str_html_1 = f'<li class="active"><a href="/vanity/show/?page={i}">{i}</a></li>'
    else:
        str_html_1 = f'<li><a href="/vanity/show/?page={i}">{i}</a></li>'
    data_list .append(str_html_1)
data_str = mark_safe("\n".join(data_list ))
queryset = Vanitynumber.objects.filter(**data_list).order_by('-level')[start:end]

对于多行数据,一页是放不下的,可以一页放一定的数据(这里一页放10条),放多页。

此时,对于第一页:页数是1,数据是(0,10)

第二页:页数是2,数据是(10,20)

...............

第 n 页:页数是n,数据是((n-1)×10,n×10)

数据库中的数据条数是可以用函数得到的:

num = Vanitynumber.objects.all().count()

所以可通过总数据条数反推页数

对于特定的某页,可通过索引在数据库中取值:

start = (page-1)*10
end = page * 10
queryset = Vanitynumber.objects.filter(**data_list).order_by('-level')[start:end]

再构造标签字符串,使得页面中点击页码就会跳转到该页,并显示数据。

动态页码

但如果数据量足够多,页码也会很多,在页面中也显示不完,或者说看着很丑,这时,可用动态页码加以改进:

我们希望在页面上展示的页码数不能超过一定的阈值(这里是11)。对于用户提交,从而前端返回的页码数page,我们可用只显示page前五页到page后五页,总共11页

即:

start_page = page - 5
end_page = page + 5

这样去显示效果会好得多,但这样还要问题,当用户点击4页及以前或者最大页码时,左边会出现负数页码,右边则可能会报错,如何解决呢?

可以增加判断语句,如果页码 <= 5,start_page = 1,如果页码 >= 最大页码 - 4,end_page = 最大页码:

if start_page < 1:
    start_page = 1
end_page = page + 5
# 保证页码不会超限
if end_page > int(Vanitynumber.objects.all().count()/10):
    end_page = int(Vanitynumber.objects.all().count()/10)

这样,就能保证不会出现异常。

上下页

增加上下页逻辑很简单,就是点击后page相应地加一减一。需要注意的是“上一页”应当放到最前面,"下一页"放到最后面,因为.append()方法是在后面添加,当然,你也可以使用其他的插入函数。

并且,当page已经是首页或者尾页时,不能跳转了,需要判断一下,具体代码如下:

# 上一页
if page >= 1:
    prev = f'<li><a href="/vanity/show/?page={page-1}">上一页</a></li>'
    page_html_list.append(prev)
else:
    prev = f'<li><a href="/vanity/show/?page=1">上一页</a></li>'
    page_html_list.append(prev)
# 下一页
if page < int(Vanitynumber.objects.all().count() / 10):
    prior = f'<li><a href="/vanity/show/?page={page + 1}">下一页</a></li>'
    page_html_list.append(prior)
else:
    prior = f'<li><a href="/vanity/show/?page={int(Vanitynumber.objects.all().count() / 10)}">下一页</a></li>'
    page_html_list.append(prior)

首尾页

首尾页直接定位即可:

# 首页
page_html_list.append(f'<li><a href="/vanity/show/?page={1}">首页</a></li>')
# 尾页
page_html_list.append(f'<li><a href="/vanity/show/?page={int(Vanitynumber.objects.all().count() / 10)}">尾页</a></li>')

分页相关代码如下:

views.py:

 vanity_show(request):
    form = VanitynumberForm()
    data_list = {}
    search_data = request.GET.get('q',"")
    search_data = re.search(r'\d+', search_data)
    if search_data:
        search_data=search_data.group()
    else:
        search_data=""
    if search_data:
        data_list["mobile__contains"] = search_data

    page = int(request.GET.get('page',1))
    page_html_list = []
    # 如果展示页码大于10
    if int(Vanitynumber.objects.all().count()/10) > 10:
        # 起止页码
        start = (page-1)*10
        end = page*10
        # 页码轮转
        start_page = page - 5
        # 保证页码不会出现非正数
        if start_page < 1:
            start_page = 1
        end_page = page + 5
        # 保证页码不会超限
        if end_page > int(Vanitynumber.objects.all().count()/10):
            end_page = int(Vanitynumber.objects.all().count()/10)
        # 首页
        page_html_list.append(f'<li><a href="/vanity/show/?page={1}">首页</a></li>')
        # 上一页
        if page >= 1:
            prev = f'<li><a href="/vanity/show/?page={page-1}">上一页</a></li>'
            page_html_list.append(prev)
        else:
            prev = f'<li><a href="/vanity/show/?page=1">上一页</a></li>'
            page_html_list.append(prev)

        # 构造标签
        for i in range(start_page,end_page+1):
            if i == page:
                str_html_1 = f'<li class="active"><a href="/vanity/show/?page={i}">{i}</a></li>'
            else:
                str_html_1 = f'<li><a href="/vanity/show/?page={i}">{i}</a></li>'
            page_html_list.append(str_html_1)
        # 下一页
        if page < int(Vanitynumber.objects.all().count() / 10):
            prior = f'<li><a href="/vanity/show/?page={page + 1}">下一页</a></li>'
            page_html_list.append(prior)
        else:
            prior = f'<li><a href="/vanity/show/?page={int(Vanitynumber.objects.all().count() / 10)}">下一页</a></li>'
            page_html_list.append(prior)
        # 尾页
        page_html_list.append(f'<li><a href="/vanity/show/?page={int(Vanitynumber.objects.all().count() / 10)}">尾页</a></li>')
        # mark_safe使得字符串能在页面正常显示
        data_str = mark_safe("\n".join(page_html_list))
        queryset = Vanitynumber.objects.filter(**data_list).order_by('-level')[start:end]
        # 展示页码小于10
    else:
        start = (page - 1) * 10
        end = page * 10
        num = int(Vanitynumber.objects.all().count()/10)
        for i in range(1, num+1):
            if i == page:
                str_html_2 = f'<li class="active"><a href="/vanity/show/?page={i}">{i}</a></li>'
            else:
                str_html_2 = f'<li><a href="/vanity/show/?page={i}">{i}</a></li>'
            page_html_list.append(str_html_2)
        data_str = mark_safe("\n".join(page_html_list))
        queryset = Vanitynumber.objects.filter(**data_list).order_by('-level')[start:end]
    return render(request,'vanity_show.html',{'form':form,'queryset':queryset,'search_data':search_data,'data_str':data_str})

vanity_show:

{% extends 'layout.html' %}
{% block content %}
    <div class="panel panel-default" style="margin-left: 40px;margin-right: 40px">
      <div class="panel-heading" style="color: #1265b5">靓号列表</div>
        <a href="/vanity/add/">
            <button type="button" class="btn btn-success" style="margin-top: 10px;margin-left: 10px">
            <span class="glyphicon glyphicon-pencil" aria-hidden="true" ></span>
                添加靓号</button>
        </a>
        <div style="float: right;width: 300px">
            <div class="input-group" style="display: flex; align-items: center;">
                <form action="" method="GET" style="display: flex; align-items: center;">
                    <label style="margin-top: 11px;margin-right: 4px;margin-bottom: 11px">
                        <input type="text" name="q" class="form-control" placeholder="Search" value="{
  
  { search_data }}" style="margin-right: 4px;">
                    </label>
                    <span class="input-group-btn">
                        <button class="btn btn-primary" type="submit">
                            <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                            <span class="glyphicon-class">搜索</span>
                        </button>
                    </span>
                </form>
            </div>
        </div>
      <div class="panel-body">
        <div class="bs-example" data-example-id="bordered-table">
        <table class="table table-bordered table-hover table-striped">
          <thead>
            <tr>
              <th>ID</th>
              <th>号码</th>
              <th>价格</th>
              <th>类别</th>
              <th>占用情况</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
          {% for items in queryset %}
            <tr>
              <th scope="row">{
  
  { items.id }}</th>
              <td>{
  
  { items.mobile }}</td>
              <td>{
  
  { items.price }}</td>
              <td>{
  
  { items.get_level_display }}</td>
              <td>{
  
  { items.get_status_display }}</td>
            <td>
                <a class="btn btn-primary btn-xs" href="/vanity/{
  
  { items.id }}/edit/">编辑</a>
                <a class="btn btn-danger btn-xs" href="/vanity/{
  
  { items.id }}/delete/">删除</a>
            </td>
            </tr>
          {% endfor %}
          </tbody>
        </table>
  </div>
      </div>
    <ul class="pagination">
        {
  
  { data_str }}
     </ul>
    </div>

{% endblock %}

因为用了ModelForm,无序列表中直接{ { data_str }}即可,无需循环。

需要整个项目源码的可以私信我,这里我就不放出来了,过几天会放到我的资源里,大家自取。

感谢您的三连!!!

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

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

相关文章

【Attention】KV Cache

1 什么是KV Cache&#xff1f; 定义&#xff1a;KV Cache 即 Key-Value Cache&#xff0c;是用于加速 Transformer 模型推理长序列过程的一种技术。 核心原理&#xff1a;在 Transformer 的自注意力机制中&#xff0c;将历史输入 token 中的 Key 和 Value 缓存下来&#xff0c…

【Proteus仿真】【51单片机】多功能计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、加减乘除&#xff0c;开方运算 4、带符号运算 5、最大 999*999 二、使用步骤 基于51单片机多功能计算器 包含&#xff1a;程序&…

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…

leetcode——二叉树的最大深度(java)

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输…

Java创建项目准备工作

新建项目 新建空项目 每一个空项目创建好后都要检查jdk版本 检查SDK和语言级别——Apply——OK 检查当前项目的Maven路径&#xff0c;如果已经配置好全局&#xff0c;就是正确路径不用管 修改项目字符集编码&#xff0c;将所有编码都调整为UTF-8 创建Spingboot工程 创建Spring…

汽车免拆诊断案例 | 2007 款日产天籁车起步加速时偶尔抖动

故障现象  一辆2007款日产天籁车&#xff0c;搭载VQ23发动机&#xff08;气缸编号如图1所示&#xff0c;点火顺序为1-2-3-4-5-6&#xff09;&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车起步加速时偶尔抖动&#xff0c;且行驶中加速无力。 图1 VQ23发动机…

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式&#xff0c;详见下文&#xff1a; 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次&#xff0c;点…

单片机基础模块学习——PCF8591芯片

一、A/D、D/A模块 A——Analog 模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital 数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号) 下面是模拟信号和连续信号的区别 为什么需要进行模拟信号和数字信号之…

Vue5---

目录 一、学习目标 1.自定义指令 2.插槽 3.综合案例&#xff1a;商品列表 4.路由入门 二、自定义指令 1.指令介绍 2.自定义指令 3.自定义指令的语法 三、自定义指令-指令的值 1.需求 2.语法 3.代码示例 五、插槽-默认插槽 1.作用 2.需求 4.使用插槽的基本语法…

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径&#xff0c; 旨在将强化学习&#xff08;RL&#xff09;和代码即策略相结合&#xff0c; 以解决大语言模型&#xff08…

Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手

大家好&#xff0c;我是老六哥&#xff0c;我正在共享使用AI提高工作效率的技巧。欢迎关注我&#xff0c;共同提高使用AI的技能&#xff0c;让AI成功你的个人助理。 许多人可能会跟老六哥一样&#xff0c;有过这样的体验&#xff1a;当我们遇到一个能力出众或对事物有独到见解的…

【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)

本文项目编号 T 158 &#xff0c;文末自助获取源码 \color{red}{T158&#xff0c;文末自助获取源码} T158&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)

RAR 文件是一种常见的压缩文件格式&#xff0c;由尤金・罗谢尔&#xff08;Eugene Roshal&#xff09;开发&#xff0c;因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩&#xff0c;大幅减小存储空间&#xff0c;方便数据传输与备份。然而&#xf…

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

文章目录 Kafka 副本机制&#xff08;包含AR、ISR、OSR、HW 和 LEO 介绍&#xff09;1. 副本的基本概念2. 副本同步和一致性2.1 AR&#xff08;Assigned Replicas&#xff09;2.2 ISR&#xff08;In-Sync Replicas&#xff09;2.3 OSR&#xff08;Out-of-Sync Replicas&#xf…

网关登录校验

网关登录校验 单体架构时我们只需要完成一次用户登录、身份校验&#xff0c;就可以在所有业务中获取到用户信息。而微服务拆分后&#xff0c;每个微服务都独立部署&#xff0c;不再共享数据。也就意味着每个微服务都需要做登录校验&#xff0c;这显然不可取。 鉴权思路分析 …

【C语言】在Windows上为可执行文件.exe添加自定义图标

本文详细介绍了在 Windows 环境下,如何为使用 GCC 编译器编译的 C程序 添加自定义图标,从而生成带有图标的 .exe 可执行文件。通过本文的指导,读者可以了解到所需的条件以及具体的操作步骤,使生成的程序更具专业性和个性化。 目录 1. 准备条件2. 具体步骤步骤 1: 准备资源文…

计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

商品信息管理自动化测试

目录 前言 一、思维导图 二、代码编写 1.在pom.xml文件中添加相关依赖 2.自动化代码编写 三、代码测试 小结 前言 1. 针对商品信息管理项目进行测试&#xff0c;商品信息管理项目主要有商品列表页、部门列表页、员工列表页&#xff0c;主要功能&#xff1a;对商品信息的…

【实践】基于SakuraLLM的离线日文漫画及视频汉化

介绍 LLM 大型语言模型&#xff08;英语&#xff1a;large language model&#xff0c;LLM&#xff09;&#xff0c;也称大语言模型&#xff0c;是由具有大量参数&#xff08;通常数十亿个权重或更多&#xff09;的人工神经网络组成的一类语言模型。在进行语言理解与分析&…

常见的同态加密算法收集

随着对crypten与密码学的了解&#xff0c;我们将逐渐深入学习相关知识。今天&#xff0c;我们将跟随同态加密的发展历程对相关算法进行简单的收集整理 。 目录 同态加密概念 RSA算法 ElGamal算法 ELGamal签名算法 Paillier算法 BGN方案 Gentry 方案 BGV 方案 BFV 方案…