【玩转全栈】----靓号管理系统实现
先赞后看,养成习惯。。。
目录
数据库设置
基本功能
路由器
靓号显示
靓号添加
靓号编辑
视图函数
额外功能
搜索功能
分页
一般逻辑
动态页码
上下页
首尾页
数据库设置
新建一个数据库(或者就用之前部门、用户管理的也行),用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=Truelevel_ = {(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 viewsurlpatterns = [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 formsclass VanitynumberForm(forms.ModelForm):class Meta:model = Vanitynumberfields = ['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) # 小于等于12data_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") # 筛选出包含222data_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_dataqueryset = 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_datapage = int(request.GET.get('page',1))page_html_list = []# 如果展示页码大于10if int(Vanitynumber.objects.all().count()/10) > 10:# 起止页码start = (page-1)*10end = page*10# 页码轮转start_page = page - 5# 保证页码不会出现非正数if start_page < 1:start_page = 1end_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]# 展示页码小于10else:start = (page - 1) * 10end = page * 10num = 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 }}即可,无需循环。
需要整个项目源码的可以私信我,这里我就不放出来了,过几天会放到我的资源里,大家自取。
感谢您的三连!!!
相关文章:
【玩转全栈】----靓号管理系统实现
先赞后看,养成习惯。。。 目录 数据库设置 基本功能 路由器 靓号显示 靓号添加 靓号编辑 视图函数 额外功能 搜索功能 分页 一般逻辑 动态页码 上下页 首尾页 数据库设置 新建一个数据库(或者就用之前部门、用户管理的也行),用Dja…...
【Attention】KV Cache
1 什么是KV Cache? 定义:KV Cache 即 Key-Value Cache,是用于加速 Transformer 模型推理长序列过程的一种技术。 核心原理:在 Transformer 的自注意力机制中,将历史输入 token 中的 Key 和 Value 缓存下来,…...
【Proteus仿真】【51单片机】多功能计算器系统设计
目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键 3、加减乘除,开方运算 4、带符号运算 5、最大 999*999 二、使用步骤 基于51单片机多功能计算器 包含:程序&…...
【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)
祈愿在2025蛇年里, 伟大的祖国风调雨顺、国泰民安、每个人齐心协力,共同经历这百年未有之大变局时代(国际政治、AI技术……) 祝福亲友同事孩子们平安健康(安全、安全、安全)、巳巳如意! 背景需…...
leetcode——二叉树的最大深度(java)
给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1,null,2] 输…...
Java创建项目准备工作
新建项目 新建空项目 每一个空项目创建好后都要检查jdk版本 检查SDK和语言级别——Apply——OK 检查当前项目的Maven路径,如果已经配置好全局,就是正确路径不用管 修改项目字符集编码,将所有编码都调整为UTF-8 创建Spingboot工程 创建Spring…...
汽车免拆诊断案例 | 2007 款日产天籁车起步加速时偶尔抖动
故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机…...
树和图的实现与应用:C语言实践详解
树和图的实现与应用:C语言实践详解 树和图是两种重要的非线性数据结构,在计算机科学中有着广泛的应用。从基本的二叉树到复杂的图算法(如最短路径和最小生成树),这些结构能够帮助我们高效解决实际问题。本文将从基础出发,逐步深入,讲解如何用C语言实现树和图,并探讨其…...
CSS:跑马灯
<div class"swiper-container"><div class"swiper-wrapper"><!-- 第一组 --><div class"item" v-for"item in cardList" :key"first-item.id"><img :src"item.image" alt""…...
【JavaEE】_MVC架构与三层架构
目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…...
【人工智能】基于Python的机器翻译系统,从RNN到Transformer的演进与实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 机器翻译(Machine Translation, MT)作为自然语言处理领域的重要应用之一,近年来受到了广泛的关注。在本篇文章中,我们将详细探讨如何使…...
单片机基础模块学习——PCF8591芯片
一、A/D、D/A模块 A——Analog 模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital 数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号) 下面是模拟信号和连续信号的区别 为什么需要进行模拟信号和数字信号之…...
Vue5---
目录 一、学习目标 1.自定义指令 2.插槽 3.综合案例:商品列表 4.路由入门 二、自定义指令 1.指令介绍 2.自定义指令 3.自定义指令的语法 三、自定义指令-指令的值 1.需求 2.语法 3.代码示例 五、插槽-默认插槽 1.作用 2.需求 4.使用插槽的基本语法…...
C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
用C实现高性能数据处理,Python实现操作Redshift导入数据文件。 在Visual Studio 2022中用C和ODBC API导出SQL Server数据库中张表中的所有表的数据为CSV文件格式的数据流,用逗号作为分隔符,用双引号包裹每个数据,字符串类型的数据…...
在Putty创建php文件
之前不知道怎么在 http://AAAcemcs02.AAA.edu/~AAA/515/1 上面创建文件夹,一直都是forbidden 解决办法是用chomod 755 * 创建文件以后全部打开,再用ls确认目录,就会有 创建文件的流程如下 #enter folder 515/1 cd ~/public_html/515/1 …...
小白爬虫冒险之反“反爬”:无限debugger、禁用开发者工具、干扰控制台...(持续更新)
背景浅谈 小白踏足JS逆向领域也有一年了,对于逆向这个需求呢主要要求就是让我们去破解**“反爬机制”**,即反“反爬”,脚本处理层面一般都是decipher网站对request设置的cipher,比如破解一个DES/AES加密拿到key。这篇文章先不去谈…...
17 一个高并发的系统架构如何设计
高并发系统的理解 第一:我们设计高并发系统的前提是该系统要高可用,起码整体上的高可用。 第二:高并发系统需要面对很大的流量冲击,包括瞬时的流量和黑客攻击等 第三:高并发系统常见的需要考虑的问题,如内存不足的问题,服务抖动的…...
「 机器人 」利用冲程对称性调节实现仿生飞行器姿态与方向控制
前言 在仿生扑翼飞行器中,通过改变冲程对称性这一技术手段,可以在上冲与下冲两个阶段引入不对称性,进而产生额外的力或力矩,用于实现俯仰或其他姿态方向的控制。以下从原理、在仿生飞行器中的应用和典型实验示例等方面进行梳理与阐述。 1. 冲程对称性原理 1.1 概念:上冲与…...
layui Table单元格编辑支持Enter键换行,包括下拉框单元格
layui Table表格编辑支持Enter键换行 可编辑单元格 $(".layui-table td").keydown(function (e) {// console.log("111",e);var index $(this).index(),tr $(this).parent(tr),isKeydown (event.type "keydown");if (e.code "Enter&q…...
分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv
结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径, 旨在将强化学习(RL)和代码即策略相结合, 以解决大语言模型(…...
Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手
大家好,我是老六哥,我正在共享使用AI提高工作效率的技巧。欢迎关注我,共同提高使用AI的技能,让AI成功你的个人助理。 许多人可能会跟老六哥一样,有过这样的体验:当我们遇到一个能力出众或对事物有独到见解的…...
【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)
本文项目编号 T 158 ,文末自助获取源码 \color{red}{T158,文末自助获取源码} T158,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)
RAR 文件是一种常见的压缩文件格式,由尤金・罗谢尔(Eugene Roshal)开发,因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩,大幅减小存储空间,方便数据传输与备份。然而…...
Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
文章目录 Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)1. 副本的基本概念2. 副本同步和一致性2.1 AR(Assigned Replicas)2.2 ISR(In-Sync Replicas)2.3 OSR(Out-of-Sync Replicas…...
【某大厂一面】HashSet底层怎么实现的
HashSet 是 Java 集合框架中的一个非常常用的集合类,它实现了 Set 接口,并且底层通常是通过 哈希表(HashMap)来实现的。要理解 HashSet 的底层实现,我们需要从哈希表的工作原理开始讲起。下面是对 HashSet 底层实现的详…...
网关登录校验
网关登录校验 单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,不再共享数据。也就意味着每个微服务都需要做登录校验,这显然不可取。 鉴权思路分析 …...
【C语言】在Windows上为可执行文件.exe添加自定义图标
本文详细介绍了在 Windows 环境下,如何为使用 GCC 编译器编译的 C程序 添加自定义图标,从而生成带有图标的 .exe 可执行文件。通过本文的指导,读者可以了解到所需的条件以及具体的操作步骤,使生成的程序更具专业性和个性化。 目录 1. 准备条件2. 具体步骤步骤 1: 准备资源文…...
前端性能优化:HMR热更新和预获取加载
最近发现项目开发,有点加载快,有点却是卡机式,甚至刷新导致白屏情况。于是,我找开发和性能优化的方法,找到下面几种。 本文将深入探讨 预获取(Prefetch)、动态导入(Dynamic Import&…...
计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
C++ 包装器与绑定器的应用之回调函数的实现
回调函数的实现 在消息队列和网络库的框架中,当接收到消息(报文)时,回调用户自定义的函数对象,把消息(报文)参数传给它,由它决定如何处理。 queue参考文章:C queue(STL queue&…...
