【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.rhkb.cn/news/357774.html

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

相关文章

线程C++

#include <thread> #include <chrono> #include <cmath> #include <mutex> #include <iostream> using namespace std;mutex mtx; void threadCommunicat() {int ans 0;while (ans<3){mtx.lock();//上锁cout << "ans" <…

android 在线程中更新界面

在Android中&#xff0c;你不能直接从子线程中更新UI&#xff0c;因为这会导致应用崩溃。你需要使用Handler或runOnUiThread()来更新UI。 使用Handler 以下是如何使用Handler在子线程中更新UI的示例&#xff1a; 1. 创建Handler实例&#xff1a; import android.os.Bundle;…

docker搭建mongo副本集

1、mongo集群分类 MongoDB集群有4种类型&#xff0c;分别是主从复制、副本集、分片集群和混合集群。 MongoDB的主从复制是指在一个MongoDB集群中&#xff0c;一个节点&#xff08;主节点&#xff09;将数据写入并同步到其他节点&#xff08;从节点&#xff09;。主从复制提供…

数据可视化实验一:Panda数据处理及matplotlib绘图初步

目录​​​​​​​ 2024-6-17 一、请将所有含有发明家“吴峰”的发明专利的“申请日”打印出来。并将含有“吴峰”的所有发明专利条目保存到Excel中 1.1 代码实现 1.2 运行结果 二、读取文件创建城市、人口、性别比、城镇化率DataFrame对象&#xff0c;计算指标排名&…

【iOS】#include、#import、@class、@import

文章目录 #include#importclassimport总结 #include #include是c\c中的预处理器指令&#xff0c;用于包含头文件的内容 但是使用#include可能会出现重复包含文件的问题&#xff0c;因此需要使用&#xff08;#ifndef/#define/#endif&#xff09;。 #import //导入系统头文件…

学习C++第二天

1.缺省参数 缺省参数的概念&#xff1a; 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void show(int a 10) {cout << a << endl; }int main() {sho…

FPGA学习网站推荐

FPGA学习网站推荐 本文首发于公众号&#xff1a;FPGA开源工坊 引言 FPGA的学习主要分为以下两部分 语法领域内知识 做FPGA开发肯定要首先去学习相应的编程语言&#xff0c;FPGA开发目前在国内采用最多的就是使用Verilog做开发&#xff0c;其次还有一些遗留下来的项目会采用…

构建未来应用的核心,云原生技术栈解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、云原生技术栈 1、容器和容器编排 1.1 Docker 1.2 Kubernete…

如何配置node.js环境

文章目录 step1. 下载node.js安装包step2. 创建node_global, node_cache文件夹step3.配置node环境变量step3. cmd窗口检查安装的node和npm版本号step4. 设置缓存路径\全局安装路径\下载镜像step5. 测试配置的nodejs环境 step1. 下载node.js安装包 下载地址&#xff1a;node.js…

电子杂志制作的必备软件:轻松提升制作效率

​电子杂志作为一种新型的媒体形式&#xff0c;具有互动性强、内容丰富、传播范围广等特点。随着互联网的普及&#xff0c;越来越多的企业和个人开始关注和投入电子杂志的制作。然而&#xff0c;电子杂志的制作过程往往复杂繁琐&#xff0c;需要付出大量的时间和精力。为了提高…

macbook配置adb环境和用adb操作安卓手机

&#xff08;参考&#xff1a;ADB工具包的安装与使用_adb工具箱-CSDN博客&#xff09; 第一步&#xff1a;从Android开发者网站下载Android SDK&#xff08;软件开发工具包&#xff09;。下载地址为&#xff1a; 第二步&#xff1a;解压下载的SDK压缩文件到某个目录中。 进入解…

【Python机器学习实战】 | 基于线性回归以及支持向量机对汽车MPG与自重进行回归预测

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

番外篇 | 基于YOLOv5-RCS的明火烟雾检测 | 源于RCS-YOLO

前言:Hello大家好,我是小哥谈。RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文就给大家详细介绍如何将RCS-YOLO…

Validation校验

文章目录 Validation校验作用依赖坐标UserController接收客户端注册用户请求的方法请求参数封装实体User的结构校验分组 Validation校验 作用 服务端接收前端传递的请求从参数的时候&#xff0c;可以对请求参数进行自动校验。 场景&#xff1a;通过postman向服务端发送一个注…

【React】使用Token做路由权限控制

在components/AuthRoute/index.js中 import { getToken } from /utils import { Navigate } from react-router-domconst AuthRoute ({ children }) > {const isToken getToken()if (isToken) {return <>{children}</>} else {return <Navigate to"/…

三十八篇:架构大师之路:探索软件设计的无限可能

架构大师之路&#xff1a;探索软件设计的无限可能 1. 引言&#xff1a;架构的艺术与科学 在软件工程的广阔天地中&#xff0c;系统架构不仅是设计的骨架&#xff0c;更是灵魂所在。它如同建筑师手中的蓝图&#xff0c;决定了系统的结构、性能、可维护性以及未来的扩展性。本节…

个性化光标和动态壁纸

光标 进入这个宝藏网页至美化 至美化 进入鼠标页面&#xff0c;选择自己喜欢的鼠标&#xff0c;进入相关页面 分为两种&#xff0c;那么热爱有钱的UU可以选择高清版 像我这种没钱的孩子或者觉得试用版够用的就使用上面的 点击下载 进入自己的文件夹&#xff0c;解压成功之…

深度学习11-13

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

英伟达下一代DLSS或利用人工智能

英伟达的黄仁勋在2024年Computex展会上的问答环节中&#xff0c;提前透露了公司未来几代深度学习超采样&#xff08;DLSS&#xff09;技术的发展方向。在回答有关DLSS的问题时&#xff0c;黄仁勋表示&#xff0c;未来我们将看到通过纯粹的人工智能生成的纹理和对象。他还提到&a…

【React】Axios请求头注入token

业务背景: Token作为用户的数据标识&#xff0c;在接口层面起到了接口权限控制的作用&#xff0c;也就是说后端有很多接口都需要通过查看当前请求头信息中是否含有token数据&#xff0c;来决定是否正常返回数据 // 添加请求拦截器 request.interceptors.request.use(config …