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

【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)

相关文章:

【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.…...

红黑树(数据结构篇)

数据结构之红黑树 红黑树(RB-tree) 概念&#xff1a; 红黑树是AVL树的变种&#xff0c;它是每一个节点或者着成红色&#xff0c;或者着成黑色的一棵二叉查找树。对红黑树的操作在最坏情形下花费O(logN)时间&#xff0c;它的插入操作使用的是非递归形式实现红黑树的高度最多是…...

高级视频编码器性能对比(H265、VP9、AV1)

1、背景介绍 目前在视频编解码器中&#xff0c;H264已经成为绝对的主流&#xff0c;被大部分设备、浏览器所支持。虽然有更先进的编码器推出&#xff0c;但是受限于推广速度和设备支持成本&#xff0c;一直未能成为主流。 今年公司目标是持续降本增效&#xff0c;现在将”屠刀…...

示例:WPF中DataGrid简单设置合并列头

一、目的&#xff1a;应用DataGridTemplateColumn列模板&#xff0c;去拆分列头和单元格布局的方式设置列头合并样式 二、实现 效果如下 三、环境 VS2022 四、示例 应用DataGridTemplateColumn自定义列头信息和单元格信息 <DataGrid AutoGenerateColumns"False"…...

Matlab图像处理——细胞图像的分割和计数显示

一. 项目介绍 使用MATLAB编写的细胞图像分割及计数系统&#xff0c;实现了对图像内细胞的计数&#xff0c;以及对每个细胞周长和面积的测量&#xff0c;并分别展示了分割后的每个细胞的图像。实验步骤共分为图像预处理、图像预分割、空洞填充、黏连细胞分割、细胞个数统计、细胞…...

六爻排盘神机

选修课留了3000字的论文......确实&#xff0c;削微有那么一点小困难…… 但是&#xff0c;倘若我拿出已经占了6419个字符的 “六爻排盘神机” &#xff0c;阁下…应该…不会…骂我吧 且看&#xff0c;六爻排盘神机&#xff01; import random import datetime from lunarcale…...

【ARMv8/v9 GIC 系列 2.1 -- GIC SPI 中断的 pending 和 clear pending 配置】

文章目录 GIC Pending 和 Clear PendingGICD_ISPENDR<n>GICD_ICPENDR<n>参数<n>编号解释使用举例设置中断ID 100为挂起状态清除中断ID 100的挂起状态 代码实现小结 GIC Pending 和 Clear Pending 在ARMv8体系结构中&#xff0c;GICD_ISPENDR<n> 和 GI…...

SpringBoot集成logback初始化源码解析(部分)

一.SpringBoot配置扩展点 SpringBoot日志模块使用监听的方式进行初始化&#xff0c;在SpringBoot项目启动后&#xff0c;会通知日志监听器 在日志监听器中ApplicationStartingEvent事件用来确定到底使用哪个日志系统&#xff0c;logback log4j等 在日志监听器中ApplicationEn…...

【Linux工具】yum软件包管理器与Vim编辑器的高效运用

目录 Linux 软件包管理器 YUM 什么是软件包 安装工具 rzsz 及注意事项 查看软件包 安装和卸载软件 安装软件 卸载软件 Linux 开发工具 编辑器 - Vim 使用 ​编辑 Vim 与 Vi 的区别 Vim 的基本概念 三种模式 Vim 的基本操作 操作尝试&#xff1a; Vim 命令集解释…...

Matlab数学建模实战应用:案例4 - 图像处理

目录 前言 一、图像处理基础 二、Matlab图像处理工具箱 三、案例&#xff1a;图像锐化、去噪和分割 步骤 1&#xff1a;读取和显示图像 步骤 2&#xff1a;图像锐化 步骤 3&#xff1a;图像去噪 步骤 4&#xff1a;图像分割 完整代码示例 四、实际应用 实例总结 总…...

Studying-代码随想录训练营day15| 222.完全二叉树的节点个数、110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

第十五天&#xff0c;二叉树part03&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 257.完全二叉树的节点个数 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和 总结 257.完全二叉树的节点个数 文档讲解&#xff1a;代码随想录完全二叉树的节点个数 视频讲解…...

Python 基础:异常

目录 一、异常概念二、处理异常2.1 抛出异常2.2 使用 try-except 代码块2.3 使用 try-except-else 代码块2.4 静默失败 三、总结 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 本文参考&#xff1a;《Python编程&a…...

XML 应用程序

XML 应用程序 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。它是一种自我描述的语言&#xff0c;允许用户定义自己的标签和文档结构。XML广泛应用于各种应用程序中&#xff0c;包括网站开发、数据交换、文档管理等。本文将探讨XML的一些主要…...

SprringCloud Gateway动态添加路由不重启

文章目录 前言&#xff1a;一、动态路由必要性二、SpringCloud Gateway路由加载过程RouteDefinitionLocator接口PropertiesRouteDefinitionLocator类DiscoveryClientRouteDefinitionLocatorInMemoryRouteDefinitionRepositoryCompositeRouteDefinitionLocator类CachingRouteDef…...

Windows安装mysql

首先去官网下载社区版本的mysql&#xff08;如果连不上&#xff0c;挂梯子&#xff09; https://www.mysql.com/downloads/ 2. 去配置环境变量path 3. 在cmd里面初始化数据库&#xff08;在搜索框输入cmd&#xff0c;或者在资源管理器下搜索烂输入cmd回车就行&#xff09; my…...

chatgpt: linux 下用纯c 编写ui

在Linux下用纯C语言编写用户界面&#xff08;UI&#xff09;&#xff0c;通常会使用GTK或Xlib。GTK是一个更高级的库&#xff0c;提供了丰富的控件和功能&#xff0c;而Xlib则是一个更底层的库&#xff0c;提供了直接操作X Window系统的功能。 下面是一个使用GTK在Linux上创建…...

Java十六进制Dump打印数据

代码 package test;import java.io.IOException;import sun.misc.HexDumpEncoder;@SuppressWarnings("restriction")...

某棋牌渗透测试

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、信息收集 这里通过fofa进行收集&#xff0c;语法为&#xff1a;body某棋牌 && titlexxx 图1-1 fofa资产收集 …...

JAVA面试(六)

缓存 MemcachedredisRedis常见数据类型和使用Redis缓存持久化RDB-快照AOF-追加文件 Redis数据过期机制惰性删除定期删除Redis缓存淘汰策略&#xff08;8种&#xff09;算法LRU &#xff08;Least Recently Used&#xff09;&#xff1a;最近最少使用LFU&#xff08;Least Frequ…...

【C语言】手写学生管理系统丨附源码+教程

最近感觉大家好多在忙C语言课设~ 我来贡献一下&#xff0c;如果对你有帮助的话谢谢大家的点赞收藏喔&#xff01; 1. 项目分析 小白的神级项目&#xff0c;99%的程序员&#xff0c;都做过这个项目&#xff01; 掌握这个项目&#xff0c;就基本掌握 C 语言了&#xff01; 跳…...

流媒体传输协议HTTP-FLV、WebSocket-FLV、HTTP-TS 和 WebSocket-TS的详细介绍、应用场景及对比

一、前言 HTTP-FLV、WS-FLV、HTTP-TS 和 WS-TS 是针对 FLV 和 TS 格式视频流的不同传输方式。它们通过不同的协议实现视频流的传输&#xff0c;以满足不同的应用场景和需求。接下来我们对这些流媒体传输协议进行剖析。 二、传输协议 1、HTTP-FLV 介绍&#xff1a;基于 HTTP…...

【机器学习】线性回归:从基础到实践的深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 线性回归&#xff1a;从基础到实践的深度解析引言一、线性回归基础1.1 定义与目…...

短视频开源项目MoneyPrinterTurbo:AI副业搞起来,视频制作更轻松!

目录 引言一、MoneyPrinterTurbo简介二、MoneyPrinterTurbo的核心功能三、MoneyPrinterTurbo的未来发展四、MoneyPrinterTurbo与AI副业五、部署实践1、克隆代码2、创建虚拟环境3、安装依赖4、安装好 ImageMagick5、端口映射6、启动Web界面7、模型配置8、填写主题9、视频生成10、…...

【JAVA】SpringBoot + skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上

【JAVA】SpringBoot skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上 1.下载SkyWalking APM https://skywalking.apache.org/downloads/ jdk8 不支持 SkyWalking APM 9.3.0以上版本&#xff0c;所以这里我们下载 9.3.0版本 2.下载 Java Agent …...

[xmake]构建静态库和动态库

xmake 静态库和动态库 在xmake中创建静态库和动态库的方法非常相似。以下是创建静态库和动态库的基本步骤&#xff1a; 创建xmake工程文件&#xff08;xmake.lua&#xff09;。 配置工程属性&#xff0c;包括工程名、版本等。 添加源代码文件到工程中。 设置是创建静态库还…...

功能测试 之 单模块测试----轮播图、登录、注册

单功能怎么测&#xff1f; 需求分析 拆解测试点 编写用例 1.轮播图 &#xff08;1&#xff09;需求分析 位置&#xff1a;后台--页面--广告管理---广告列表(搜索index页面增加广告位2) 操作完成后需要点击admin---更新缓存,前台页面刷新生效 &#xff08;2&#xff09;拆解…...

MyBatis-PageHelper 源码解说

归档 GitHub: MyBatis-PageHelper-源码解说 总说明 源码仓库&#xff1a; https://github.com/pagehelper/Mybatis-PageHelper克隆&#xff1a;git clone https://github.com/pagehelper/Mybatis-PageHelper.git切分支&#xff08;tag&#xff09;&#xff1a;git checkout m…...

基于uni-app和图鸟UI的智慧校园圈子小程序开发实践

摘要&#xff1a; 随着教育信息化和“互联网教育”的快速发展&#xff0c;智慧校园建设已成为推动校园管理现代化、提高教育教学质量的重要手段。本文介绍了基于uni-app和图鸟UI开发的智慧校园圈子小程序&#xff0c;旨在通过一站式服务、个性化定制、数据互通和安全可靠等特点…...

STM32 keil工程移植到Visual Studio Code环境中编译

1、GCC Vscode 搭建 STM32 开发环境 GCC Vscode 搭建 STM32 开发环境&#xff08;一&#xff09;- 环境部署 - 知乎 (zhihu.com) 2、在原有keil工程下找到原本CUBEMX生成的.ioc工程文件 3、将.ioc文件复制一个新的文件夹下双击打开工程&#xff0c;将IDE选为Makefile&…...

细说CountDownLatch

CountDownLatch是Java中提供的一个同步辅助类&#xff0c;它允许一个或多个线程等待其他线程完成操作。在面试中&#xff0c;面试官经常会询问候选人是否在实际项目中使用过CountDownLatch&#xff0c;以评估其对多线程编程和并发控制的理解和经验。本文将详细介绍CountDownLat…...

如何c2c网站建设/正规的推文平台

知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取 #error 和 #line 使用分析 #error 用于生成一个编译错误消息 用法: #error message (message不需要使用双引号) #error 编译指示字用于自定义程序…...

邯郸哪儿能做网站/种子资源

具体实践步骤: 1) 安装vCenter Server 5.0以及vSphere Client相关内容 在此省略. 2) 在运行vCenter Server主机上安装Auto Deploy 服务器: 首先加载安装vCenter5.0的光盘镜像(Auto Deploy服务也在此光盘) ,弹出安装界面 如图1: 选择安装目录并设置存储数据库大小 如图2: 输入vC…...

泉州有那些网站建设公司/网站关键词优化多少钱

今天网友问ytkah&#xff1a;wordpress不同分类如何调用不同的模板。我们知道in_category() 函数可以通过分类别名或ID判断当前文章所属的分类&#xff0c;而且可以直接在循环&#xff08;Loop&#xff09;内部和外部使用。首先创建一个single.php文件&#xff0c;复制下面的代…...

wordpress加载完再显示图片/推广网站平台

USART/UART串口通信 1、USART介绍 通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。 USART提供了一种灵活的方式,可以与需要行业标准 NRZ 异步串行数据格式的外部设备进行…...

php企业网站demo/2024年新闻摘抄十条

酷派5891Q的usb驱动有没有人需要的&#xff0c;和其它的酷派手机是一样的&#xff0c;因为手机在用数据线连接电脑的时候都是需要驱动的&#xff0c;说的这个驱动是安装在电脑上&#xff0c;很多人下载下来驱动之后不知道怎么进行安装&#xff0c;如果没有驱动的话&#xff0c;…...

用dede做网站后台/比优化更好的词是

最近几天一直在啃cocos2d&#xff0c;消化了不少东西&#xff0c;基本可以有些把握下手写公司的游戏了&#xff1b;那么今天就把一些重点的拿出来分享下经验&#xff0c;给新童鞋们作为参考&#xff1b;这篇就来详细介绍下cocos2d对用户触屏的监听事件进行下分析&#xff08;co…...