pt24django教程

静态文件访问

不能与服务器端做动态交互的文件都是静态文件,如: 图片,css,js,音频,视频,html文件(部分)

静态文件配置

在 settings.py 中配置一下两项内容:

STATIC_URL

静态文件的访问路径,通过哪个url地址找静态文件 ,STATIC_URL = ‘/static/’

  • 指定访问静态文件时是需要通过 /static/xxx或 127.0.0.1:8000/static/xxx

STATICFILES_DIRS

静态文件的在服务器端的存储位置

配置访问静态文件

1、目录、setting.py配置

# file: setting.py
# 静态文件的访问路径
STATIC_URL = '/static/'
# 静态文件的存储路径
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)[root@vm mysite2]# ls
db.sqlite3  manage.py  mysite2  static  templates[root@vm mysite2]# mkdir -p static/img

使用静态文件的访问路径进行访问,访问路径: STATIC_URL = ‘/static/’

<img src="/static/img/bizhi.jpeg">
<img src="http://127.0.0.1:8000/static/img/bizhi.jpeg">

2、路由配置

# urls.pypath('test_static',views.test_static),# views.py  
def test_static(request):return render(request, 'test_static.html')# templates/test_static.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>静态文件的演示</title>
</head>
<body>
<img src="/static/img/bizhi.jpeg" width="300 px" height="150 px">
<img src="http://192.168.1.11:8000/static/img/bizhi.jpeg" width="300 px" height="150 px">
</body>
</html>

通过 {% static %}标签访问静态文件 了解

  • {% static %} 表示的就是静态文件访问路径
  1. 加载 static {% load static %}
  2. 使用静态资源时
    • 语法:{% static '静态资源路径' %}
    • 示例: <img src="{% static 'images/lena.jpg' %}">

Django中的应用 - app

应用在Django项目中是一个独立的业务模块,可以包含自己的路由、视图、模板、模型

创建、注册应用app

# 创建应用文件夹
[root@vm mysite2]# python3 manage.py startapp music
/root/mysite2#在settings.py里注册应用
[root@vm mysite2]# vi mysite2/settings.pyINSTALLED_APPS = [# ....'user',  #用户信息模块'music',  #音乐模块]

应用的结构

[root@vm mysite2]# ls music/
admin.py    #应用的后台管理配置文件  
apps.py     #应用的属性配置文件
__init__.py #应用子包的初始化文件  
migrations  #文件夹,保存数据迁移的中间文件,不会动
models.py   #与数据库相关的模型映射类文件
__pycache__  
tests.py    #应用的单元测试文件
views.py    #定义视图处理函数的文件

应用的分布式路由

Django中,主路由配置文件(urls.py)可以不处理用户具体路由,主路由配置文件的可以做请求的分发(分布式请求处理)。具体的请求可以由各自的应用来进行处理

include 函数

用于分发将当前路由转到各个应用的路由配置文件的 urlpatterns 进行分布式处理

函数格式 include(‘app命字.url模块名’),子urls模块文件件里必须有urlpatterns 列表

同名文件冲突问题

#主urls.py
from django.conf.urls import include# 分布式路由,将path为music/xxx的路由,交给music下的urls去处理path('music/',include('music.urls')),# music下的urls    
from django.urls import path
from . import viewsurlpatterns = [# http://127.0.0.1:8000/music/indexpath('index', views.index_view),
]# music下的views.py
from django.shortcuts import renderdef index_view(request):return render(request, 'index.html')# 主应用目录下的templates/index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>这是主目录下的Index页面</h3>
</body>
</html># music应用下templates/index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>这是music应用下的Index页面</h3>
</body>
</html># http://192.168.1.11:8000/music/index   # 这是主目录下的Index页面,APP的未返回

更改下返回的文件名

# music下的views.py
from django.shortcuts import renderdef index_view(request):return render(request, 'index1.html')# music应用下templates/index.html改成index1.html 
# http://192.168.1.11:8000/music/index  #这是music应用下的Index页面,主目录没有

应用的templates模板总结

应用内部可以配置模板目录
1,应用下手动创建 templates 文件夹
2,settings.py中确认 TEMPLATE 配置项中 的 'APP_DIRS' 值例如 : 'APP_DIRS': True#应用下templates 和 外层templates 都存在时,django得查找模板规则
1,优先查找外层templates目录下的模板,再查找APP的
2,按INSTALLED_APPS配置下的 应用顺序 从上到下逐层查找
#主 settings.py
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],  #1、先找主的'APP_DIRS': True,   #True,打开APP查找。    2、再找APP的INSTALLED_APPS = [
...'music',   # 3、APP从上到下,找到就返回
]

解决冲突方案

#在应用的templates,先创建与应用同名的子目录,然后在子目录下添加模板文件。 "应用名/模板名.html" 
[root@vm music]# mkdir templates/music  #templates创建同app同名的目录
[root@vm music]# mv templates/index1.html templates/music/index.html# music下的views.py
from django.shortcuts import renderdef index_view(request):return render(request, 'music/index.html')http://192.168.1.11:8000/music/index  #这是music应用下的Index页面    

练习:

练习:再创建一个user应用,并注册。user应用下,也创建一个index.html页面。"user/index"路由请求,在视图函数返回页面时,使用自己的index页面。url:   index,返回主目录的index.htmlurl:music/index , 返回music应用下的index.htmlurl:user/index,返回user应用下的index.html
# 1、创建应用文件夹
[root@vm mysite2]# python3 manage.py startapp  user  
/root/mysite2# 2、在settings.py里注册应用
[root@vm mysite2]# vi mysite2/settings.pyINSTALLED_APPS = [....'user',  #用户信息模块]
# 3、创建分布式路由
[root@vm mysite2]# vi mysite2/urls.py
...path('user/',include('user.urls')),# 4、创建子路由
[root@vm mysite2]# vi user/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('index', views.index_view),
]# 5、创建子view
[root@vm mysite2]# vi user/views.py
...
def index_view(request):return render(request, 'user/index.html')# 6、 创建子templates/user目录  index文件
[root@vm mysite2]# mkdir -p user/templates/user
[root@vm mysite2]# vi user/templates/user/index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>这是user应用下的Index页面</h3>
</body>
</html>#反应略慢,别搞那么快。
# http://192.168.1.11:8000/user/index   # 这是user应用下的Index页面

模型层

Django下配置使用 mysql 数据库

[root@vm mysite2]# apt-get  install python3-dev default-libmysqlclient-dev   #ubuntu
[root@vm mysite2]# yum install python3-devel mysql-devel gcc #centos[root@vm mysite2]# yum -y install mariadb-server  mariadb-client
[root@vm mysite2]# systemctl enable mariadb --now
[root@vm mysite2]# mysql
UPDATE mysql.user SET password = PASSWORD('123456') WHERE user = 'root';
FLUSH PRIVILEGES;
exit
[root@vm mysite2]# pip3 install --upgrade pip
[root@vm mysite2]# pip3 install mysqlclient

创建 和 配置数据库

[root@vm mysite2]# mysql -uroot -p123456
> create database mysite2 default charset utf8 ;
> use mysite2;

数据库的配置为mysql

sqlite 数据库配置

# file: settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}

mysql 数据库配置

DATABASES = {'default' : {'ENGINE': 'django.db.backends.mysql','NAME': 'mysite2','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': 3306,}
}"""  数据库的后端引擎  
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
'django.db.backends.postgresql'"""

模型(Models)

模型是一个Python类,它是由django.db.models.Model派生出的子类。- 一个模型类代表数据库中的一张数据表- 模型类中每一个类属性都代表数据库中的一个字段。- 模型是数据交互的接口,是表示和操作数据库的方法和方式

Django 的 ORM框架

ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库

ORM框架的作用

1. 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
2. 根据设计的模型类生成数据库中的表格。
3. 通过简单的配置就可以进行数据库的切换。
ORM 好处:1. 只需要面向对象编程, 不需要面向数据库编写代码.- 对数据库的操作都转化成对类属性和方法的操作.- 不用编写各种数据库的sql语句.2. 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.- 不在关注用的是mysql、oracle...等数据库的内部细节.- 通过简单的配置就可以轻松更换数据库, 而不需要修改代码.ORM 缺点1. 对于复杂业务,使用成本较高2. 性能损耗,根据对象的操作转换成SQL语句,再根据查询的结果转化成对象, 在映射过程中有性能损失.ORM 映射示意:类   ---> 数据表  对象 ---> 数据行属性 ---> 字段

模型类Models 创建

模型类需继承自django.db.models.Model

Models的语法规范

from django.db import models
class 模型类名(models.Model):字段名 = models.字段类型(字段选项)""" 模型类名是数据表名的一部分,建议类名首字母大写字段名又是当前类的类属性名,此名称将作为数据表的字段名字段类型用来映射到数据表中的字段的类型字段选项为这些字段提供附加的参数信息   """ 

模型示例

此示例为添加一个 bookstore_book 数据表来存放图书馆中书目信息

添加一个 bookstore 的 app

[root@vm mysite2]# python3 manage.py startapp bookstore
[root@vm mysite2]# vi mysite2/settings.py
# file : setting.py  注册app
INSTALLED_APPS = [...'bookstore',
]

添加模型类

# file : bookstore/models.py
from django.db import modelsclass Book(models.Model): title = models.CharField("书名", max_length=50, default='')price = models.DecimalField('定价', max_digits=7, decimal_places=2, default=0.0)

数据库的迁移

迁移是Django同步您对模型所做更改(添加字段,删除模型等) 到您的数据库模式的方式,步骤如下:

1、生成或更新迁移文件
将每个应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中

[root@vm mysite2]# python3 manage.py makemigrations
/root/mysite2
Migrations for 'bookstore':bookstore/migrations/0001_initial.py- Create model Book

2、执行迁移脚本程序

执行迁移程序实现迁移。将每个应用下的migrations目录中的中间文件同步回数据库。

[root@vm mysite2]# python3 manage.py migrate
Running migrations:
...Applying sessions.0001_initial... OK  #看下数据库

**注意:**每次修改完模型类再对服务程序运行之前都需要做以上两步迁移操作

[root@vm mysite2]# mysql -uroot -p123456 -e "use mysite2;show tables;"
+----------------------------+
| Tables_in_mysite2          |
+----------------------------+
| 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             |
+----------------------------+
[root@vm mysite2]# mysql -uroot -p123456 -e "desc mysite2.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    |                |
+-------+--------------+------+-----+---------+----------------+

字段类型

参考文档 https://docs.djangoproject.com/en/2.2/ref/models/fields/#field-types

BooleanField()- 数据库类型:tinyint(1)- 编程语言中:使用TrueFalse来表示值- 在数据库中:使用10来表示具体的值CharField()- 数据库类型:varchar- 注意:- 必须要指定max_length参数值DateField()- 数据库类型:date- 作用:表示日期- 参数:- auto_now: 每次保存对象时,自动设置该字段为当前时间(取值:True/False)- auto_now_add: 当对象第一次被创建时自动设置当前时间(取值:True/False)- default: 设置当前时间(取值:字符串格式时间如: '2019-6-1')- 以上三个参数只能多选一DateTimeField()- 数据库类型:datetime(6)- 作用:表示日期和时间- 参数同DateFieldDecimalField()- 数据库类型:decimal(x,y)- 编程语言中:使用小数表示该列的值- 在数据库中:使用小数- 参数:- max_digits: 位数总数,包括小数点后的位数。 该值必须大于等于decimal_places.- decimal_places: 小数点后的数字数量- 示例:  money=models.DecimalField(max_digits=7,decimal_places=2,default=0.0)FloatField()- 数据库类型:double- 编程语言中和数据库中都使用小数表示值EmailField()- 数据库类型:varchar- 编程语言和数据库中使用字符串IntegerField()- 数据库类型:int- 编程语言和数据库中使用整数URLField()- 数据库类型:varchar(200)- 编程语言和数据库中使用字符串ImageField()- 数据库类型:varchar(100)- 作用:在数据库中为了保存图片的路径- 编程语言和数据库中使用字符串TextField()- 数据库类型:longtext- 作用:表示不定长的字符数据

字段选项

文档参见https://docs.djangoproject.com/en/2.2/ref/models/fields/#field-options

指定创建的列的额外的信息,允许出现多个字段选项,多个选项之间使用,隔开

1. primary_key- 如果设置为True,表示该列为主键,如果指定一个字段为主键,则此数库表不会创建id字段
2. blank- 设置为True时,字段可以为空。设置为False时,字段是必须填写的。
3. null- 如果设置为True,表示该列值允许为空。- 默认为False,如果此选项为False建议加入default选项来设置默认值
4. default- 设置所在列的默认值,如果字段选项null=False建议添加此项
5. db_index- 如果设置为True,表示为该列增加索引
6. unique- 如果设置为True,表示该字段在数据库中的值必须是唯一(不能重复出现的)
7. db_column- 指定列的名称,如果不指定的话则采用属性名作为列名
8. verbose_name- 设置此字段在admin界面上的显示名称。

示例:

# 创建一个属性,表示用户名称,长度30个字符,必须是唯一的,不能为空,添加索引
name = models.CharField(max_length=30, unique=True, null=False, db_index=True)

Meta内部类

使用内部 Meta类 来给模型赋予属性,Meta类下有很多内建的类属性,可对模型类做一些控制、

示例:

# file : bookstore/models.py
from django.db import modelsclass Book(models.Model): title = models.CharField("书名", max_length=50, default='')price = models.DecimalField('定价', max_digits=7, decimal_places=2, default=0.0)class Meta:db_table = 'book'  #可改变当前模型类对应的表名

数据库迁移的错误处理方法

# file : bookstore/models.py   #新增一行
from django.db import modelsclass Book(models.Model): 
...# 新增属性/字段 (要有默认值)market_price = models.DecimalField("零售价",max_digits=5,decimal_places=2,default=0.0)pub = models.CharField("出版社", max_length=50,default="")$ python3 manage.py makemigrationsYou are trying to add a non-nullable field 'des' to book without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:1) Provide a one-off default now (will be set on all existing rows with a null value for this column)2) Quit, and let me add a default in models.py
Select an option:  2  退出

错误原因

  • 当对模型类新添加一个字段时可出现该错误
  • 原理是 添加新字段后,数据库不知道原来已有数据对于新建字段该如何赋值,所以新增字段时,务必要添加default默认值。

处理方法:

  1. 选择1 则会进入到shell中,手动输入一个默认值,不建议
  2. 退出当前生成迁移文件的过程,自己去修改models.py, 新增加一个default=XXX 的缺省值(推荐使用)
Select an option:  2  退出修改下。重新makemigrations
# file : bookstore/models.py   #新增一行
from django.db import modelsclass Book(models.Model): 
...# 新增属性/字段 (要有默认值)market_price = models.DecimalField("零售价", max_digits=5,decimal_places=2,default=0.0)pub = models.CharField("出版社",max_length=50,default="")[root@vm mysite2]# python3 manage.py makemigrations
[root@vm mysite2]# python3 manage.py migrate

数据库的迁移文件混乱的解决办法

1. 删除 所有 migrations 里所有的 000?_XXXX.py (`__init__.py`除外)
2. 删除 数据库,要先备份一下- sql> drop database mywebdb;
3. 重新创建 数据库- sql> create datebase mywebdb default charset...;
4. 重新生成migrations里所有的 000?_XXXX.py- python3 manage.py makemigrations
5. 重新更新数据库- python3 manage.py migrate

模型层的基本操作

基本操作包括增删改查操作,即(CRUD操作),CRUD是指在做计算处理时的增加(Create)、读取查询(Read)、更新(Update)和删除(Delete)

管理器对象

每个继承自 models.Model 的模型类,都会有一个 objects 对象被同样继承下来。这个对象叫管理器对象

数据库的增删改查可以通过模型的管理器实现

class MyModel(models.Model):...
MyModel.objects.create(...) # objects 是管理器对象

创建数据对象

Django 使用一种直观的方式把数据库表中的数据表示成Python 对象,创建数据中每一条记录就是创建一个数据对象

  1. MyModel.objects.create(属性1=值1, 属性2=值1,…)

    • 成功: 返回创建好的实体对象,失败: 抛出异常
  2. 创建 MyModel 实例对象,并调用 save() 进行保存 (不推荐)

    obj = MyModel(属性=,属性=)
    obj.属性=值
    obj.save()
    

使用Django shell

  • 在Django提供了一个交互式的操作项目叫 Django Shell 它能够在交互模式用项目工程的代码执行相应的操作
  • 利用 Django Shell 可以代替编写View的代码来进行直接操作
  • 在Django Shell 下只能进行简单的操作,不能运行远程调式

启动使用方式:

[root@vm ~]# cd mysite2/
[root@vm mysite2]# python3 manage.py shell
...
>>> from bookstore.models import Book
>>> Book.objects.create(title='java',price=50)
<Book: Book object (1)> #返回对象
# 数据库验证
[root@vm ~]# mysql -uroot -p123456 -e "select * from mysite2.bookstore_book"
+----+-------+-------+--------------+-----+
| id | title | price | market_price | pub |
+----+-------+-------+--------------+-----+
|  1 | java  | 50.00 |         0.00 |     |
+----+-------+-------+--------------+-----+[root@vm mysite2]# python3 manage.py shell
...
>>> from bookstore.models import Book
>>> Book.objects.create(title='python',price=50,pub='清华')
<Book: Book object (2)>
>>> Book.objects.create(title='c++',price=100,pub='清华')
<Book: Book object (3)>
>>> Book.objects.create(title='xiyou',price=700,pub='beida')
<Book: Book object (4)>
>>> Book.objects.create(title='honglou',price=90,pub='beida')


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

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

相关文章

[Linux入门]---搭建Linux环境

1.Linux环境的搭建方式 使用Linux操作系统的三种途径&#xff1a; 1.直接安装在物理机上&#xff0c;但是由于 Linux 桌面使用起来非常不友好&#xff0c;不推荐。 2.使用虚拟机软件&#xff0c;将 Linux 搭建在虚拟机上&#xff0c;但是由于当前的虚拟机软件(如 VMWare 之类的…

多线程案例(3) - 定时器,线程池

一&#xff0c;定时器 定时器作用&#xff1a;约定一个时间间隔&#xff0c;时间到达后&#xff0c;执行某段代码逻辑。实际上就是一个 "闹钟" 。 1.1使用标准库中的定时器 标准库中提供了一个 Timer 类. Timer 类的核心方法为 schedule .Timer 类中含有一个扫描线…

element-ui文件下载(单个)

1. 单个附件下载 <el-buttontype"text"size"small"click.native.prevent"download(scope.row)" >下载</el-button>export default {data() {return {downloadUrl: http://127.0.0.1:8881/XX/XX, // 下载接口}},methods: {download(…

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录 一、使用深度学习中的循环神经网络&#xff08;RNN&#xff09;或长短时记忆网络&#xff08;LSTM&#xff09;生成诗词二、优化&#xff1a;使用双向 LSTM 或 GRU 单元来更好地捕捉上下文信息三、优化&#xff1a;使用生成对抗网络&#xff08;GAN&#xff09;或其他技术…

YOLOV7改进-添加基于注意力机制的目标检测头(DYHEAD)

DYHEAD 复制到这&#xff1a; 1、models下新建文件 2、yolo.py中import一下 3、改IDetect这里 4、论文中说6的效果最好&#xff0c;但参数量不少&#xff0c;做一下工作量 5、在进入IDetect之前&#xff0c;会对RepConv做卷积 5、因为DYHEAD需要三个层输入的特征层一致&am…

Jetpack Compose 介绍和快速上手

Compose版本发展 19年&#xff0c;Compose在Google IO大会横空出世&#xff0c;大家都议论纷纷&#xff0c;为其前途堪忧。 21年7月Compose 1.0的正式发布&#xff0c;却让大家看到了Google在推广Compose上的坚决&#xff0c;这也注定Compose会成为UI开发的新风向。 23年1月…

can‘t sync to target.

飞翔仿真器 无法 与S12单片机 建立联系&#xff0c;仿真时显示 cant sync to target. 但是使用仿真器与其他板子连接仿真是没问题的。 首先怀疑硬件问题&#xff1a;没发现问题&#xff1b; 然后&#xff0c;勇敢的点击菜单中 设置速度&#xff0c;根据自己晶振和建议设置如…

套接字通信之 端口

端口 端口的本质? 无符号短整型数-> unsigned short端口取值范围? 可以有多少个端口? 2的16次方取值范围:0 - 65535 端口的作用? 定位某台主机上运行的某个进程 在电脑上运行了微信和QQ&#xff0c;小明给我的的微信发消息&#xff0c;电脑上的微信就收到了消息&#…

C语言经典100例题(56-60)--画圆;画方;画线

目录 【程序56】题目&#xff1a;画图&#xff0c;学用circle画圆形 【程序57】题目&#xff1a;画图&#xff0c;学用line画直线。 【程序58】题目&#xff1a;画图&#xff0c;学用rectangle画方形。 【程序59】题目&#xff1a;画图&#xff0c;综合例子。 【程序60】题…

arcgis拓扑检查实现多个矢量数据之间消除重叠区域

目录 环境介绍&#xff1a; 操作任务&#xff1a; 步骤&#xff1a; 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后&#xff0c;进行拓扑检查 4、打开TP_CK_Topology&#xff0c;会自动带出拓扑要素&#xff0c;红色区域为拓扑错误的地方&#xff1…

upload-labs文件上传靶场实操

文章目录 1.Pass-012.Pass-023.Pass-034.Pass-045.Pass-056.Pass-067.Pass-078.Pass-089.Pass-0910.Pass-1011.Pass-1112.Pass-1213.Pass-1314.Pass-1415.Pass-1516.Pass-1617.Pass-1718.Pass-1819.Pass-1920.Pass-20 上传姿势总结&#xff1a; 1)改后缀名绕过 2)Content-Type绕…

flink-1.14.4启动报错setPreferCheckpointForRecovery(Z)v

从flink1.12升级到flink1.14&#xff0c;修改了pom.xml的flink-version&#xff0c;打包的时候发现报错&#xff1a; // 当有较新的 Savepoint 时&#xff0c;作业也会从 Checkpoint 处恢复env.getCheckpointConfig().setPreferCheckpointForRecovery(true); 于是屏蔽了这段配置…

微信小程序怎么隐藏顶部导航栏(navigationBar)变透明的解决方案

怎么隐藏小程序顶部导航栏&#xff08;navigationBar&#xff09;&#xff1f; 官网说&#xff1a;Navigation是小程序的顶部导航组件&#xff0c;当页面配置 navigationStyle 设置为 custom 的时候可以使用此组件替代原生导航栏。 那么&#xff0c;我们就知道这种效果是可以…

SpringMVC多文件上传

文章目录 一、文件上传1.1 导入pom依赖1.2 配置文件上传解析器1.3 设置文件上传表单1.4 实现文件上传 二、文件下载三、多文件上传四、JRebel的使用 一、文件上传 1.1 导入pom依赖 <commons-fileupload.version>1.3.3</commons-fileupload.version><dependency…

abortControllerMap: Map<string, AbortController>

abortControllerMap: Map&#xff1c;string, AbortController&#xff1e;AbortController 是一个用于控制和取消异步任务的接口。 在这里&#xff0c;AbortController 用作一个映射的值&#xff0c;与映射的键&#xff08;string 类型&#xff09;相关联。 AbortController 可…

redis设计规范

部分内容参考&#xff1a;阿里redis开发规范 同时&#xff0c;结合shigen在实习中的实践经验总结。 key的名称设计 可读性和管理性 业务名: 表名: id pro:user:1001简洁性 控制key的长度&#xff0c;可以用缩写 transaction -> tras拒绝bigkey 防止网卡流量、慢查询&…

React Native 环境配置(mac)

React Native 环境配置&#xff08;mac&#xff09; 1.Homebrew2.Node.js、WatchMan3.Yarn4.Android环境配置1.安装JDK2.下载AndroidStudio1.国内配置 Http Proxy2.安装SDK1.首先配置sdk的路径2.SDK 下载 3.创建模拟器4.配置 ANDROID_HOME 环境变量 5.IOS环境1.升级ruby&#x…

学校项目培训之Carla仿真平台之安装Carla

官网&#xff1a;http://carla.org/ 写在前面 由于安装都写了很多东西&#xff0c;所以我单独将安装弄出来记录一下。 如果你在安装9.12版本的时候遇到了很多问题&#xff0c;你可以考虑以下几点&#xff1a; - 楼梯可能不太行&#xff0c;需要更换&#xff0c;这是我实践得到的…

浅析Java责任链模式实现

一、概要 定义&#xff1a;责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 二、应用场景&#xff1a; 1.多条件流程判断&#xff1a;权限相关…

iOS开发之编译OpenSSL静态库

项目审查发现OpenSSL1.0.2d有漏洞&#xff0c;所以需要升级更新OpenSSL版本&#xff0c;借此机会&#xff0c;记录一下编译OpenSSL静态库的流程。 Xcode使用的是14.2&#xff0c;OpenSSL使用的是1.0.2u、1.1.1u&#xff0c;由于是对两个不同版本进行的编译操作&#xff0c;所以…