当前位置: 首页 > news >正文

Django之表格上传

表格上传

目录

1.完成上次还遗留下来的修改和删除功能

2.资产表格文件上传功能

3.代码展示集合

这篇文章, 先把上一篇文章剩下的修改和删除功能解决了, 因为绩效表格的修改和删除功能, 和之前的修改删除有一点区别, 不过原理都是一样的, 然后再实现把资产表格文件功能。

一、完成上次还遗留下来的修改和删除功能

绩效修改功能代码:

perform.py:

class PerformModifyModelForm(forms.ModelForm):class Meta:model = models.Performfields = ["oid", "source", "title", "price"]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control"}def modify_perform(request, nid):title = "修改绩效信息"query_set = models.Perform.objects.filter(id=nid).first()if request.method == "GET":form = PerformModifyModelForm(instance=query_set)content = {"form": form, "title": title}return render(request, "perform/perform_add_modify.html", content)form = PerformModifyModelForm(data=request.POST, files=request.FILES, instance=query_set)if form.is_valid():form.save()return redirect("/perform/list/")return render(request, "perform/perform_add_modify.html", {"form": form, "title": title})

这里面需要注意的是, 我们只需要修改oid, source, title, price这四个字段的信息, 其他比如name和image是不能修该的, 因为name就是当前添加信息的那个人的账号名, image是上传的文件, 一般文件上传错了, 得重新上传再修改即可, 无需重新修改文件, 否则修改之后新的文件和之前未修改遗留下来的文件都在, 这样的话就浪费空间了。

绩效删除功能的代码:

perform.py:

def delete_file(request, nid):# 如果当前这张图片只会出现一次,文件+数据表内容一起删除# 如果文件出现多次path_obj = models.Perform.objects.filter(id=nid).first()# 获取当前文件路径filepath = path_obj.image# 删除数据path_obj.delete()try:# 将文件进行删除(删除数据表格的同时, 也要把项目里面的media对应的文件一并删除)。os.remove(filepath)except:return redirect("/perform/list/")return redirect("/perform/list/")

这里删除和之前写过删除的代码, 有些区别, 因为当我们删除数据的时候, 所对应上传的文件也要一并删除, 那这边代码的操作就会比以前多些, 但是删除的原理还是差不多。

添加路由:

urls.py:

"""project_simple URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
from project_one.views import depart, user, assets, admin_role, login, Ajax_data, task_data, performurlpatterns = [path('asset/file/', assets.asset_file, name="asset_file"),path("perform/<int:nid>/modify/", perform.modify_perform, name="modify_perform"),path("perform/<int:nid>/delete/", perform.delete_file, name="delete_file")
]

在前端的修改删除那两个地方加上路由:

perform_list.html:

<a href="/perform/{{ data.id }}/modify"><span style="color: green;" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
<a href="/perform/{{ data.id }}/delete"><span style="color: red;" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>

修改页面的话, 还是会用到perform_add_modify.html。

perform_add_modify.html代码:

{% extends "index/model_tmp.html" %}
{% load static %}{% block css %}<link rel="stylesheet" href="{% static 'css/layui.css' %}">
{% endblock %}{% block content %}<div class="container"><h1>{{ title }}</h1>{# 由于我们enctype="multipart/form-data"必须要加 #}<form method="post" enctype="multipart/form-data">{% csrf_token %}{% for field in form %}
{#       field.label这里面就是获取我们在models.py里面创建表格里面的每一个字段里面有个verbose_name这个参数的值         #}<label for="exampleInputEmail1">{{ field.label }}</label>{{ field }}{#       展示错误信息         #}<span style="color: red">{{ field.errors.0 }}</span><br>{% endfor %}<button type="submit" class="btn btn-success">提交</button></form></div>
{% endblock %}

二、资产表格文件上传功能

我们需要在资产表格上方在添加数据按钮的右边, 添加一个上传表格的按钮。

<a href="/assets/add/" class="btn btn-success">添加信息</a>
<button type="button" class="btn btn-success" data-toggle="modal" data-target="#myModal">表格上传
</button>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><spanaria-hidden="true">&times;</span></button><h4 class="modal-title" id="myModalLabel">选择表格</h4></div><div class="modal-body"><form action="/asset/file/" method="post" enctype="multipart/form-data">{% csrf_token %}<input type="file" name="excel"><button type="button" class="btn btn-default" data-dismiss="modal">关闭</button><button type="submit" class="btn btn-primary">提交</button></form></div></div></div>
</div>

然后我们在后端编写上传表格的代码:

assets.py:

def asset_file(request):# 上传excel表格file_object = request.FILES["excel"]wb = load_workbook(file_object)sheet = wb.worksheets[0]for data in sheet.iter_rows():mobile = data[0].valuestatus = data[1].valuetimes = data[2].valueprice = data[3].valuename = data[4].value# print(mobile, status, times, price, name)models.Assets.objects.create(mobile=mobile, status=status, create_time=times, price=price, user_id=name)return redirect("/assets_list/")

这段代码的意思:就是上传一个excel表格, 然后提交成功之后, 数据就会成功的添加到assets表格里面, 那网页里面就可以看到我们添加的数据。这里我们用到了load_workbook, 这个就是用来加载excel表格用的, 这里用到的excel操作, 在博主之前写到的爬虫的文章里面, 有写过使用的方法, 如果不太记得的话, 可以翻一翻以前的文章看看。这里面的逻辑也很简单, 就是获取到上传的excel表格里面的每一列数据, 然后添加到assets表格里面。

配置路由:

urls.py:

"""project_simple URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
from project_one.views import depart, user, assets, admin_role, login, Ajax_data, task_data, performurlpatterns = [path('asset/file/', assets.asset_file, name="asset_file")
]

运行结果:

登录后, 到绩效界面:

在这里插入图片描述

点击最后一条数据进行修改:

在这里插入图片描述

我们可以发现, 在修改数据框里面, 可以正常获取数据。

现在我们对其进行修改:

在这里插入图片描述

提交修改数据:

在这里插入图片描述

我们发现修改成功!!!

然后再删除最后一条数据(点击最后一行数据的垃圾桶那个图标):

在这里插入图片描述

我们发现, 删除也成功了!!!

我们再桌面创建一个excel文件:

在这里插入图片描述

里面输入内容:

在这里插入图片描述

注意, 需要在第二列和最后一列输入数字, 因为数据库里面存储的数据是smallint类型的, 第二列里面的1代表已使用, 0代表未使用, 最后一列的数据, 是user_id号(这个是外键)。数据千万不能填错, 否则上传excel会失败从而导致报错。

编辑好数据之后, 我们网页里面打开资产表:

在这里插入图片描述

然后点击表格上传:

在这里插入图片描述

这里面点击选择文件, 在选择文件的时候, 选择我们刚才创建好的excel表格。

在这里插入图片描述

点击提交:

在这里插入图片描述

提交后的结果:

在这里插入图片描述

会把我们excel表格里面的数据, 添加到表格的尾部。

三、代码展示集合

前端:

perform_list.html:

{% extends "index/model_tmp.html" %}
{#{% load static %}#}{% block content %}<div class="container"><a href="/perform/add/" class="btn btn-success">添加信息</a><div class="panel panel-success"><div class="panel-heading"><h3 class="panel-title">绩效表</h3></div><div class="panel-body"><table class="table table-bordered"><thead><tr><th>ID</th><th>订单号</th><th>客户来源</th><th>客户名称</th><th>成交时间</th><th>成交价格</th><th>销售人员</th><th>详情</th>{% if request.unicom_role == 3 %}<th>操作</th>{% endif %}</tr></thead><tbody>{% for data in perform_list %}<tr><th scope="row">{{ data.id }}</th><th>{{ data.oid }}</th><th>{{ data.source }}</th><th>{{ data.title }}</th><th>{{ data.times }}</th><th>{{ data.price }}</th><th>{{ data.name }}</th><th><div><a target="_blank" href="/{{ data.image }}/" style="width: 60px; height: 60px;"><img style="object-fit: cover; border-radius: 100px;" src="/{{ data.image }}/" width="60" height="60" alt="图片无法加载"></a></div></th>{% if request.unicom_role == 3 %}<td style="color: green"><a href="/perform/{{ data.id }}/modify"><span style="color: green;" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="/perform/{{ data.id }}/delete"><span style="color: red;" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td>{% endif %}</tr>{% endfor %}</tbody></table></div></div>{# 实现分页查询 #}<ul class="pagination">{{ page_string }}</ul></div>
{% endblock %}

perform_add_modify.html:

{% extends "index/model_tmp.html" %}
{% load static %}{% block css %}<link rel="stylesheet" href="{% static 'css/layui.css' %}">
{% endblock %}{% block content %}<div class="container"><h1>{{ title }}</h1>{# 由于我们enctype="multipart/form-data"必须要加 #}<form method="post" enctype="multipart/form-data">{% csrf_token %}{% for field in form %}
{#       field.label这里面就是获取我们在models.py里面创建表格里面的每一个字段里面有个verbose_name这个参数的值         #}<label for="exampleInputEmail1">{{ field.label }}</label>{{ field }}{#       展示错误信息         #}<span style="color: red">{{ field.errors.0 }}</span><br>{% endfor %}<button type="submit" class="btn btn-success">提交</button></form></div>
{% endblock %}

assets_list.html:

{% extends "index/model_tmp.html" %}{% block content %}<div class="container"><a href="/assets/add/" class="btn btn-success">添加信息</a><button type="button" class="btn btn-success" data-toggle="modal" data-target="#myModal">表格上传</button><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><spanaria-hidden="true">&times;</span></button><h4 class="modal-title" id="myModalLabel">选择表格</h4></div><div class="modal-body"><form action="/asset/file/" method="post" enctype="multipart/form-data">{% csrf_token %}<input type="file" name="excel"><button type="button" class="btn btn-default" data-dismiss="modal">关闭</button><button type="submit" class="btn btn-primary">提交</button></form></div></div></div></div>{# 实现搜素查询 #}<div style="float: right"><form method="get"><div class="input-group" style="float: right;width: 300px;"><input type="text" class="form-control" name="search" placeholder="Search for..."><span class="input-group-btn"><button class="btn btn-default" type="submit">搜索</button></span></div></form></div><div class="panel panel-danger"><div class="panel-heading"><h3 class="panel-title">资产表</h3></div><div class="panel-body"><table class="table table-hover"><thead><tr><th>ID</th><th>手机号</th><th>状态</th><th>创建时间</th><th>使用者</th><th>价格</th></tr></thead><tbody>{% for data in assets_list %}<tr><th scope="row">{{ data.id }}</th><td>{{ data.mobile }}</td>{% if data.status == 1 %}<td style="color: green">{{ data.get_status_display }}</td>{% else %}<td style="color: red">{{ data.get_status_display }}</td>{% endif %}<td>{{ data.create_time|date:"Y-m-d" }}</td><td>{{ data.user.name }}</td><td>{{ data.price }}</td><td style="color: green"><a href="/assets/{{ data.id }}/modify"><span style="color: green;"class="glyphicon glyphicon-pencil"aria-hidden="true"></span></a><a href="/assets/{{ data.id }}/del/"><span style="color: red;"class="glyphicon glyphicon-trash"aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div>{# 实现分页查询 #}<ul class="pagination">{{ page_string }}</ul></div>
{% endblock %}
后端:

perform.py:

from datetime import datetimefrom django.shortcuts import render, redirect
from django import forms
from project_one.utils.PageData import PageData
import osfrom project_one import models# Create your views here.
def perform_info(request):perform_list = models.Perform.objects.all()page_object = PageData(request, perform_list)content = {"perform_list": page_object.page_queryset,"page_string": page_object.page_html()}return render(request, "perform/perform_list.html", content)class PerformForm(forms.Form):oid = forms.CharField(label="订单号",widget=forms.TextInput(attrs={"class": "form-control", "autocomplete": "off"}))source = forms.CharField(label="客户来源",widget=forms.TextInput(attrs={"class": "form-control", "autocomplete": "off"}))title = forms.CharField(label="客户名称",widget=forms.TextInput(attrs={"class": "form-control", "autocomplete": "off"}))price = forms.CharField(label="成交价格",widget=forms.TextInput(attrs={"class": "form-control", "autocomplete": "off"}))image = forms.FileField(label="详情")def add_perform(request):if request.method == "GET":title = "添加绩效信息"form = PerformForm()content = {"title": title, "form": form}return render(request, "perform/perform_add_modify.html", content)# 如果要上传文件的话, request.FILES千万不能漏掉form = PerformForm(data=request.POST, files=request.FILES)if form.is_valid():# 获取提交过来的文件对象image_object = form.cleaned_data.get("image")# 拼接路径# image_object.name这个就是文件名字,# os.path.join("media", image_object.name)就代表用media文件夹拼接文件名字,# 也就是把路径变为:文件夹/文件名。# 但是最后的路径为:文件夹\文件名。所以需要把\替换成/, 注意要写成\\,# 因为反斜杠它在正则表达式里面本身就有自己的意义, 所以这里需要转义操作。print(os.path.join("media", image_object.name))file_path = os.path.join("media", image_object.name).replace("\\", "/")print(file_path)# 将文件存储在media目录当中with open(file_path, "wb") as file:for chunk in image_object.chunks():file.write(chunk)oid = form.cleaned_data.get("oid")source = form.cleaned_data.get("source")title = form.cleaned_data.get("title")times = datetime.now().strftime("%Y-%m-%d")price = form.cleaned_data.get("price")name = request.session['info']['username']models.Perform.objects.create(oid=oid, source=source, title=title, times=times, price=price, name=name, image=file_path)return redirect("/perform/list/")return render(request, "perform/perform_add_modify.html", {"form": form})class PerformModifyModelForm(forms.ModelForm):class Meta:model = models.Performfields = ["oid", "source", "title", "price"]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control"}def modify_perform(request, nid):title = "修改绩效信息"query_set = models.Perform.objects.filter(id=nid).first()if request.method == "GET":form = PerformModifyModelForm(instance=query_set)content = {"form": form, "title": title}return render(request, "perform/perform_add_modify.html", content)form = PerformModifyModelForm(data=request.POST, files=request.FILES, instance=query_set)if form.is_valid():form.save()return redirect("/perform/list/")return render(request, "perform/perform_add_modify.html", {"form": form, "title": title})def delete_file(request, nid):# 如果当前这张图片只会出现一次,文件+数据表内容一起删除# 如果文件出现多次path_obj = models.Perform.objects.filter(id=nid).first()# 获取当前文件路径filepath = path_obj.imagepath_obj.delete()try:# 将文件进行删除os.remove(filepath)except:return redirect("/perform/list/")return redirect("/perform/list/")

assets.py:

from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from django.shortcuts import render, redirect
from openpyxl.reader.excel import load_workbookfrom project_one.utils.PageData import PageData
from django import formsfrom project_one import models# Create your views here.
def assets(request):# assets_list = models.Assets.objects.all()# 搜索信息dict_data = {}# 获取搜素框里的内容, 就是获取网址里面的search参数的值value = request.GET.get('search')if value:# 在表格中搜素包含输入框当中的数据, 这里搜素的是手机号, key为mobile__containsdict_data["mobile__contains"] = valueassets_list = models.Assets.objects.filter(**dict_data)page_object = PageData(request, assets_list)# mark_safe也是django框架里面的函数, 需要手动导入, 导入语句为from django.utils.safestring import mark_safepage_string = page_object.page_html()# 不能忘记将page_string传给前端。return render(request, "assets/assets_list.html",{"assets_list": page_object.page_queryset, "page_string": page_string})class AssetsAddModelForm(forms.ModelForm):# validators是手机号格式校验, 里面是校验规则, 需要用到RegexValidator函数# RegexValidator函数需要在导入的时候写:from django.core.validators import RegexValidatormobile = forms.CharField(label="手机号", validators=[RegexValidator(r"^1[3-9]\d{9}")])class Meta:model = models.Assetsfields = "__all__"def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control"}def clean_mobile(self):mobile = self.cleaned_data["mobile"]# 在数据表当中判断是否存在, filter里面的mobile代表以电话号码为判断依据# 因为我们添加数据的时候, 手机号不能重复添加, 所以需要判断是否存在。exists = models.Assets.objects.filter(mobile=mobile).exists()if exists:# 如果手机号已存在, 则抛出异常# 这个异常函数, 在导入的时候写:from django.core.exceptions import ValidationErrorraise ValidationError("手机号已存在")return mobiledef assets_add(request):if request.method == "GET":title = "添加资产"form = AssetsAddModelForm()return render(request, "assets/assets_modelform.html", {"form": form, "title": title})form = AssetsAddModelForm(request.POST)if form.is_valid():form.save()return redirect("/assets_list/")return render(request, "assets/assets_modelform.html", {"form": form})class AssetsModifyModelForm(forms.ModelForm):# 禁止编辑价格那栏输入框price = forms.CharField(disabled=True, label="价格")class Meta:model = models.Assetsfields = "__all__"def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control"}def clean_mobile(self):mobile = self.cleaned_data["mobile"]# self.instance.pk这个代表获取当前数据的idexists = models.Assets.objects.exclude(id=self.instance.pk).filter(mobile=mobile).exists()if exists:raise ValidationError("手机号已存在")return mobiledef assets_modify(request, nid):data_list = models.Assets.objects.filter(id=nid).first()if request.method == "GET":title = "修改数据"form = AssetsModifyModelForm(instance=data_list)return render(request, "assets/assets_modelform.html", {"form": form, "title": title})form = AssetsModifyModelForm(request.POST, instance=data_list)if form.is_valid():form.save()return redirect("/assets_list/")return render(request, "assets/assets_modelform.html", {"form": form})def assets_del(request, nid):models.Assets.objects.filter(id=nid).delete()return redirect("/assets_list/")def asset_file(request):file_object = request.FILES["excel"]wb = load_workbook(file_object)sheet = wb.worksheets[0]for data in sheet.iter_rows():mobile = data[0].valuestatus = data[1].valuetimes = data[2].valueprice = data[3].valuename = data[4].value# print(mobile, status, times, price, name)models.Assets.objects.create(mobile=mobile, status=status, create_time=times, price=price, user_id=name)return redirect("/assets_list/")

urls.py:

"""project_simple URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
from project_one.views import depart, user, assets, admin_role, login, Ajax_data, task_data, performurlpatterns = [# path('admin/', admin.site.urls),re_path(r"^media/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT}),path("", depart.index, name="index"),path("depart/", depart.depart, name="depart"),path("depart/add/", depart.add_depart, name="add_depart"),path("depart/<int:nid>/modify/", depart.depart_modify, name="depart_modify"),path("depart/<int:nid>/del/", depart.del_depart, name="del_depart"),path("user/", user.user_info, name="user_info"),path("user/add/", user.user_add, name="user_add"),path("user/<int:nid>/modify/", user.user_modify, name="user_modify"),path("user/<int:nid>/del/", user.user_del, name="user_del"),path("user/add/modelform", user.user_add_modelform, name="user_add_modelform"),path("user/<int:nid>/modify/modelform", user.user_modify_modelform, name="user_modify_modelform"),path("assets_list/", assets.assets, name="assets"),path("assets/add/", assets.assets_add, name="assets_add"),path("assets/<int:nid>/modify/", assets.assets_modify, name="assets_modify"),path("assets/<int:nid>/del/", assets.assets_del, name="assets_del"),path('asset/file/', assets.asset_file, name="asset_file"),path("admin_list/", admin_role.admin, name="admin"),path("admin/add/", admin_role.admin_add, name="admin_add"),path("admin/<int:nid>/modify/", admin_role.admin_modify, name="admin_modify"),path("admin/<int:nid>/reset/pwd/", admin_role.admin_reset_pwd, name="admin_reset_pwd"),path("admin/<int:nid>/del/", admin_role.admin_del, name="admin_del"),path("login/", login.login, name="login"),path("logout/", login.logout, name="logout"),path("image/code/", login.image_code, name="image_code"),path("demo/list/", Ajax_data.demo_list, name="demo_list"),path("demo/one/", Ajax_data.demo_one, name="demo_one"),path("demo/two/", Ajax_data.demo_two, name="demo_two"),path("task/list/", task_data.task_list, name="task_list"),path("task/add/", task_data.task_add, name="task_add"),path('task/del/', task_data.task_delete, name="task_delete"),path('task/modify/', task_data.task_modify, name="task_modify"),path('task/modify/content/', task_data.task_modify_content, name="task_modify_content"),path("perform/list/", perform.perform_info, name="perform_info"),path("perform/add/", perform.add_perform, name="add_perform"),path("perform/<int:nid>/modify/", perform.modify_perform, name="modify_perform"),path("perform/<int:nid>/delete/", perform.delete_file, name="delete_file"),
]

好了, 这篇文章关于表格上传已经之前的修改删除功能, 就这样到此结束了, 整个django项目基本也就做的差不多了, 之后的文章, 就会讲整个项目怎么去部署了。

以上就是Django框架的表格上传功能的所有内容了, 如果有哪里不懂的地方,可以把问题打在评论区, 欢迎大家在评论区交流!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!

http://www.xdnf.cn/news/880633.html

相关文章:

  • Linux服务器如何安装wps?
  • Java中List的forEach用法详解
  • ObjectMapper 在 Spring 统一响应处理中的作用详解
  • 稳定币的深度剖析与展望
  • 探秘实验室铁地板:科技与安全的完美结合
  • Bug问题
  • Axure零基础跟我学:展开与收回
  • 【Axure高保真原型】图片列表添加和删除图片
  • 企业配电系统安全升级,从局放监测开始
  • vue-18(使用 Vuex 插件实现高级功能)
  • Transformer实战——词嵌入技术详解
  • OpenAI技术路线急转:从TypeScript到Rust的Codex CLI重构内幕
  • 深度学习学习率优化方法——pytorch中各类warm up策略
  • 毕业季AI特训营:AI从入门到实践的2天冲刺计划
  • 软件工程:如何做好软件产品
  • Python使用总结之Mac安装docker并配置wechaty
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)
  • 【Redis从入门到精通实战文章汇总】
  • elasticsearch-8.17.4
  • ReLU 激活函数:重大缺陷一去不复返!
  • 智能照明系统:具备认知能力的“光神经网络”
  • 短剧系统开发实践:打造高质量短视频平台的解决方案
  • Flask-Babel 使用示例
  • nodejs里面的http模块介绍和使用
  • EasyRTC音视频实时通话助力新一代WebP2P视频物联网应用解决方案
  • Pandas和Django的示例Demo
  • vlan(虚拟局域网)逻辑图解+实验详解
  • kafka部署
  • SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
  • 前端常见错误