【Python】从0开始的Django基础

Django框架基础

  • unit01
  • 一、`Django`基础
    • 1.1 什么是`Django?`
    • 1.2 安装与卸载
      • 1.2.1 `Python`与`Django`的版本
      • 1.2.2 安装
      • 1.2.3 查看`Django`版本
      • 1.2.4 卸载
  • 二、`Django`项目
    • 2.1 概述
    • 2.2 创建项目
    • 2.3 启动项目
    • 2.4 项目的目录结构
    • 2.5 配置
  • 三、`URL` 调度器
    • 3.2 定义`URL`路由
    • 3.2 定义首页的路由
    • 3.3 便捷管理路由及视图函数
    • 3.4 路径转换器
      • 3.4.1 `int`
      • 3.4.2 `str`
      • 3.4.3 `slug`
      • 3.4.4 `uuid`
      • 3.4.5 `path`
  • 四、模块
    • 4.1 创建模块
    • 4.2 注册模块
    • 4.3 分布式路由
  • unit02
  • 一、`DTL`
    • 1.1 什么是`DTL?`
    • 1.2 模板配置
    • 1.3 `render()`函数
  • 二、`DTL`
    • 2.1 变量
    • 2.2 标签
      • 2.2.1 `for`标签
      • 2.2.2 `if`标签
      • 2.2.3 表单
      • 2.2.4 `csrf_token`
      • 2.2.5 静态资源
        • 2.2.5.1 静态资源的配置
        • 2.2.5.2 访问静态资源
  • unit03
  • 一、`DTL`
    • 1.1 标签
      • `include`标签
      • `cycle`标签
    • 注释
    • 1.2 过滤器
      • `safe`
      • `striptags`
      • `truncatechars`
      • `floatformat`
      • `date`
      • `yesno`
      • `join`
  • 二、`Http`请求
    • 3.1 属性
      • `method`属性
      • `POST`属性
      • `GET`属性
      • 具有浏览框的表单的限制
      • `FILES`属性
    • 3.2 `QueryDict`对象
  • unit04
  • 一、`HTTP`响应
  • 二、模型
    • 2.1 概述
    • 2.2 配置
    • 2.3 创建模型
    • 2.4 数据类型
    • 2.5 数据迁移
  • 三、管理器
    • `all()`方法
    • `get()`方法
  • 四、`QuerySet`
    • `all()`方法
    • `get()`
    • `filter()`
    • `first()`
    • `last()`
    • `order_by()`
    • 查询谓语
    • `F`函数
  • unit05
  • 一、模型
    • `values()`
    • `values_list()`
    • `only()`
    • `query`
    • `Q`函数
    • `exclude()`
    • `count()`
    • `aggregate()`
    • `annotate`
  • unit 06
  • 一、`HttpRequest`对象

unit01

一、Django基础

1.1 什么是Django?

Django是一个基于Python语言的、开源的、重量级的WEB开发框架。

Django适用于开发各类WEB应用程序,包括但不限于电商网站、博客等。

Django的官网:http://www.djangoproject.com

1.2 安装与卸载

1.2.1 PythonDjango的版本

Django 版本Python 版本
3.23.6, 3.7, 3.8, 3.9, 3.10 (在 3.2.9 中就已经加入了)
4.03.8,3.9,3.10
4.13.8,3.9,3.10,3.11(4.1.3 添加)
4.23.8, 3.9, 3.10, 3.11, 3.12 (4.2.8 添加)
5.03.10、3.11、3.12

1.2.2 安装


$ pip3 install django[==version]

1.2.3 查看Django版本


$ python3 -m django --version

$ django-admin --version

1.2.4 卸载


$ pip3 uninstall django

二、Django项目

2.1 概述

Django项目由一个或多个应用程序(指模块)组成,在每个模块中有相对独立的路由、视图、模型、模板等。

2.2 创建项目


$ django-admin startproject projectname

2.3 启动项目

第一步:在命令行输入以下命令:


$ python3 manage.py runserver [[address:]port]

如:


$ python3 manage.py runserver
$ python3 manage.py runserver 8888
$ python3 manage.py runserver 0.0.0.0:8888

第二步:启动浏览器输入地址即可


Pycharm中启动Django项目

第一步:鼠标右击manage.py,然后从弹出的快捷菜单中选择Modify Run Configuration,再在Parameters文本框中输入runserver [[address:]port]

第二步:鼠标右击manage.py,然后从弹出的快捷菜单中选择Run manage

2.4 项目的目录结构


djangoBasic/,项目根目录
├── db.sqlite3,默认的sqlite3数据库文件
├── djangoBasic,内层目录 -- 包
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py,项目配置文件
│   ├── urls.py,根路由文件
│   └── wsgi.py
└── manage.py,入口文件

2.5 配置


# 项目的根目录
BASE_DIR = Path(__file__).resolve().parent.parent# 是否开启调试模式:在开发环境中需要开启调试模式,在生产环境中需要关闭调试模式
DEBUG = True# 已安装且启动的应用程序(模块)
INSTALLED_APPS = []# 已安装且启用的中间件
MIDDLEWARE = []# 项目的根路由
ROOT_URLCONF = 'djangoBasic.urls'# 模板(`Templates`)的配置
TEMPLATES = []# 数据库的配置
DATABASES = {}# 语言代码
LANGUAGE_CODE = 'zh-Hans'# 时区
TIME_ZONE = 'Asia/Shanghai'

三、URL 调度器

URL 调度器也称为URL路由,它允许程序员自由的设计URL地址

3.2 定义URL路由

第一步:在根路由文件(urls.py)中定义路由


path(router,view)

URL地址为字母、数字、下划线、短横线的组合

如:


path('hello/',????)

第二步:定义(视图)函数


def function_name(request):......

如:


def hello(request):print('Hello Django')

相对完整的示例代码如下:


# 函数
def hello(request):print('Hello,Django')# 路由
urlpatterns = [# ....#代表的是当通过 http://127.0.0.1:8000/hello/访问时,将调用hello函数path('hello/',hello),
]

运行结果如下:

在这里插入图片描述

此时产生错误的原因是:(视图)函数没有返回响应对象

Django.http包中提供了HttpResponse类,它用于完成Http响应,所以:


from django.http import HttpResponse
# 函数
def hello(request):return HttpResponse('Hello,Django')

此时的运行结果如下:

在这里插入图片描述

第三步:通过链接或表单的action来访问相关的路由

此时产生了另外的两个问题:

第一:如果来访问http://127.0.0.1:8000时将产生404 错误 – 怎么解决?

第二:现在在urls.py中既有路由又有视图函数 – 不便于管理 – 如何便捷管理?

3.2 定义首页的路由


path('',视图函数)

示例代码


from django.http import HttpResponsedef index(request):return HttpResponse('Index Page')urlpatterns = [# 首页路由path('',index),
]    

3.3 便捷管理路由及视图函数

为了便于管理视图函数,强烈建议将视图函数存储到views.py中,然后再在urls.py中引用该模块即可

urls.py的示例代码如下:


from django.contrib import admin
from django.urls import path
from . import viewsurlpatterns = [path('admin/', admin.site.urls),path('', views.index),path('hello/', views.hello),
]

views.py的示例代码如下:

from django.http import HttpResponsedef hello(request):return HttpResponse('Hello Django')def index(request):return HttpResponse('Index Page')

对于静态的路由可以直接按需要进行定义,但是对于动态的路由,如访问某一个文章时的ID,此时如何定义?

3.4 路径转换器

路径转换器主要解决动态路由的问题,如:


http://127.0.0.1:8000/user/<id>

路径转换器的基本语法:


path("<类型:参数名称>/<类型:参数名称>",视图函数)

需要注意的是:在定义视图函数时,如果路由中存在路径转换器,那么视图函数也必须存在相同名称的参数

3.4.1 int

int类型的路径转换器自动匹配正整数,类型为int,如:


path("users/<int:id>",views.userinfo),

userinfo的函数代码示例如下:


def userinfo(request,id):.......

3.4.2 str

str类型的路径转换器自动匹配字符串,/除外,类型为str,如:


path("topic/<str:topic>/",views.topic),

3.4.3 slug

slug匹配任意由字母、数字、短横线与下划线组成的字符,其类型为str,如:


path('blog/<slug:title>',views.blog),

3.4.4 uuid

UUID的格式为8-4-4-4-12的十六位进制数字组成,其类型为uuid

Pythonuuid模块


import uuid# 基于当前服务器ID和时间
uuid.uuid1()
# 基于随机数
uuid.uuid4()

3.4.5 path

path 匹配路径,包括/


path('download/<path:path>/',views.download),

组合使用的案例


path('carts/<str:username>/id/<int:id>/',views.carts),path('<str:username>/<int:id>/',views.goods),

四、模块

每个Django项目至少存在一个模块(应用程序)

4.1 创建模块


$ python3 manage.py startapp app_name

如:


$ python3 manage.py startapp users$ python3 manage.py startapp goods

4.2 注册模块

将创建的模块名称添加到配置文件的INSTALLED_APPS列表中,如:


INSTALLED_APPS = [# ...'goods','users',
]

4.3 分布式路由

所谓的分布式路由是将某个模块下以共同字符串开头的路由写在根路由文件中,不同的部分写在模块内部的urls.py中,当访问时系统将自动把两个部分的URL进行拼接。

include()函数位于django.urls模块内,其作用是将当前路由与指定包含文件的路由进行拼接


include("URLS文件")

# urls.py最简陋的样子
from django.urls import path
from . import viewsurlpatterns = [path('',views.index),
]

# views.py最简陋的样子
def index(request):......

unit02

一、DTL

1.1 什么是DTL?

DTL(Django Templates Language)Django模板语言,实际上就是将HTML页面与程序代码进行混合的技术。

1.2 模板配置


#模板配置
TEMPLATES = [{# 模板的引擎'BACKEND': 'django.template.backends.django.DjangoTemplates',# 配置模板文件的路径'DIRS': [BASE_DIR / 'templates'],# 是否查找模块下的目录'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

1.3 render()函数

render()函数位于django.shortcuts模板内:


from django.shortcuts import render

render()函数的语法结构为:


render(request,template_name,context=None)

request代表的HttpRequest 对象

template_name指要渲染的模板文件路径及名称

context指要传递到模板的数据,其类型必须为dict

二、DTL

模板文件内可以使用:注释、变量、标签等

2.1 变量


# 变量
{{ variable_name }}
# 列表或元组
{{ variable_name.index }}
# 字典
{{ variable_name.key }}
#对象属性
{{ variable_name.property }}
#对象方法
{{ varible_name.method s}}

2.2 标签

标签是指模板中进行逻辑控制的代码,如分支结构、循环结构等,标签的基本语法结构为:


{% 标签名称 %}或者{% 开始标签名称 %}
...
...
{% 结束标签名称%}

2.2.1 for标签


{% for variable in iterable %}......
{% endfor %}

{% for variable in iterable %}......
{% empty %}......
{% endfor %}

DTL中为循环提供了在其内部使用的变量:

变量描述
forloop.counter正向循环计数器,从1开始
forloop.counter0正向循环计数器,从0开始
forloop.revcounter反向循环计数器,从1开始
forloop.revcounter0反向循环计数器,从0开始
forloop.first当前循环为第一次循环时为True
forloop.last当前循环为最后一次循环时为True

2.2.2 if标签


{% if condition %}...
{% endif %}{% if condition %}...
{% else %}...
{% endif %}{% if condition %}...
{% elif condition %}...
{% elif condition %}...
{% else %}...
{% endif %}

2.2.3 表单

1.表单的action属性值为空或者省略action属性,代表表单将提交给自身

2.表单的method属性值为空或者省略method属性,代表表单的提交方式为get

2.2.4 csrf_token


{% csrf_token %}

在以post方式提交的表单内必须在使用{% csrf_token %} 产生令牌

当在表单内添加{% csrf_token %}标签后将产生个名称为csrfmiddlewaretoken的隐藏域


<input type="hidden" name="csrfmiddlewaretoken" value="7erwqas">

2.2.5 静态资源

静态资源是网站用于布局的样式文件、图片文件及脚本文件。

2.2.5.1 静态资源的配置

# 静态文件的路由
STATIC_URL = '/static/'# 静态文件的位置 
STATICFILES_DIRS = [BASE_DIR / 'static'
]
2.2.5.2 访问静态资源

第一步:通过{% load static %}标签加载static标签


{% load static %}

第二步:在模板文件中通过static标签来访问静态资源


{% static '静态文件的的路径及名称' %}

被静态文件引用的文件(如在CSS文件内引用图片),因为该静态文件没有经过模板引擎处理,所以不能使用{% static %}标签来加载 – 只能通过其相对路径实现

unit03

一、DTL

1.1 标签

include标签

include标签用于在一个模板文件中包含另外一个模板文件,语法结构为:


{% include '被包含的模板文件的位置及名称' with variable=value variable=value %}

cycle标签

当每次遇到cycle标签时都会产生一个值,第一次产生第一个值,第二个产生第二值,依次类推。当值用尽时,再次遇到该标签时,就产生第一个值。


{% cycle 'value1' 'value2' 'value3' ... %}

注释


{# 这是一个单行注释 #}{% comment %}第一行第二行
{% endcomment%}

1.2 过滤器

过滤器用于转换变量或标签参数的值,其基本语法结构为:


{{ 变量名称|过滤器:参数:参数 }}

safe

当通过变量向模板文件传递HTML内容时,在模板中将把HTML内容中的特殊符号进行替换操作,如>替换为&gt;<替换为&lt;

之所以进行替换的原因是为了防止XSS(Cross-site scripting)攻击(译为跨站脚本攻击)。举例说明:

假设在某个网站中对于某条新闻发表了评论,内容如下:

这篇新闻很好
<script>
while(true){window.alert("哈哈哈");
}
</script>

当用户发表该评论后,其内容将写入到服务器的数据库 — 不会产生任何问题

但是,如果该评论被某个用户通过浏览器进行访问时,那么其中的


<script>
while(true){window.alert("哈哈哈");
}
</script>

将被浏览器认为是JavaScript脚本 - - 并且为死循环!!!

如何解决 – 将输入的><等替换为对于HTML实体,如果此时再有用户输入以下评论:


这篇新闻很好
<script>
while(true){window.alert("哈哈哈");
}
</script>

将输入的><等替换为对于HTML实体的结果为:

这篇新闻很好&lt;script&gt;
while(true){window.alert(&quot;哈哈哈&quot;);
}
&lt;/script&gt;

Django模板中如果认为传递到模板的HTML内容为安全内容,则需要通过safe过滤器

striptags

striptags过滤器用于去掉所有的HTML标记

truncatechars

truncatechars过滤器用于截断字符串并且指定长度

floatformat

floatformat过滤器用于对浮点数进行四舍五入

date

date过滤器用于格式化日期和时间

格式描述
Y
m月,带有前导零
d日,带有前导零
H小时,带有前导零
i分钟,带有前导零
s秒,带有前导零

yesno

True,False,None(可选)的值映射到以逗号分隔的字符串

join

join过滤器使用指定的分隔符将列表成员连接成字符串

二、Http请求

当一个url被请求时,Django会自动创建HttpRequest对象,在该对象内包含的请求的元数据,然后再加载相应的视图函数,并且将HttpRequest对象作为视图函数的第一个参数


# 当前request参数代表的就是HttpRequest对象
def function_name(request):......

HttpRequest对象存在的属性除非另有说明外都是只读属性

3.1 属性

method属性

method属性用于获取HTTP的请求方式,返回结果为英文大写字母


str HttpRequest.method

POST属性

HttpRequest 对象的POST 属性将返回django.http.request.QueryDict的对象,包含HTTP POST提交的数据,其语法结构为:


QueryDict HttpRequest.POST

GET属性

HttpRequest 对象的GET属性将返回django.http.request.QueryDict的对象,包含HTTP GET提交的数据,其语法结构为:


QueryDict HttpRequest.GET

具有浏览框的表单的限制

A.表单的提交方式只能为POST

B.必须设置表单的enctype="multipart/form-data"属性


<form method="post" enctype="multipart/form-data">......
</form>

FILES属性

FILES属性返回django.utils.datastructures.MultiValueDict对象

对于上传的文件超过2.5MB 将返回TemporaryUploadedFile对象,否则返回InMemoryUploadedFile对象,它们都继承自UploadedFile对象,而UploadedFile继承自File对象,所以可以访问File对象的namesize等属性

3.2 QueryDict对象

QueryDict对象继承自django.utils.datastructures.MultlValuDict对象,MultiValue对象的方法有:

get()用于获取指定key的值,否则返回default


MultiValue.get(key,default=None)

getlist()用于获取指定key的值,否则返回default


list MultiValue.getlist(key,default=None)

keys()返回由键名组成的列表


list MultiValue.keys()

values()返回由键值组成的列表


list MultiValue.value()

items()

dict()返回由键名和键值组成的字典


dict MultiValue.dict()

unit04

一、HTTP响应

每一个视图函数必须存在一个响应对象。

render()函数返回是HttpResponse对象,它的基本原理是将传递的模板文件与字典数据进进行混合后返回一个字符串的结果,该结果带入到HttpResponse对象的参数中。

HttpReponse对象位于django.http模板内


from django.http import HttpResponse

其构造函数的结构为:


HttpResponse(content,content_type='text/html')

其中

content 代表的是响应的字符串信息

content_type 代表的响应的类型,默认为text/html

常用的响应类型有

响应类型说明
text/plain文本
text/htmlHTML
text/cssCSS
text/javascriptapplication/javascriptJS
application/jsonJSON

JsonResponse对象

JsonResponse 对象继承自HttpResponse对象,其作用是返回JSON响应,语法结构为:

#默认情况下,只能为字典对象转换为JSON格式的字符串
#对于非字典数据(列表数据)必须将safe参数设置为False
JsonResponse(data,safe=True)

二、模型

2.1 概述

模型 (Model)是Django为了构建和操纵数据库而提供的抽象层。

模型用于表示和操纵数据表及其记录。

所以首先通过MySQL客户端创建数据库,如:


CREATE DATABASE IF NOT EXISTS knowbase;SHOW DATABASES;

2.2 配置


DATABASES = {'default': {# 数据库引擎的类型'ENGINE': 'django.db.backends.mysql',# MySQL数据库服务器的地址'HOST':'127.0.0.1',# MySQL数据库服务器的端口号'PORT':3306,# MySQL数据库服务器用户的用户名'USER':'root',# MySQL数据库服务器用户的密码'PASSWORD':'123456',# MySQL数据库服务器的数据库名称'NAME': 'knowbase',}
}

2.3 创建模型

模型需要在模块下的models.py文件中进行定义,所有的模型都必须继承自django.db.models.Model类,结构如下:


class ClassName(models.Model):field_name = models.数据类型([选项[,...]])......

2.4 数据类型

数据类型描述
CharField(max_length=长度)VARCHAR
SmallIntegerField()SMALLINT
PositiveSmallIntegerField()SMALLINT UNSIGNED
IntegerField()INT
PositiveIntegerField()INT UNSIGNED
BigIntegerField()BIGINT
PositiveBigIntegerField()BIGINT UNSIGNED
BooleanFieldTINYINT(1)
FloatField(max_digits=数字总长度,decimal_places=小数点后的数字长度)FLOAT(M,D)
DecimalField(max_digits=数字总长度,decimal_places=小数点后的数字长度))DOUBLE(M,D)
TextField()LONGTEXT
DateField()DATE
TimeField()TIME
DateTimeField(auto_now_add=是否自动记录创建时间,auto_now=是否自动记录修改时间)DATETIME

2.5 数据迁移

第一步:生成移迁文件


$ python3 manage.py makemigrations

第二步:数据迁移


$ python3 manage.py migrate

add过滤器用于进行字符串的拼接,如


{{ username|add:'ABC'}}
<!--假定username变量的值为Tom,那么拼接完的结果为 TomABC -->

三、管理器

Django的模型中要实现数据表中记录的管理是通过管理器来实现的

Django为每个模型提供了一个名称为objects的管理器,它作为模型的属性进行访问


模型类.objects

如:


from .models import Bookprint(type(Book.objects))

all()方法

all()方法用于返回管理器的全部对象,其语法结构为:


QuerySet Manager.all()

get()方法

get()方法用于获取单个对象,如果没有符合条件的记录或者可以查询到多个记录都会产生异常


Object Manager.get(condition[,....])

如果以主键字段进行查找的话,可以写为


Book.objects.get(id=5)
# 或者
Book.objects.get(pk=5)

四、QuerySet

QuerySet称为查询集或者查询结果集,用于表示与管理器相关查询结果。

Queryset可以进行切片、复制及过滤等操作

all()方法

all()方法用于返回结果集中的全部对象,其语法结构为:


QuerySet QuerySet.all()

get()

get()方法用于获取单个对象,如果没有符合条件的记录或者可以查询到多个记录都会产生异常


Object QuerySet.get(condition[,...])

filter()

filter()方法用于根据指定的条件对结果集进行过滤,返回一个新的结果集


QuerySet QuerySet.filter(字段名称__查询谓语=[,...])

first()

first()方法用于返回结果集中的第一条记录


object QuerySet.first()

last()

last()方法用于返回结果集中的最后一条记录


object QuerySet.last()

order_by()

order_by()方法用于对结果集进行排序


QuerySet QuerySet.order_by('字段名称'[,....])

降序排列时,字段名称的写法为-字段名称

查询谓语

  • exact,相等(区分大小写),可以在使用时直接用=进行操作
  • iexact,相等,不区分大小写
  • gt,大于
  • gte,大于等于
  • lt,小于
  • lte,小于等于
  • in,在指定值内,字段名称__in=(value,value,vlaue,..)
  • range,区间范围同,字段名称__range=(min,max)
  • contains,包含指定的字符,区分大小写
  • icontains,包含指定的字符,不区分大小写
  • startswith,以指定字符开头,区分大小写
  • istartswith,以指定字符开头,不区分大小写
  • endswith,以指定字符结尾,区分大小写
  • iendwith,以指定字符结尾,不区分大小写

F函数


from django.db.models import F

在查询时使用到某表内的字段时,必须通过F函数将其引用


Book.objects.filter(sale_price__gte=200+F('cost_price'))

unit05

一、模型

values()

values()方法用于限制返回的字段,可迭代对象为字典


QuerySet QuerySet.values(*fields)

结果样式如:


<QuerySet [{'id': 1}, {'id': 2}]>

values_list()

values_list()方法用于限制返回的字段,可迭代对象为元组


QuerySet QuerySet.values_list(*fields)

结果样式如:


<QuerySet [(1,), (2,)]>

only()

only()方法用于限制返回的字段,可迭代对象为模型实例


QuerySet QuerySet.only(*fields)

结果样式如:


<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]>

query

query属性返回当前查询结果集对应的SQL语句


str QuerySet.query

Q函数

Q函数用于对查询表达式进行连接,然后进行逻辑运算


from django.db.models import Q

exclude()

exclude()方法返回不符合指定条件的记录


Queryset QuerySet.exclude(条件表达式)

count()

count()方法用于获取结果集包含的记录总数


int QuerySet.count()

aggregate()

聚合函数有CountMaxMinSumAvg,位于


from django.db.models import Count,Sum,Avg,Max,Min

dict QuerySet.aggregate(key=Count('field_name'))
dict QuerySet.aggregate(key=Max('field_name'))
dict QuerySet.aggregate(key=Min('field_name'))
dict QuerySet.aggregate(key=Sum('field_name'))
dict QuerySet.aggregate(key=Avg('field_name'))

annotate

aggregate()方法用于对整个Queryset进行聚合操作,而annotate()方法用于对特定的字段进行聚合


Queryset QuerySet.annotate(key=Count('field_name'))
Queryset QuerySet.annotate(key=Max('field_name'))
Queryset QuerySet.annotate(key=Min('field_name'))
Queryset QuerySet.annotate(key=Sum('field_name'))
Queryset QuerySet.annotate(key=Avg('field_name'))

unit 06

一、HttpRequest对象

path属性

path属性用于获取请求URL


str HttpRequest.path

get_full_path()方法

get_full_path()方法用于获取请求URL及查询字符串


str HttpRequest.get_full_path()

redirect() 函数

redirect()函数用于跳转到其他URL


from django.shortcuts import redirectredirect(to)

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

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

相关文章

10KM无人机高清图传通信模组,低延迟、抗干扰,飞睿智能无线MESH组网模块

随着科技的飞速发展&#xff0c;无人机技术在各个领域的应用越来越广泛。尤其在海上监测、搜索救援、货物运输等场景中&#xff0c;无人机的应用显得尤为重要。然而&#xff0c;要实现无人机在复杂海域环境中的高效通信&#xff0c;高清图传通信模组的作用不可忽视。本文将深入…

【笔记】复制Edge的网址粘贴后自动变成中文标题超链接

问题 1、从edge复制的网址粘贴直接显示网页内容名称而不是网址url。 2、复制任何网址粘贴到CSDN里面粘贴时直接转换成标题超链接&#xff08;很讨厌的功能习惯&#xff09;。 而如上两种问题不是互相影响的&#xff0c;就算设置了Edge的粘贴方式&#xff0c;复制到CSDN的文章…

来自红队大佬的经验之谈---命令执行过滤绕过-Windows篇

感谢来自老流氓大佬的投稿&#xff0c;本次文章介绍的是在windows环境下&#xff0c;过滤的“点”和“空格”等符号&#xff0c;导致在写入webshell时会受限。以下是针对该目标的绕过记录。 首先是命令执行和过滤验证&#xff0c;如下&#xff1a;​ 执行dir命令&#xff0c;…

基于JSP的二手车交易网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对二手车交易网站感兴趣或有相关开发需求&#xff0c;欢迎随时联系我。我的联系方式可以在文末找到。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#…

微服务开发与实战Day10 - Redis面试篇

一、Redis主从集群 1. 搭建主从集群 1.1 主从集群结构 单节点Redis的并发能力是有限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 如图所示&#xff0c;集群中有一个master节点、两个slave节点&#xff08;现在叫re…

机械师电脑文件丢失怎么办?6个恢复方法,希望能帮到您

机械师电脑作为高性能的计算机品牌&#xff0c;受到众多用户的青睐。然而&#xff0c;即便是品质卓越的电脑&#xff0c;也难免会遇到文件丢失的困扰。无论是由于误操作、系统故障还是硬盘损坏&#xff0c;文件丢失都可能给用户带来不小的麻烦。当您发现机械师电脑上的文件突然…

海洋经济捧出一个IPO,宁波海上鲜数字化赋能背后的喜与忧

近日&#xff0c;宁波海上鲜信息技术股份有限公司&#xff08;下称“海上鲜”&#xff09;向港交所递交上市申请&#xff0c;国泰君安国际、东兴证券&#xff08;香港&#xff09;为其联席保荐人。贝多财经获悉&#xff0c;该公司自2022年5月起便开始筹备赴港上市&#xff0c;但…

怎么把两个音频合成一个?将两个音频合成一个的四种方法

怎么把两个音频合成一个&#xff1f;在当今数字化的时代&#xff0c;音频处理已经成为我们生活中不可或缺的一部分。有时候&#xff0c;我们会希望将两段音频合成为一个&#xff0c;无论是为了制作音乐混音、创作声音效果&#xff0c;还是为了编辑播客节目或视频配音。合成音频…

怎么把网页上的接口信息导入postman

第一步 打开f12&#xff0c;右键选中需要的接口。选择copy-copy as cURL 第二步 打开postman&#xff0c;选择"Raw Text"&#xff0c; 把刚才复制的curl粘贴到空白位置&#xff0c;点击Continue - 最后的效果。导入的接口自带cookie&#xff0c;不用再输入cookie&a…

vulnhub靶机hacksudoLPE中Challenge-2

二、Challenge-2 1. ar Abusing 这个是要利用suid注意sudo也可以用&#xff0c;但是还是按照要求来 注意使用的suid自然是home文件夹 2. ash abusing 33. atobm Abusing 环境有问题&#xff0c;做不了 34. base32 Abusing 35. bash Abusing 36. cat Abusing 37. chmod Abusin…

警惕!ELSEVIER旗下1本双1区TOP被On Hold !请大家谨慎投稿

【SciencePub学术】又1本&#xff01;双1区TOP刊被On Hold &#xff01;官方现在对期刊质量的管控越来越严格了&#xff0c;被标记为On Hold后的期刊中&#xff0c;大部分的命运也是被WOS数据库剔除&#xff01;所以请大家谨慎投稿&#xff01; 《Information Sciences》作为一…

CPRI协议的理解——CPRI中的扰码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 CPRI协议的理解——CPRI中的扰码 前言8B10B线路编码下的扰码发送端接收 64B66B线路编码下的扰码带有终止控制字符的控制块格式带有起始控制字符的控制块格式数据块格式 前言 …

队列 + 宽搜(BFS)

例题一 解法&#xff1a; 算法思路&#xff1a; 层序遍历即可~ 仅需多加⼀个变量&#xff0c;⽤来记录每⼀层结点的个数就好了。 例题二 解法&#xff08;层序遍历&#xff09;&#xff1a; 算法思路&#xff1a; 在正常的层序遍历过程中&#xff0c;我们是可以把⼀层的结点…

vue代办事件案例实战练习,配有答案解析

代办事件案例 该案例&#xff0c;综合了前面所学的知识&#xff0c;列入点击事件绑定&#xff0c;双向绑定&#xff0c;v-for循环语句&#xff0c;v-model双向绑定&#xff0c;以及input标签的不同type形式。 演示代码如下&#xff1a; <template > <div id"ku…

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版 在开始参数配置之前,先执行以下脚本 python copy_config_example.py该脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。 接着,开发者可以根据自己的需求,对…

盲盒一番赏小程序开发,市场新活力

当下&#xff0c;年轻人的的消费水平在逐渐提升&#xff0c;对娱乐消费的需求也在提升&#xff0c;一番赏的出现&#xff0c;成功吸引了年轻人的关注&#xff0c;成为了年轻人娱乐休闲的主要方式&#xff0c;在商场中的一番赏店铺中&#xff0c;都能看到年轻人的身影。 一番赏…

手机录屏怎么操作?3个小技巧,轻松录屏

在数字化时代&#xff0c;手机录屏功能已逐渐成为我们日常生活和工作中不可或缺的工具。无论是为了记录游戏过程、制作教程&#xff0c;还是为了留存重要的视频通话&#xff0c;手机录屏都能发挥巨大的作用。本文将详细介绍手机录屏的3个功能、录屏小技巧等&#xff0c;帮助您更…

GD32 MCU启动后如何运行到main函数

GD32 MCU启动后如何运行到main函数入口&#xff1f;你是否也有这样的疑虑。在执行到main函数之前MCU干了哪些事情呢&#xff1f;下面为大家解答。 MCMCU上电后&#xff0c;首先会根据BOOT0和BOOT1的状态判断从主Flash/SRAM/ISP中启动&#xff0c;如果BOOT0为低电平&#xff0c…

白蚁监测装置:支持北斗定位

TH-BY2白蚁监测控制管理系统原理 采用白蚁喜欢吃的食物做诱饵&#xff0c;吸引白蚁取食&#xff0c;取食过程中触动报警装置。报警装置发出信号&#xff0c;通过物联网传输到监控系统&#xff0c;经过数据处理&#xff0c;监测结果呈现给用户。用户通知白蚁防治专业人员&#x…

高端品牌网站建设

随着互联网的快速发展&#xff0c;越来越多的企业开始意识到高端品牌网站建设对于企业发展的重要性。高端品牌网站建设不仅是企业形象展示的窗口&#xff0c;更是与消费者进行有效沟通和互动的桥梁。下面从设计、内容和用户体验三个方面&#xff0c;探讨高端品牌网站建设的重要…