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

Python Django入门(创建应用程序)

在本章中,你将学习如何使用
Django(http://djangoproject.com/ )来开发一个名为“学习笔记”(Learning Log)的项目,这是一个在线日志系统,让你能够记录所学习的有关特定主题的知识。
我们将为这个项目制定规范,然后为应用程序使用的数据定义模型。我们将使用Django的管理系统来输入一些初始数据,再学习编写视图和模板,让Django能够为我们
的网站创建网页。
Django是一个Web框架 ——一套用于帮助开发交互式网站的工具。Django能够响应网页请求,还能让你更轻松地读写数据库、管理用户等。

创建应用程序

Django项目 由一系列应用程序组成,它们协同工作,让项目成为一个整体。我们暂时只创建一个应用程序,它将完成项目的大部分工作。在第19章,我们将再添加一个管理用户
账户的应用程序。

当前,在前面打开的终端窗口中应该还运行着runserver 。请再打开一个终端窗口(或标签页),并切换到manage.py所在的目录。激活该虚拟环境,再执行命令startapp :

learning_log$ source ll_env/bin/activate
(ll_env)learning_log$ python manage.py startapp learning_logs
❶ (ll_env)learning_log$ ls
db.sqlite3 learning_log learning_logs ll_env manage.py
❷ (ll_env)learning_log$ ls learning_logs/
admin.py __init__.py migrations models.py tests.py views.py

命令startapp appname 让Django建立创建应用程序所需的基础设施。如果现在查看项目目录,将看到其中新增了一个文件夹learning_logs(见❶)。打开这个文件夹,看看
Django都创建了什么(见❷)。其中最重要的文件是models.py、admin.py和views.py。我们将使用models.py来定义我们要在应用程序中管理的数据。admin.py和views.py将在稍后介
绍。

定义模型

我们来想想涉及的数据。每位用户都需要在学习笔记中创建很多主题。用户输入的每个条目都与特定主题相关联,这些条目将以文本的方式显示。我们还需要存储每个条目的时
间戳,以便能够告诉用户各个条目都是什么时候创建的。

打开文件models.py,看看它当前包含哪些内容:

from django.db import models
# 在这里创建模型

这为我们导入了模块models,还让我们创建自己的模型。模型告诉Django如何处理应用程序中存储的数据。在代码层面,模型就是一个类,就像前面讨论的每个类一样,包含属性
和方法。下面是表示用户将要存储的主题的模型:

from django.db import models
class Topic(models.Model):
"""用户学习的主题"""
❶ text = models.CharField(max_length=200)
❷ date_added = models.DateTimeField(auto_now_add=True)
❸ def __str__(self):
"""返回模型的字符串表示"""
return self.text

我们创建了一个名为Topic 的类,它继承了Model ——Django中一个定义了模型基本功能的类。Topic 类只有两个属性:text 和date_added 。

属性text是一个CharField——由字符或文本组成的数据(见❶)。需要存储少量的文本,如名称、标题或城市时,可使用CharField 。定义CharField 属性时,必须告诉Django
该在数据库中预留多少空间。在这里,我们将max_length 设置成了200(即200个字符),这对存储大多数主题名来说足够了。

属性date_added 是一个DateTimeField ——记录日期和时间的数据(见❷)。我们传递了实参auto_add_now=True ,每当用户创建新主题时,这都让Django将这个属性
自动设置成当前日期和时间。

注意  要获悉可在模型中使用的各种字段,请参阅Django Model Field Reference(Django模型字段参考),其网址为https://docs.djangoproject.com/en/1.8/ref/models/fields/ 。
就当前而言,你无需全面了解其中的所有内容,但自己开发应用程序时,这些内容会提供极大的帮助。

我们需要告诉Django,默认应使用哪个属性来显示有关主题的信息。Django调用方法__str__() 来显示模型的简单表示。在这里,我们编写了方法__str__() ,它返回存储在
属性text 中的字符串(见❸)。

注意  如果你使用的是Python 2.7,应调用方法__unicode__() ,而不是__str__() ,但其中的代码相同。

激活模型

要使用模型,必须让Django将应用程序包含到项目中。为此,打开settings.py(它位于目录learning_log/learning_log中),你将看到一个这样的片段,即告诉Django哪些应用程序安装
在项目中:

--snip--
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
) --snip--

这是一个元组,告诉Django项目是由哪些应用程序组成的。请将INSTALLED_APPS 修改成下面这样,将前面的应用程序添加到这个元组中:

--snip--
INSTALLED_APPS = (
--snip--
'django.contrib.staticfiles',
# 我的应用程序
'learning_logs',
) --snip--

通过将应用程序编组,在项目不断增大,包含更多的应用程序时,有助于对应用程序进行跟踪。这里新建了一个名为My apps的片段,当前它只包含应用程序learning_logs。
接下来,需要让Django修改数据库,使其能够存储与模型Topic 相关的信息。为此,在终端窗口中执行下面的命令:

(ll_env)learning_log$ python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
0001_initial.py:
- Create model Topic
(ll_env)learning_log$

命令makemigrations 让Django确定该如何修改数据库,使其能够存储与我们定义的新模型相关联的数据。输出表明Django创建了一个名为0001_initial.py的迁移文件,这个文件
将在数据库中为模型Topic 创建一个表。

下面来应用这种迁移,让Django替我们修改数据库:

(ll_env)learning_log$ python manage.py migrate
--snip--
Running migrations:
Rendering model states... DONE
❶ Applying learning_logs.0001_initial... OK

这个命令的大部分输出都与我们首次执行命令migrate的输出相同。我们需要检查的是❶处的输出行,在这里,Django确认为learning_logs 应用迁移时一切正常(OK )。
每当需要修改“学习笔记”管理的数据时,都采取如下三个步骤:修改models.py;对learning_logs 调用makemigrations ;让Django迁移项目。

Django管理网站

为应用程序定义模型时,Django提供的管理网站(admin site)让你能够轻松地处理模型。网站的管理员可使用管理网站,但普通用户不能使用。在本节中,我们将建立管理网站,
并通过它使用模型Topic 来添加一些主题。

创建超级用户

Django允许你创建具备所有权限的用户——超级用户。权限决定了用户可执行的操作。最严格的权限设置只允许用户阅读网站的公开信息;注册了的用户通常可阅读自己的私有
数据,还可查看一些只有会员才能查看的信息。为有效地管理Web应用程序,网站所有者通常需要访问网站存储的所有信息。优秀的管理员会小心对待用户的敏感信息,因为用
户对其访问的应用程序有极大的信任。

为在Django中创建超级用户,请执行下面的命令并按提示做:

(ll_env)learning_log$ python manage.py createsuperuser
❶ Username (leave blank to use 'ehmatthes'): ll_admin
❷ Email address:
❸ Password:
Password (again):
Superuser created successfully.
(ll_env)learning_log$

你执行命令createsuperuser 时,Django提示你输入超级用户的用户名(见❶)。这里我们输入的是ll_admin,但你可以输入任何用户名,比如电子邮件地址,也可让这个字段
为空(见❷)。你需要输入密码两次(见❸)。

注意  可能会对网站管理员隐藏有些敏感信息。例如,Django并不存储你输入的密码,而存储从该密码派生出来的一个字符串——散列值。每当你输入密码
时,Django都计算其散列值,并将结果与存储的散列值进行比较。如果这两个散列值相同,就通过了身份验证。通过存储散列值,即便黑客获得了网站数据库的访问
权,也只能获取其中存储的散列值,而无法获得密码。在网站配置正确的情况下,几乎无法根据散列值推导出原始密码。

向管理网站注册模型

Django自动在管理网站中添加了一些模型,如User 和Group ,但对于我们创建的模型,必须手工进行注册。
我们创建应用程序learning_logs 时,Django在models.py所在的目录中创建了一个名为admin.py的文件:

from django.contrib import admin
# 在这里注册你的模型

为向管理网站注册Topic ,请输入下面的代码:

from django.contrib import admin
❶ from learning_logs.models import Topic
❷ admin.site.register(Topic)

现在,使用超级用户账户访问管理网站:访问http://localhost:8000/admin/ ,并输入你刚创建的超级用户的用户名和密码,你将看到类似于图18-2所示的屏幕。这个网页让你能够添加
和修改用户和用户组,还可以管理与刚才定义的模型Topic 相关的数据。

注意  如果你在浏览器中看到一条消息,指出访问的网页不可用,请确认你在终端窗口中运行着Django服务器。如果没有,请激活虚拟环境,并执行命令python
manage.py runserver 。

添加主题

向管理网站注册Topic 后,我们来添加第一个主题。为此,单击Topics进入主题网页,它几乎是空的,这是因为我们还没有添加任何主题。单击Add,你将看到一个用于添加新主
题的表单。在第一个方框中输入Chess ,再单击Save,这将返回到主题管理页面,其中包含刚创建的主题。

下面再创建一个主题,以便有更多的数据可供使用。再次单击Add,并创建另一个主题Rock Climbing 。当你单击Save时,将重新回到主题管理页面,其中包含主题Chess和
Rock Climbing。

定义模型Entry

要记录学到的国际象棋和攀岩知识,需要为用户可在学习笔记中添加的条目定义模型。每个条目都与特定主题相关联,这种关系被称为多对一关系,即多个条目可关联到同一个
主题。
下面是模型Entry 的代码:

from django.db import models
class Topic(models.Model):
--snip--
❶ class Entry(models.Model):
"""学到的有关某个主题的具体知识"""
❷ topic = models.ForeignKey(Topic)
❸ text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
❹ class Meta:
verbose_name_plural = 'entries'
def __str__(self):
"""返回模型的字符串表示"""
❺ return self.text[:50] + "..."

像Topic 一样,Entry 也继承了Django基类Model (见❶)。第一个属性topic 是一个ForeignKey 实例(见❷)。外键是一个数据库术语,它引用了数据库中的另一条记
录;这些代码将每个条目关联到特定的主题。每个主题创建时,都给它分配了一个键(或ID)。需要在两项数据之间建立联系时,Django使用与每项信息相关联的键。稍后我们
将根据这些联系获取与特定主题相关联的所有条目。

接下来是属性text ,它是一个TextField 实例(见❸)。这种字段不需要长度限制,因为我们不想限制条目的长度。属性date_added 让我们能够按创建顺序呈现条目,并
在每个条目旁边放置时间戳。

在❹处,我们在Entry 类中嵌套了Meta 类。Meta 存储用于管理模型的额外信息,在这里,它让我们能够设置一个特殊属性,让Django在需要时使用Entries 来表示多个条
目。如果没有这个类, Django将使用Entrys来表示多个条目。最后,方法__str__() 告诉Django,呈现条目时应显示哪些信息。由于条目包含的文本可能很长,我们让Django只
显示text 的前50个字符(见❺)。我们还添加了一个省略号,指出显示的并非整个条目。

迁移模型Entry

由于我们添加了一个新模型,因此需要再次迁移数据库。你将慢慢地对这个过程了如指掌:修改models.py,执行命令python manage.py makemigrations app_name ,
再执行命令python manage.py migrate 。

下面来迁移数据库并查看输出:

(ll_env)learning_log$ python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
❶ 0002_entry.py:
- Create model Entry
(ll_env)learning_log$ python manage.py migrate
Operations to perform:
--snip--
❷ Applying learning_logs.0002_entry... OK

生成了一个新的迁移文件——0002_entry.py,它告诉Django如何修改数据库,使其能够存储与模型Entry 相关的信息(见❶)。执行命令migrate ,我们发现Django应用了这种
迁移且一切顺利(见❷)。

向管理网站注册Entry

我们还需要注册模型Entry 。为此,需要将admin.py修改成类似于下面这样:

from django.contrib import admin
from learning_logs.models import Topic, Entry
admin.site.register(Topic)
admin.site.register(Entry)

返回到http://localhost/admin/ ,你将看到learning_logs下列出了Entries。单击Entries的Add链接,或者单击Entries再选择Add entry。你将看到一个下拉列表,让你能够选择要为哪个主题创
建条目,还有一个用于输入条目的文本框。从下拉列表中选择Chess,并添加一个条目。下面是我添加的第一个条目。

Django shell

输入一些数据后,就可通过交互式终端会话以编程方式查看这些数据了。这种交互式环境称为Django shell,是测试项目和排除其故障的理想之地。下面是一个交互式shell会话示
例:

(ll_env)learning_log$ python manage.py shell
❶ >>> from learning_logs.models import Topic
>>> Topic.objects.all()
[<Topic: Chess>, <Topic: Rock Climbing>]

在活动的虚拟环境中执行时,命令python manage.py shell 启动一个Python解释器,可使用它来探索存储在项目数据库中的数据。在这里,我们导入了模
块learning_logs.models 中的模型Topic (见❶),然后使用方法Topic.objects.all() 来获取模型Topic 的所有实例;它返回的是一个列表,称为查询集
(queryset)。

我们可以像遍历列表一样遍历查询集。下面演示了如何查看分配给每个主题对象的ID:

>>> topics = Topic.objects.all()
>>> for topic in topics:
... print(topic.id, topic)
...
1 Chess
2 Rock Climbing

我们将返回的查询集存储在topics 中,然后打印每个主题的id 属性和字符串表示。从输出可知,主题Chess的ID为1,而Rock Climbing的ID为2。
知道对象的ID后,就可获取该对象并查看其任何属性。下面来看看主题Chess的属性text 和date_added 的值:

>>> t = Topic.objects.get(id=1)
>>> t.text
'Chess'
>>> t.date_added
datetime.datetime(2015, 5, 28, 4, 39, 11, 989446, tzinfo=<UTC>)

我们还可以查看与主题相关联的条目。前面我们给模型Entry 定义了属性topic ,这是一个ForeignKey ,将条目与主题关联起来。利用这种关联,Django能够获取与特定主
题相关联的所有条目,如下所示:

❶ >>> t.entry_set.all()
[<Entry: The opening is the first part of the game, roughly...>, <Entry: In the opening phase of the game, it's important t...>]

为通过外键关系获取数据,可使用相关模型的小写名称、下划线和单词set(见❶)。例如,假设你有模型Pizza 和Topping ,而Topping通过一个外键关联到Pizza ;如果你有
一个名为my_pizza 的对象,表示一张比萨,就可使用代码my_pizza.topping_set.all() 来获取这张比萨的所有配料。
编写用户可请求的网页时,我们将使用这种语法。确认代码能获取所需的数据时,shell很有帮助。如果代码在shell中的行为符合预期,那么它们在项目文件中也能正确地工作。如
果代码引发了错误或获取的数据不符合预期,那么在简单的shell环境中排除故障要比在生成网页的文件中排除故障容易得多。我们不会太多地使用shell,但应继续使用它来熟悉对
存储在项目中的数据进行访问的Django语法。
注意  每次修改模型后,你都需要重启shell,这样才能看到修改的效果。要退出shell会话,可按Ctr + D;如果你使用的是Windows系统,应按Ctr + Z,再按回车键。

相关文章:

Python Django入门(创建应用程序)

在本章中&#xff0c;你将学习如何使用 Django&#xff08;http://djangoproject.com/ &#xff09;来开发一个名为“学习笔记”&#xff08;Learning Log&#xff09;的项目&#xff0c;这是一个在线日志系统&#xff0c;让你能够记录所学习的有关特定主题的知识。 我们将为这…...

HCIP-2 RSTP快速生成树

HCIP-2 RSTP快速生成树 STP的不足&#xff1a; 1.STP的端口角色过于简单不丰富&#xff0c;部署时不能很好的应用与较为复杂的网络环境中。 2.STP的迁移状态过于冗长&#xff0c;侦听、学习、阻塞状态下都是不转发业务流量。 3.STP的算法较为繁琐。 TCN TCA TC。 4.STP被动…...

软考-软件设计师-计算机网络

一、七层模型 中继器&#xff1a;信号会随着距离的增加而逐渐衰减&#xff0c;中继器可以接受一端的信息再将其原封不动的发给另一端&#xff0c;起到延长传输距离的作用&#xff1b; 集线器&#xff1a;多端口的中继器&#xff0c;所有端口公用一个冲突域&#xff1b; 网桥&…...

夸克网盘任务脚本——进阶自动版

脚本是用于自动管理和更新夸克云盘(Quark Cloud Drive)上的文件和目录的Python脚本。其主要功能包括自动下载、更新、重命名、删除文件和文件夹,以及处理和发送通知,可以在特定的时间间隔内运行,根据配置文件进行操作。 主要功能 1. Quark 类: __init__:初始化类,设置…...

squirrel语言全面介绍

Squirrel 是一种较新的程序设计语言&#xff0c;由意大利人 Alberto Demichelis 开发&#xff0c;其设计目标是成为一个强大的脚本工具&#xff0c;适用于游戏等对大小、内存带宽和实时性有要求的应用程序。以下是对 Squirrel 语言的全面介绍&#xff1a; 语言特性 动态类型&a…...

北京南文观点:品牌如何抢占AI 认知的 “黄金节点“

在算法主导的信息洪流中&#xff0c;品牌正在经历一场隐蔽的认知权争夺战&#xff0c;当用户向ChatGPT咨询"哪家新能源车企技术最可靠"时&#xff0c;AI调取的知识图谱数据源将直接决定品牌认知排序。南文乐园科技文化&#xff08;北京&#xff09;有限公司&#xff…...

使用Python在Word中创建、读取和删除列表 - 详解

目录 工具与设置 Python在Word中创建列表 使用默认样式创建有序&#xff08;编号&#xff09;列表 使用默认样式创建无序&#xff08;项目符号&#xff09;列表 创建多级列表 使用自定义样式创建列表 Python读取Word中的列表 Python从Word中删除列表 在Word中&#xff…...

分布式中间件:RabbitMQ确认消费机制

分布式中间件&#xff1a;RabbitMQ确认消费机制 在分布式系统中&#xff0c;消息队列是实现异步通信和系统解耦的重要组件。RabbitMQ 作为一款功能强大的消息队列中间件&#xff0c;提供了丰富的特性来保证消息的可靠传输和消费。其中&#xff0c;确认消费机制是确保消息被正确…...

Redis的大Key问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Redis的大Key问题如何解决?】面试题。希望对大家有帮助&#xff1b; Redis的大Key问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis的大Key问题指的是存储在Redis中的某些键&#xff08;Key&#xf…...

日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(25):解释说明:という

日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(25):解释说明:という 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习语法(2) 解释说明:という3、单词(1)日语单词(2)日语片假名单词4、相近词辨析5、单词辨析记录6、总结1、前言 (1)情况说明 …...

Windows10配置OpenJDK11

下载 # 华为OpenJDK镜像源 https://mirrors.huaweicloud.com/openjdk/11.0.2/解压 # 解压后至于C:\Dev\Env\Java\jdk-11.0.2目录下 https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_windows-x64_bin.zip编译安装 # 以管理员身份运行 CMD命令提示符 并进入JD…...

Python实验:读写文本文件并添加行号

[实验目的] 熟练掌握内置函数open()的用法&#xff1b;熟练运用内置函数len()、max()、和enumerate()&#xff1b;熟练运用字符串的strip()、ljust()和其它方法&#xff1b;熟练运用列表推导式。 [实验和内容] 1.编写一个程序demo.py&#xff0c;要求运行该程序后&#xff0…...

什么是 NDC 坐标?什么是世界坐标?

什么是 NDC 坐标&#xff08;归一化设备坐标&#xff09;&#xff1f; 定义 NDC&#xff08;Normalized Device Coordinates&#xff09; 是三维图形渲染管线中的中间坐标系统&#xff0c;范围为 [-1, 1]&#xff08;x、y、z 轴均为此范围&#xff09;。它是设备无关的标准化…...

25年护网二面

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

《鸟哥的Linux私房菜基础篇》---5 vim 程序编辑器

目录 一、vim程序编辑器的简介 二、命令模式快捷键&#xff08;默认模式&#xff09; 1、光标移动 2、编辑操作 3、搜索与替换 三、插入模式快捷键 四、底行模式快捷键&#xff08;按&#xff1a;进入&#xff09; 五、高级技巧 1、分屏操作 2、多文件编辑 3、可视化…...

Day21:在排序数组中查找数字

某班级考试成绩按非严格递增顺序记录于整数数组 scores&#xff0c;请返回目标成绩 target 的出现次数。 示例 1&#xff1a; 输入: scores [2, 2, 3, 4, 4, 4, 5, 6, 6, 8], target 4 输出: 3 示例 2&#xff1a; 输入: scores [1, 2, 3, 5, 7, 9], target 6 输出: 0 …...

Android音视频多媒体开源库基础大全

从事音视频开发工作&#xff0c;需要了解哪些常见的开源库&#xff0c;从应用到底软系统&#xff0c;整理了九大类&#xff0c;这里一次帮你总结完。 包含了应用层的MediaRecorder、surfaceView&#xff0c;以及常见音视频处理库FFmpeg和OpenCV&#xff0c;还有视频渲染和音频…...

ManiWAV:通过野外的音频-视频数据学习机器人操作

24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习&#xff0c;尤其是当视觉信息本身…...

传感器研习社:Swift Navigation与意法半导体(STMicroelectronics)合作 共同推出端到端GNSS汽车自动驾驶解决方案

自动驾驶系统单纯依赖感知传感器进行定位在遇到恶劣天气或缺乏车道标线的道路场景时很容易失效。此外&#xff0c;由于激光雷达&#xff08;LiDAR&#xff09;、视觉等传感器的成本高昂以及将众多不同组件整合为统一系统的复杂性&#xff0c;都可能增加产品研发成本或延迟产品上…...

Java 二维数组元素降序排序(非冒泡排序)

说明&#xff1a;每次比较出最大值后&#xff0c;把最大值设置为最小值-1&#xff0c;再次比较该数组&#xff1b; 创建Object b[][] new Object[N][2];来存储String和Int两种类型数据到同一个数组里 package com.MyJava;import java.util.Scanner;public class Test {public…...

梦回杭州...

她对我说&#xff0c;烟雨中的西湖更别有情趣&#xff0c;我也怀着对‘人间天堂’的憧憬踏上了向往之旅。第一次亲密接触没有感觉中那么好&#xff0c;现在想起来是那时的人和心情都没能安静下来&#xff0c;去慢慢品味它的美。 六下杭州&#xff0c;亲历每一片风景&#xff0c…...

Spring Boot整合Apache BookKeeper教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot整合Apache BookKeeper教程 1. 简介 Apache BookKeeper 是一个高性能、持久化的分布式日志存储系统&#xff0c;适用于需要强一致性和高吞吐量的…...

C++项目——内存池

C项目——内存池 前置知识 std::allocator c中所有stl容器都有自己的allocator类用于分配和回收空间&#xff0c;例如vector类中push_back函数的实现方式&#xff1a; template <class T> void Vector<T>::push_back(const T& t) { // are we out of space…...

【设计模式】SOLID 设计原则概述

SOLID 是面向对象设计中的五大原则&#xff0c;不管什么面向对象的语言&#xff0c; 这个准则都很重要&#xff0c;如果你没听说过&#xff0c;赶紧先学一下。它可以提高代码的可维护性、可扩展性和可读性&#xff0c;使代码更加健壮、易于测试和扩展。SOLID 代表以下五个设计原…...

Deepseek-r1:14b+ScraperAPI实现联网本地大模型回答

文章目录 前言一、Deekseek本地部署二、SerpAPI1.什么是SerpAPI&#xff1f;2.如何使用SerpAPI进行Web搜索 三、实现Deepseek-r1:14bScraperAPI实现联网本地大模型回答1. Code 前言 我需要对本地的Deepseek-r1:14b进行提问&#xff0c;我发现它对于实时的问题&#xff0c;或者…...

DHCP工作原理

DHCP报文类型 DHCP Discover 客户端广播发送DHCP discover报文消息, 客户端通过UDP68端口向网络上发送DHCP discover数据包(包含MAC地址和计算机名等信息).源为0.0.0.0, 目的为255.255.255.255 discover等待时间默认为1秒, 1秒内没有得到回应, 客户机会将这一广播包重新发送4次…...

JVM常见面试总结

JVM&#xff08;Java虚拟机&#xff09;是Java程序运行的核心&#xff0c;掌握JVM相关知识对于Java开发者至关重要。以下是JVM常见的面试问题总结&#xff1a; 1. JVM内存模型 问题&#xff1a;JVM的内存结构分为哪些部分&#xff1f; 答案&#xff1a; 方法区&#xff08;Met…...

博客系统自动化测试报告

1.项目背景 基于SSM框架实现的个人博客系统&#xff0c;现有登录注销页面&#xff0c;博客列表页&#xff0c;博客内容页&#xff0c;博客编辑页面。登录即可查看自己曾经发表的博客&#xff0c;通过使用Selenium定位web元素、对获取到的元素进行操作等&#xff0c;对博客系统…...

如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)

1. 引言 在 AI 迅猛发展的今天&#xff0c;各类 AI 模型层出不穷&#xff0c;从开源模型&#xff08;如 DeepSeek、Llama、Qwen&#xff09;到商业 API&#xff08;如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini&#xff09;&#xff0c;每种方案都有其优势与适用…...

目标检测20年(二)

没有看过&#xff08;一&#xff09;的可以看看笔者这篇文章&#xff1a; 目标检测20年&#xff08;一&#xff09;-CSDN博客 目录 3.2 目标检测数据集和指标 3.2.1 数据集 3.2.1.1 Pascal VOC 3.2.1.2 ILSVRC 3.2.1.3 MS-COCO 3.2.1..4 Open Images 3.2.2 指标 3.3 目…...

【linux】统信操作系统修改默认编辑模式从nano改为vim

统信操作系统修改默认编辑模式从nano改为vim 适用命令update-alternatives --config editor rootuos-PC:~# update-alternatives --config editor 有 3 个候选项可用于替换 editor (提供 /usr/bin/editor)。选择 路径 优先级 状态 ---------------------…...

在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译

在Fedora-Workstation-Live-x86_64-41-1.4中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译 应用——系统工具——终端 suozhangfedora:~$ rpm -aq | grep firefox firefox-131.0.2-1.fc41.x86_64 firefox-langpacks-131.0.2-1.fc41.x86_64 fedora41系统自身安装有f…...

集成学习(下):Stacking集成方法

一、Stacking的元学习革命 1.1 概念 Stacking&#xff08;堆叠法&#xff09; 是一种集成学习技术&#xff0c;通过组合多个基学习器&#xff08;base learner&#xff09;的预测结果&#xff0c;并利用一个元模型&#xff08;meta-model&#xff09;进行二次训练&#xff0c…...

知道自己鼠标在某个竖直平面上的经纬度信息在这个竖直的平面上的实时坐标

鼠标放上去就开启map.on(mars3d.EventType.mouseMove&#xff0c;结合以下方法实现 callback: function (e) {// 经纬度const mpt LngLatPoint.fromCartesian(e.cartesian)const ptNew proj4Trans([mpt.lng, mpt.lat], "EPSG:4326", CRS.CGCS2000_GK_Zone_3)const …...

【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆

在工业智能化与物联网深度融合的今天&#xff0c;深圳触觉智能推出首款搭载瑞芯微RK3506芯片的Linux星闪网关开发板&#xff0c;为大家技术解析。 RK3506-国产芯的硬核实力 作为瑞芯微2024年第四季度推出的入门级工业芯片平台&#xff0c;RK3506以三核Cortex-A7&#xff08;1.…...

GLB文件介绍

GLB文件是由支持glTF&#xff08;GL Transmission Format&#xff09;标准的软件或工具生成的。glTF是一种开放的3D模型传输格式&#xff0c;而GLB是其二进制版本&#xff0c;通常用于嵌入纹理和模型数据。以下是常见的生成GLB文件的软件和工具&#xff1a; 1. 3D建模软件 • …...

树莓集团数字产业布局:商业智慧的多维呈现​

树莓集团在数字产业的布局展现其前瞻性的商业智慧&#xff0c;通过多维度的战略部署&#xff0c;构建一个 শক্তিশালী且富有活力的数字生态系统。 全国产业园布局&#xff1a;构建数字产业生态链 树莓集团通过在全国范围内建设产业园&#xff0c;有效整合资源&#x…...

“智改数转”新风口,物联网如何重构制造业竞争力?

一、政策背景 为深化制造业智能化改造、数字化转型、网络化联接&#xff0c;江苏省制定了《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划&#xff08;2025&#xff0d;2027年&#xff09;》&#xff0c;提出到2027年&#xff0c;全省制造业企业设备更新、工艺…...

代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字

前言 这是我参加的第二次训练营&#xff01;&#xff01;&#xff01;爽&#xff01;这次我将更加细致的写清每一道难题&#xff0c;不仅是提升自己&#xff0c;也希望我自己的写的文章对读者有一定的帮助&#xff01; 打卡代码随想录算法训练营第55期第八天&#xff08;づ&a…...

c++ XML库用法

在C中&#xff0c;处理XML文件的读写操作可以通过多种库来实现。以下是几个常用且简洁的库&#xff1a; 1. ​TinyXML-2 ​简介: TinyXML-2 是一个轻量级的C XML解析库&#xff0c;易于使用且性能良好。​特点: 简单易用&#xff0c;API直观。内存占用小&#xff0c;适合嵌入…...

力扣算法Hot100——128. 最长连续序列

题目要求时间复杂度为O(n)&#xff0c;因此不能使用两次循环匹配。 首先使用 HashSet 去重&#xff0c;并且 HashSet 查找一个数的复杂度为O(1)外循环还是遍历set集合&#xff0c;里面一重循环需要添加判断&#xff0c;这样才不会达到O( n 2 n^2 n2)判断是否进入最长序列查找循…...

spring-tx笔记

编程式事务与声明式事务的理解 补充&#xff1a;什么是事务&#xff1f; 事务是一个重要概念&#xff0c;尤其在数据库管理系统中。事务是指一组操作。&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;确保数据的一致性和完整性 编程式事务 编…...

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步&#xff1a;确定靶机IP为192.168.0.107 第二步&#xff1a;扫描后台及开放端口 第三步&#xff1a;进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...

【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】

文章目录 Overview为什么 DLLP 不需要路由呢?总结Overview 这里介绍些为什么在 PCIe 中只有 TLP(事务层数据包)会被 Switch 和 Root Complex(RC) 路由,而 DLLP(数据链路层数据包)和 Ordered Set 不会被路由。这是因为 TLP 起始于源端口的事务层,结束于目的端口的事务…...

3月21号

今天写了一些题: P1149 [NOIP 2008 提高组] 火柴棒等式 题目描述 给你 n 根火柴棍&#xff0c;你可以拼出多少个形如 ABC 的等式&#xff1f;等式中的 A、B、C 是用火柴棍拼出的整数&#xff08;若该数非零&#xff0c;则最高位不能是 0&#xff09;。用火柴棍拼数字 0∼9 的…...

以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤

以下是使用 Windows 命令行&#xff08;cmd&#xff09; 操作 GaussDB&#xff08;以 GaussDB(for openGauss) 社区版为例&#xff09; 的详细步骤&#xff0c;涵盖 连接数据库、基本操作、关闭数据库 的全流程&#xff1a; 1. 环境准备 前提条件&#xff1a; 安装 GaussDB&a…...

Spring Boot 3 新特性实战:从理论到实践

引言 Spring Boot 自发布以来&#xff0c;凭借其简洁的配置和强大的功能&#xff0c;迅速成为 Java 开发者的首选框架。随着 Spring Boot 3 的发布&#xff0c;开发者们迎来了更多令人兴奋的新特性。本文将深入探讨 Spring Boot 3 的新特性&#xff0c;并通过实战示例展示如何…...

在 Linux 系统中,路径(Path)用于定位文件或目录的位置。路径分为两种类型:相对路径和绝对路径。它们的核心区别在于路径的起点不同

1. 绝对路径&#xff08;Absolute Path&#xff09; 定义&#xff1a; 从根目录 / 开始的完整路径&#xff0c;无论当前在哪个目录下&#xff0c;绝对路径都能唯一指向目标位置。 特点&#xff1a; 以 / 开头。明确且唯一&#xff0c;与当前所在目录无关。 示例&#xff1a; …...

AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用

文章目录 引言 1. 传统 API 的局限性2. MCP&#xff08;模块化通信协议&#xff09;的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论&#xff1a;AI 时代的通信新范式 引言 在 AI 驱动的现…...

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本&#xff1a;5.4.1...