orm01
静态文件处理
静态文件:如:图片、音频、视频、css、js等静态文件的相关配置也在 `项目名/项目名/settings.py` 文件中进行配置
- 配置静态文件的访问路径`STATIC_URL`- 功能:通过哪个 url 地址找静态文件- 默认配置:`STATIC_URL = '/static/'`- 说明:指定访问静态文件时是需要通过 /static/xxx 或 http://IP:端口/static/xxx 获取的,xxx表示具体的静态资源位置
- 配置静态文件的存储路径`STATICFILES_DIRS`- STATICFILES_DIRS:保存的是静态文件在服务器端的存储位置- 该配置的值是一个元组,单元素时注意逗号
实验:使用Django显示静态图片资源
]# django-admin startproject mysite2]# vim mysite2/mysite2/settings.pyBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 当前项目的绝对路径MIDDLEWARE = [ # 中间件配置...# 'django.middleware.csrf.CsrfViewMiddleware', # 注释掉 csrf,否则Django将会拒绝客户端发来的POST请求,报403响应...]...TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS':[os.path.join(BASE_DIR,"templates")], # 指定模板目录...},]LANGUAGE_CODE = 'zh-Hans' # 中文TIME_ZONE = 'Asia/Shanghai' # 东八区STATIC_URL = '/static/' # 访问静态文件的URLSTATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) # 指定静态文件的存储目录# mysite2/static,注意元组中的逗号]# mkdir mysite2/templates # 创建模板目录
]# mkdir mysite2/static # 创建静态文件存储目录
]# mkdir mysite2/static/{image,css,js}
]# ls mysite2/static/image/Django.png # 放入一张图片]# vim mysite2/mysite2/urls.py # 主路由文件
from django.urls import path
from . import views
urlpatterns = [path("test_static", views.test_static),
]]# vim mysite2/mysite2/views.py # 视图文件
from django.shortcuts import render
def test_static(request):return render(request, "test_static.html")]# vim mysite2/templates/test_static.html # 模板
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>pictures<img src="http://127.0.0.1:8000/static/image/Django.png" width="200px" height="200px"><img src="/static/image/Django.png" width="200px" height="200px">
</body>
</html>]# python3 mysite2/manage.py runserver浏览器访问http://127.0.0.1:8000/test_static,成功显示两张图片
F12查看网络,可以发现,相同图片只加载一次# 标签加载静态文件 {% load static %} {% static 'xxx' %}
]# vim mysite2/templates/test_static.html # 模板
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>pictures<img src="http://127.0.0.1:8000/static/image/Django.png" width="200px" height="200px"><img src="/static/image/Django.png" width="200px" height="200px">{% load static %}<img src="{% static 'image/Django.png' %}" width="200px" height="200px">
</body>
</html>浏览器访问http://127.0.0.1:8000/test_static,成功显示三张图片
F12查看元素,可以发现,使用标签加载静态文件,显示为使用相对URL路径<img src="/static/image/Django.png" width="200px" height="200px">]# vim mysite2/mysite2/settings.pySTATIC_URL = '/statics/' # 加个s
浏览器访问http://127.0.0.1:8000/test_static,只成功显示第三张图片
应用与分布式路由
创建应用并注册
应用在Django项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型# 创建应用
]# cd 项目名
项目名]# python3 manage.py startapp 应用名# 应用内部结构
项目名]# ls 应用名/ migrations目录 # 保存数据迁移的中间文件__init__.py # 应用子包的初始化文件admin.py # 应用的后台管理配置文件apps.py # 应用的属性配置文件models.py # 与数据库相关的模型映射文件tests.py # 应用的单元测试文件views.py # 定义视图处理函数的文件# 注册应用
项目名]# vim 项目名/settings.pyINSTALLED_APPS = [...'应用名', # 安装应用...]
示例:音乐应用
]# django-admin startproject mysite3
]# cd mysite3
mysite3]# python3 manage.py startapp music # 创建应用目录
mysite3]# vim mysite3/settings.py # 注册应用INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','music',]
配置分布式路由
Django中,主路由配置文件(项目名/项目名/urls.py)可以不处理用户具体路由,主路由配置文件可以做请求的分发(分布式请求处理)。具体的请求可以由各自的应用来进行处理。# 配置分布式路由:主路由文件——》子路由文件——》对应的视图文件(视图函数)
]# vim 项目名/项目名/urls.py # 主路由文件
from django.urls import path, include # 引入include
urlpatterns = [path("应用名/", include("应用名.urls")),# http://IP:端口/应用名/
]]# vim 项目名/应用名/urls.py # 子路由文件
from django.urls import path
from . import views
urlpatterns = [path("index", views.视图函数名), # http://IP:端口/应用名/index
]]# vim 项目名/应用名/views.py # 视图文件
from django.shortcuts import render
from django.http import HttpResponse
def 视图函数名(request):return HttpResponse("这是音乐首页")
示例:音乐应用
]# vim mysite3/mysite3/urls.py # 主路由文件
from django.urls import path, include # 引入include
urlpatterns = [path("music/", include("music.urls")),# http://IP:端口/music/# 项目名/music/urls.py
]]# vim mysite3/music/urls.py # 子路由文件
from django.urls import path
from . import views
urlpatterns = [path("index", views.index_view), # http://IP:端口/music/index
]]# vim mysite3/music/views.py # 视图文件
from django.shortcuts import render
from django.http import HttpResponse
def index_view(request):return HttpResponse("这是音乐首页")浏览器访问http://127.0.0.1:8000/music/index
示例:多应用
# 要求
- 创建sport应用并注册
- 创建news应用并注册
- 创建分布式路由系统- http://127.0.0.1:8000/sport/index,交给sport应用中的index_view()函数处理- http://127.0.0.1:8000/news/index,交给news应用中的index_view()函数处理]# cd mysite3
mysite3]# python3 manage.py startapp sport # 创建应用目录
mysite3]# python3 manage.py startapp news # 创建应用目录mysite3]# vim mysite3/settings.py # 注册应用
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','music','news', # 添加应用'sport', # 添加应用
]mysite3]# vim mysite3/urls.py # 主路由文件
from django.urls import path, include
from . import views
urlpatterns = [path("music/", include("music.urls")),path("sport/", include("sport.urls")),path("news/", include("news.urls")),
]mysite3]# vim sport/urls.py # 子路由文件
from django.urls import path
from . import views
urlpatterns = [path("index", views.index_view), # http://IP:端口/sport/index
]mysite3]# vim sport/views.py # 视图文件
from django.shortcuts import render
from django.http import HttpResponse
def index_view(request):return HttpResponse("这是体育首页")mysite3]# vim news/urls.py # 子路由文件
from django.urls import path
from . import views
urlpatterns = [path("index", views.index_view), # http://IP:端口/news/index
]mysite3]# vim news/views.py # 视图文件
from django.shortcuts import render
from django.http import HttpResponse
def index_view(request):return HttpResponse("这是新闻首页")浏览器访问http://127.0.0.1:8000/sport/index
浏览器访问http://127.0.0.1:8000/news/index
应用下的模板
概念与理解
- 应用内部可以配置模板目录
- 应用下手动创建templates文件夹
- settings.py中开启应用模板功能
- TEMPLATES配置项中的 APP_DIRS 值为 True 即可
- 应用下templates和外层templates都存在时,Django得查找模板规则
- 优先查找外层templates目录下的模板
- 按 INSTALLED_APPS 配置下的应用顺序逐层查找
实验:在应用中配置模板文件
-
应用(news)下手动创建 templates 文件夹
-
在 settings.py 中开启应用模板功能
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, "templates")],'APP_DIRS': True, # 是否启用应用下的模板,默认为True
-
在 mysite3/news/templates 下创建 index.html 模板文件,编写模板内容
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>新闻首页</title> </head> <body> 我是新闻频道首页 </body> </html>
-
在 mysite3/news/views.py 中修改视图函数 index_view
from django.shortcuts import render from django.http import HttpResponsedef index_view(request):# return HttpResponse("这是新闻首页")return render(request, "index.html")
-
查看服务是否重启,浏览器访问:http://127.0.0.1:8000/news/index,查看模板加载是否成功
-
如果此时在外层的 templates 中也创建 index.html 文件,
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>首页</title> </head> <body> 我是首页 </body> </html>
-
查看服务是否重启,浏览器访问:http://127.0.0.1:8000/news/index,查看模板加载结果是否有冲突
-
如果此时在外层的 templates 中也创建 index.html 文件,经测试后,会优先找外层文件
-
解决方式
-
将应用中存储模板的路径改为:应用下—templates—应用名—index.html
-
在 mysite3/news/views.py 中修改视图函数 index_view
def index_view(request):# return HttpResponse("这是新闻首页")return render(request, "news/index.html") # 修改渲染模板路径,改为APP内部模板路径]# vim mysite3/news/templates/news/index.html
-
看服务是否重启,浏览器访问:http://127.0.0.1:8000/news/index,查看模板加载结果
模型层
概念与理解
回顾 Django MTV
模型层:负责跟数据库中间进行通信
准备:Django配置MySQL
# 安装数据库服务并且创建数据库
]# yum -y install mariadb-server
]# systemctl start mariadb
]# systemctl enable mariadb
]# mysqladmin -u root password
New password: 123456
Confirm new password: 123456
]# mysql -uroot -p123456
MariaDB [(none)]> CREATE DATABASE mysite3 DEFAULT CHARSET utf8;# Django项目配置mysql信息
]# vim mysite3/mysite3/settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 更改数据引擎'HOST': '127.0.0.1', # 数据库服务所在的主机地址'PORT': 3306 # 端口号'USER': 'root', # 连接数据库的用户名'PASSWORD': '123456', # 连接数据库用户名的密码'NAME': 'mysite3', # 操作的数据库名称}
}# 测试:迁移数据库数据
]# python3 mysite3/manage.py migrateOperations to perform:Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying sessions.0001_initial... OK]# mysql -uroot -p123456 -e 'show tables from mysite3;'
什么是模型
不同后端数据库的使用命令不一致,因此,可以通过使用模型类,来使用一致的手段操作不同的后端数据库,避免后续项目更换数据库导致的修改工作。- 什么是模型- 模型是一个 Python 类,它是由 django.db.models.Model 派生出的子类- 一个模型类代表数据库中的一张数据表- 模型类中每一个类属性都代表数据库中的一个字段- 模型是数据交互的接口,是表示和操作数据库的方法和方式
- models.py- 模型类写在指定应用 app 的 models.py 模块中
ORM框架
#### 定义ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库#### 作用- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库
- 根据设计的模型类生成数据库中的表格
- 通过简单的配置就可以进行数据库的切换#### 优点- 只需要面向对象编程,不需要面向数据库编写SQL脚本
- 对数据库的操作都转换成对类属性和方法的操作
- 不用写各种数据库的SQL语句
- 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异
- 不再关注用的是MySQL、Oracle或是其他数据库的内部细节
- 通过简单的配置就可以轻松切换数据库,而不需要修改代码#### 缺点- 对于复杂业务,使用成本较高
- 根据对象的操作转换成SQL语句,根据查询的结果转换成对象,在映射过程中由性能损失
映射图
实验:添加模型类
此示例为添加一个 bookstore_book 数据表来存放图书馆中数目的信息
-
添加一个 bookstore 的 app
- python3 manage.py startapp bookstore
-
添加模型类并注册 app
# settings.py INSTALLED_APPS = [# ......'bookstore' ]
-
模型类代码示例:
# file: bookstore/models.py from django.db import modelsclass Book(models.Model): # Book类继承models.Model类# 通过属性来指定表的字段。CharField、DecimalField...指定表字段的类型title = models.CharField("书名", max_length=50, default="")price = models.DecimalField("定价", max_digits=7, decimal_places=2, default=0.0)# 最大7位数字(整数+小数),小数部分2位
-
数据库迁移
- 迁移是 Django 同步对模型所做修改(添加模型,删除模型等)到数据库模式的方式
- 生成迁移文件—执行 python3 manage.py makemigrations
- 将应用下的 models.py 文件生成一个中间文件,并保存在 migrations 文件夹中
(testenv) [root@localhost mysite3]# python3 manage.py makemigrations Migrations for 'bookstore':bookstore/migrations/0001_initial.py- Create model Book
- 执行迁移脚本程序—执行 python3 manage.py migrate
- 执行迁移程序实现数据迁移,将每个已注册应用下的 migrations 文件夹中的中间文件同步回数据库
(testenv) [root@localhost mysite3]# python3 manage.py migrate Operations to perform:Apply all migrations: admin, auth, bookstore, contenttypes, sessions Running migrations:Applying bookstore.0001_initial... OK
-
查看数据库,验证指定表是否创建成功
(testenv) [root@localhost mysite3]# mysql -uroot -p123456 MariaDB [(none)]> USE mysite3; MariaDB [mysite3]> SHOW TABLES; +----------------------------+ | Tables_in_mysite3 | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | bookstore_book | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ MariaDB [mysite3]> DESC bookstore_book; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | title | varchar(50) | NO | | NULL | | | price | decimal(7,2) | NO | | NULL | | +-------+--------------+------+-----+---------+----------------+
创建模型类流程
创建应用
使用 python3 manage.py startapp 应用名称
的方式创建应用,然后要及时的在 settings.py 文件中进行注册
在应用下的models.py中编写模型类
- 模型类的类名是数据表名的一部分,建议类名首字母大写
- 类属性名,此名称将作为数据表的字段名
- 字段类型用来映射到数据表中的字段的类型
- 字段选项为这些字段提供附加的参数信息
迁移同步 makemigrations & migrate
模型类修改
任何关于表结构的修改,务必在对应模型类上修改,例:为 bookstore_book 表添加一个名为 info 的字段,类型是 varchar(100),解决方案:
- 模型类中添加对应类属性
- 执行数据库迁移
字段类型
BooleanField() | CharField() |
---|---|
数据库类型:tinyint(1) | 数据库类型:varchar |
编程语言中:使用True或False来表示值 | 注意:必须要指定max_length参数值 |
在数据库中:使用1或0来表示具体的值 | |
DateField() | DateTimeField() |
数据库类型:date 作用:表示日期 | 数据库类型:datetime |
参数(以下参数只能三选一) | 作用:表示日期和时间 |
1.auto_now:每次保存对象时,自动设置该字段为当前时间 | 参数同DateField |
2.auto_now_add:当对象第一次被创建时自动设置当前时间 | FloatField() |
注意:1和2两个选项取值范围(True/False) | 数据库类型:double |
3.default:设置当前时间(取值:字符串格式时间,如:2019-01-01) | 编程语言中和数据库中都使用小数表示值 |
DecimalField() | IntergerField() |
数据库类型:decimal(x, y) | 数据库类型:int |
编程语言中和数据库中:使用小数表示 | 编程语言和数据库中使用字符串 |
参数: | EmailField() |
1.max_digits:位数总数,包括小数点后的位数,该值必须大于等于decimal_places | 数据库类型:varchar |
2.decimal_places:小数点后的数字数量 | 编程语言和数据库中使用字符串 |
字段选项
字段选项,指定创建的列的额外信息,允许出现多个字段选项,多个选项之间使用,隔开- primary_key- 如果设置为True,表示该列为主键,如果指定一个字段为主键,则此数据库不会创建id字段- null- 如果设置为True,表示该列值允许为空- 默认为 False,如果此选项为 False,建议加入 defalut 选项来设置默认值- db_column- 指定列的名称,如果不指定则采用属性名作为列名- verbose_name- 设置此字段在 admin 界面上的显示名称- 字段选项样例- default- 设置所在列的默认值,如果字段选项 null=False 建议添加此选项- db_index- 如果设置为 True,表示为该列增加索引- unique- 如果设置为 True,表示该字段在数据库中的值必须是唯一的
模型类-Meta类
使用内部Meta类来给模型赋予属性,Meta类下有很多内建的类属性,可对模型类做一些控制
示例:
练习:修改模型类
- 模型类-Book 表名 book
- title - CharField(50)–书名 唯一
- pub–CharField(100) - 出版社 非空
- price–DecimalField – 图书定价 总位数7/小数点2位
- market_price – 图书零售价 总位数7/小数点2位
- 模型类-Author 表名 author
- name–CharField(11) – 姓名 非空
- age – IntegerField – 年龄 默认值为1
- email – EmailField – 邮箱 允许为空
解决方式
-
修改模型类—bookstore/models.py
# file: bookstore/models.py from django.db import modelsclass Book(models.Model):title = models.CharField("书名", max_length=50, default="", unique=True)pub = models.CharField("出版社", max_length=50, default="")price = models.DecimalField("定价", max_digits=7, decimal_places=2, default=0.0)market_price = models.DecimalField("零售价", max_digits=7, decimal_places=2, default=0.0)class Meta:# 设置表名。默认表名:应用名_模型类名db_table = "book"class Author(models.Model):name = models.CharField("姓名", max_length=11)age = models.IntegerField("年龄", default=1)email = models.EmailField("邮箱", null=True)class Meta:db_table = "author"
-
数据迁移
(testenv) [root@localhost mysite3]# python3 manage.py makemigrations (testenv) [root@localhost mysite3]# python3 manage.py migrate
-
数据库检测
(testenv) [root@localhost mysite3]# mysql -uroot -p123456 MariaDB [(none)]> USE mysite3; MariaDB [mysite3]> SHOW TABLES; | author | | book |MariaDB [mysite3]> DESC author; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(11) | NO | | NULL | | | age | int(11) | NO | | NULL | | | email | varchar(254) | YES | | NULL | | +-------+--------------+------+-----+---------+----------------+MariaDB [mysite3]> DESC book; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | title | varchar(50) | NO | UNI | NULL | | | price | decimal(7,2) | NO | | NULL | | | market_price | decimal(7,2) | NO | | NULL | | | pub | varchar(50) | NO | | NULL | | +--------------+--------------+------+-----+---------+----------------+
常见问题处理
问题1:当执行 python3 manage.py makemigrations 出现如下迁移错误时的处理方法:
错误原因
- 当对模型类新添加一个字段时可能出现如下错误
- 原理是添加新字段后,数据库不知道原来已有数据对于新建字段该如何赋值,所以新增字段时务必添加default默认值
处理方法
- 选择1:则会shell中,手动输入一个默认值
- 选择2(推荐):退出当前生成迁移文件过程,修改models.py,新增一个 default=xxx 的缺省值
问题2:数据库的迁移文件混乱解决办法
- 数据库中django_migrations表记录了migrate的全过程,项目各应用中migrate文件应与之对应否则migrate会报错
解决方案
- 删除所有migrations里所有的000?_xxxx.py(init.py除外)
- 删除数据库
- sql> drop database 自定义项目数据库;
- 重新创建数据库
- sql>CREATE DATABASE自定义项目数据库 DEFAULT CHARSET utf8;
- 重新生成migrations里所有的 000?_xxx.py
- python3 manage.py makemigrations
- 重新更新数据库
- python3 manage.py migrate
ORM基本操作
ORM操作
基本操作包括增删改查,即(CRUD操作)
CRUD是指在做计算处理时的增加(create),读取查询(read),更新(update)和删除(delete)
ORM CRUD 核心 -> 模型类.管理器对象
管理器对象
每个继承自models.Model的模型类,都会有一个objects对象被同样继承下来,这个对象叫做管理器对象,数据库的增上改查可以通过模型的管理器实现
创建数据
Django ORM 使用一种直观的方式把数据库表中的数据表示成Python对象,创建数据中每一条记录就是创建一个数据对象
方案1
MyModel.objects.create(属性1=值1,属性2=值2,…)
成功:返回创建好的实体对象
失败:抛出异常
**方案2:**创建MyModel实例对象,并调用save()进行保存
Django Shell
- 在 Django 中提供了一种交互式操作项目叫做 Django Shell,能够在交互模式用项目工程代码执行相应的操作
- 利用 Django Shell 可以代替编写 view 视图层的代码进行直接操作
- 注意:项目代码发生变化时,需要重新进入Django Shell
- 启动方式:
- python3 manage.py shell
实验:使用 Django Shell 添加数据
-
启动 Django Shell(代码发生变化需要重新进入):
(testenv) [root@localhost mysite3]# python3 manage.py shell >>>
-
测试 方案1 后查看数据库:
# Django Shell >>> from bookstore.models import Book >>> Book.objects.create(title='Python', pub='清华大学出版社', price=20, market_price=25) <Book: Book object (1)> # mysql MariaDB [mysite3]> select * from book; +----+--------+-------+--------------+-----------------------+ | id | title | price | market_price | pub | +----+--------+-------+--------------+-----------------------+ | 1 | Python | 20.00 | 25.00 | 清华大学出版社 | +----+--------+-------+--------------+-----------------------+
-
测试 方案2 后查看数据库:
# Django Shell >>> from bookstore.models import Book >>> b2 = Book(title='Django', pub='清华大学出版社', price=70, market_price=75) >>> b2.save() # mysql MariaDB [mysite3]> select * from book; +----+--------+-------+--------------+-----------------------+ | id | title | price | market_price | pub | +----+--------+-------+--------------+-----------------------+ | 1 | Python | 20.00 | 25.00 | 清华大学出版社 | | 2 | Django | 70.00 | 75.00 | 清华大学出版社 | +----+--------+-------+--------------+-----------------------+
静态文件
相关文章:

orm01
静态文件处理 静态文件:如:图片、音频、视频、css、js等静态文件的相关配置也在 项目名/项目名/settings.py 文件中进行配置 - 配置静态文件的访问路径STATIC_URL- 功能:通过哪个 url 地址找静态文件- 默认配置:STATIC_URL /sta…...

Maven 测试和单元测试介绍
一、测试介绍 二、单元测试 1)介绍 2)快速入门 添加依赖 <dependencies><!-- junit依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9…...

Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言
目录 七、Postman 1、安装 2、postman的界面介绍 八、Postman执行接口测试 1、请求页签 3、响应页签 九、Postman的环境变量和全局变量 1、创建环境变量和全局变量可以解决的问题 2、postman中的操作-全局变量 1️⃣手动设置 2️⃣代码设置 3️⃣界面获取 4️⃣代…...

UE5 丧尸类杂兵的简单AI
A、思路 1、关卡初始化时,自动产生随机巡逻点,小兵到达后,去另一个随机巡逻点。 2、加入视力,发现主角后,不再巡逻,而开始追击主角并攻击。条件循环。 3、加入听力。主角的奔跑与射击会产生噪音…...

Linux字符设备驱动开发的三种方式(分析+对比+示例)
文章目录 一. 字符设备的驱动方法二. 三种方法的对比三. 开发环境四. 代码示例1. 传统设备驱动模型2. 总线设备驱动模型3. 设备树驱动模型 五. 相关链接 一. 字符设备的驱动方法 字符设备驱动 是指在I/O传输过程中以字节流进行读写操作的设备。典型的如LCD、蜂鸣器、SPI、触摸屏…...
C++设计模式之行为型模式概述,它们的目的与特点
行为型设计模式需要解决的问题 行为型设计模式主要关注对象之间的责任分配和交互。它们解决的问题包括: 对象之间的通信:如何让对象之间高效地通信,同时保持松耦合。算法的封装与复用:如何将算法或行为封装起来,使其…...

把Huggingface下载的arrow数据集转化为json格式
Arrow2json 使用默认的Huggingface路径 以allenai/tulu-3-sft-mixture数据集为例。 使用load_dataset即可: from datasets import load_dataset# 加载数据集 dataset load_dataset("allenai/tulu-3-sft-mixture")# 指定保存路径 output_dir "~/…...
复习打卡大数据篇——Hadoop YARN
目录 1.什么是yarn 2.yarn的三大角色 3.任务(MR)提交到YARN运行流程 4. 调度器Scheduler 5.YARN HA 高可用 1.什么是yarn YARN(Yet Another Resource Negotiator)是一个资源管…...

fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值
FPGA中使用数字滤波器时,可通过观察模拟波形更好地查看滤波效果。可以通过ModelSim中的波形格式设置来实现更直观的波形显示。 右键波形->Format-> Analog 效果 不同的数值格式显示:右键波形->Radix-> Decimal 效果 示例代码 ver…...

Linux 基本指令
目录 1.常见指令 1.1 ls指令 1.2 pwd指令 1.3 cd指令 1.4 touch指令 1.5 mkdir指令 1.6 rm和rmdir指令 1.7 man指令 1.8 cp指令 1.9 mv指令 编辑 1.10 cat指令 1.11 more指令 1.12 less指令 1.13 head指令 1.14.tail指令 1.15 时间相关的指令 1.16 cal…...

GO语言基础面试题
一、字符串和整型怎么相互转换 1、使用 strconv 包中的函数 FormatInt 、ParseInt 等进行转换 2、转换10进制的整形时,可以使用 strconv.Atoi、strconv.Itoa: Atoi是ParseInt(s, 10, 0) 的简写 Itoa是FormatInt(i, 10) 的简写 3、整形转为字符型时&#…...

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量
文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …...

小程序基础 —— 10 如何调试小程序代码
如何调试小程序代码 在进行项目开发的时候,不可避免需要进行调试,那么如何调试小程序呢? 打开微信开发者工具后,有一个模拟器,通过模拟器能够实时预览自己写的页面,如下: 在上部工具栏中有一个…...

Vue项目如何设置多个静态文件;如何自定义静态文件目录
Vite实现方案 安装插件 npm i vite-plugin-static-copy在vite.config.ts引入 import { viteStaticCopy } from vite-plugin-static-copy配置 plugins: [viteStaticCopy({targets: [{src: "要设置的静态文件目录的相对路径 相对于vite.config.ts的", dest: ./, // …...

CentOS Stream 9 安装 JDK
安装前检查 java --version注:此时说明已安装过JDK,否则为未安装。如若已安装过JDK可以跳过安装步骤直接使用,或者先卸载已安装的JDK版本重新安装。 安装JDK 官网下载地址:https://www.oracle.com/java/technologies/downloads…...

前端(htmlcss)
前端页面 Web页面 PC端程序页面 移动端APP页面 ... HTML页面 HTML超文本标记页面 超文本:文本,声音,图片,视频,表格,链接 标记:由许多标签组成 HTML页面运行到浏览器上面 vscode便捷插件使用 vs…...
py打包工具
pyinstaller 安装 大佬文档参考 pip install pyinstallerpyinstaller 参数 -i 给应用程序添加图标 -F 只生成一个exe格式的文件 -D 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) -c 有黑窗口 -w 去掉黑窗口pyinstalle…...
华为OD E卷(100分)39-最长子字符串的长度(二)
前言 工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力…...

Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案
问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…...

JSON结构快捷转XML结构API集成指南
JSON结构快捷转XML结构API集成指南 引言 在当今的软件开发世界中,数据交换格式的选择对于系统的互操作性和效率至关重要。JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据表…...

React---day3
React 2.5 jsx的本质 jsx 仅仅只是 React.createElement(component, props, …children) 函数的语法糖。所有的jsx最终都会被转换成React.createElement的函数调用。 createElement需要传递三个参数: 参数一:type 当前ReactElement的类型;…...
全面解析:npm 命令、package.json 结构与 Vite 详解
全面解析:npm 命令、package.json 结构与 Vite 详解 一、npm run dev 和 npm run build 命令解析 1. npm run dev 作用:启动开发服务器,用于本地开发原理: 启动 Vite 开发服务器提供实时热更新(HMR)功能…...

11.4java语言执行浅析4
编译成字节码(.class 文件) 使用 javac 命令将源代码编译为 Java 字节码(bytecode) 它不是机器码,而是 JVM 能理解的中间语言(字节码),具有平台无关性。 编译过程简要࿱…...

Android之ListView
1:简单列表(ArrayAdapter) 1:运行的结果: 2:首先在MyListView里面创建一个按钮,点击的时候进行跳转。 这里让我吃惊的是,Button里面可以直接设置onClick .java里面的方法。 也即是点击这个按钮之后就会去…...
LVS-NAT 负载均衡群集
目录 简介 一、LVS 与群集技术基础 1.1 群集技术概述 1.2 负载均衡群集的分层结构 1.3 负载均衡工作模式 二、LVS 虚拟服务器核心组件与配置 2.1 LVS 内核模块与管理工具 2.2 负载调度算法解析 2.3 ipvsadm 管理工具实战 三、NFS 共享存储服务配置 3.1 NFS 服务基础…...

Python实现P-PSO优化算法优化BP神经网络分类模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 随着人工智能技术的快速发展,神经网络在分类任务中展现了强大的性能。BP(Back Propagation&…...

【linux】linux进程概念(四)(环境变量)超详细版
小编个人主页详情<—请点击 小编个人gitee代码仓库<—请点击 linux系列专栏<—请点击 倘若命中无此运,孤身亦可登昆仑,送给屏幕面前的读者朋友们和小编自己! 目录 前言一、基本概念二、认识常见的几个环境变量echo $ 查看某个环境变量env 显示…...
WPF的交互核心:命令系统(ICommand)
命令系统(ICommand) 1 RelayCommand实现2 CanExecute控制按钮可用性3 参数传递(CommandParameter)3.1 静态参数绑定:3.2 动态参数绑定:3.3 复杂对象参数: 4 异步命令实现5 常见问题排查 WPF的命…...
47道ES67高频题整理(附答案背诵版)
1.ES5、ES6(ES2015)有什么区别? ES5(ECMAScript 5)和ES6(也称为ECMAScript 2015)是JavaScript语言的两个版本,它们之间有一些重要的区别和改进: let 和 const 关键字: …...
如何将vue2使用npm run build打包好的文件上传到服务器
要将 Vue 2 项目打包并部署到服务器上,并使用 Nginx 作为 Web 服务器,可以按照以下步骤操作: 1. 打包 Vue 2 项目 首先,确保你的 Vue 2 项目已经开发完成,并且可以在本地正常运行。然后使用以下命令进行打包…...