Nmap入门到高级【第十一章】
预计更新
第一章. Python 简介
- Python 简介和历史
- Python 特点和优势
- 安装 Python
第二章. 变量和数据类型
- 变量和标识符
- 基本数据类型:数字、字符串、布尔值等
- 字符串操作
- 列表、元组和字典
第三章. 控制语句和函数
- 分支结构:if/else 语句
- 循环结构:for 和 while 循环
- 函数
- 参数传递与返回值
- Lambda 表达式
第四章. 模块和文件 IO
- 模块的概念
- 导入模块
- 文件 IO
- 序列化和反序列化
第五章. 异常处理
- 异常简介
- try/except 语句
- 自定义异常
第六章. 面向对象编程
- 类和对象
- 继承和多态
- 属性和方法
- 抽象类和接口
第七章. 正则表达式
- 正则表达式概述
- 匹配和搜索
- 替换和分割
第八章. 并发编程
- 多线程
- 多进程
- 协程和异步编程
第九章. 数据库编程
- 关系型数据库介绍
- 使用 SQLite 数据库
- 使用 MySQL 数据库
- 使用 PostgreSQL 数据库
第十章. 网络编程
- Socket 编程简介
- TCP Socket 编程
- UDP Socket 编程
- HTTP 编程
第十一章. Web 开发框架 Flask
- Flask 简介
- 安装 Flask
- 路由和视图函数
- 模板和静态文件
第十二章. 数据分析和科学计算
- NumPy 基础
- Pandas 基础
- Matplotlib 基础
第十三章 机器学习入门
- 机器学习概述
- 监督学习和非监督学习
- Scikit-Learn 简介
- 利用 Scikit-Learn 进行数据预处理和模型训练
第十四章. 自然语言处理
- 自然语言处理概述
- 中文分词和处理
- 文本分类和情感分析
第十五章. 游戏开发与 Pygame
- Pygame 简介
- Pygame 基础
- 开发一个简单的游戏
第十一章. Web 开发框架 Flask- Flask 简介- 安装 Flask- 路由和视图函数- 模板和静态文件
Flask 简介
Flask是一个基于Python的轻量级Web框架,其目标是使得构建Web应用程序更加容易。Flask使用简单,灵活性高,适合快速开发原型和小型Web应用程序。
本文将介绍Flask的基础知识、特点、组成部分、路由机制、模板引擎、表单处理、扩展等相关内容。
- Flask的基础知识
Flask是一个基于Python的Web框架,由Armin Ronacher在2010年创建。Flask使用Werkzeug和Jinja2这两个Python库构建,可以轻松地创建Web应用程序。
Flask具有如下特点:
- 轻量级:Flask核心只包含了最基本的功能,不像许多其他Web框架那样过于臃肿。
- 易用性:Flask的API简洁并且易于理解,上手容易。
- 可扩展性:Flask提供了大量的扩展,能够满足各种需求。
- Flask的组成部分
Flask由两个核心组件组成:Werkzeug和Jinja2。
Werkzeug是一个WSGI(Web服务器网关接口)工具包,用于处理HTTP请求和响应、路由分发、错误处理等。Werkzeug提供了一些有用的类和函数,例如Request、Response、redirect()、abort()等。
Jinja2是一个现代的、设计优雅的模板引擎,用于生成HTML页面和其他文本内容。Jinja2支持模板继承、条件语句、循环语句、宏定义等高级功能。
除了核心组件之外,Flask还提供了许多扩展,如数据库集成、表单验证、用户认证等。
- Flask的路由机制
在Flask中,路由(Route)是一种将URL映射到视图函数的机制。路由使用装饰器来实现,例如:
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'
在上面的代码中,使用@app.route()
装饰器将URL“/”与视图函数hello_world()
绑定。当用户请求该URL时,Flask会调用hello_world()
函数并返回响应数据。
路由也支持动态参数,例如:
from flask import Flaskapp = Flask(__name__)@app.route('/user/<username>')
def show_user_profile(username):return 'User %s' % username@app.route('/post/<int:post_id>')
def show_post(post_id):return 'Post %d' % post_id
在上面的代码中,通过在URL中添加<username>
或<int:post_id>
来指定动态参数。这些参数会自动传递给相应的视图函数。
- Flask的模板引擎
在Flask中,可以使用Jinja2模板引擎来生成HTML页面和其他文本内容。Jinja2模板使用特殊语法包含变量、控制结构和函数调用,以便生成动态内容。
下面是一个示例程序,用于使用Jinja2模板引擎生成HTML页面:
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def hello():return render_template('hello.html', name='World')
在上面的程序中,使用render_template()
方法渲染名为hello.html
的模板,并将name
参数传递给模板。可以在模板中使用{{}}
语法引用该参数。
例如,以下代码展示了如何在模板中使用控制结构和继承功能:
{% extends "base.html" %}{% block content %}{% if name %}<h1>Hello, {{ name }}!</h1>{% else %}<h1 > Hello, World!</h1>{% endif %}
{% endblock %}
在上面的模板中,使用{% extends "base.html" %}
指定模板继承关系。模板会继承一个名为base.html
的基础模板,并覆盖其中的一个名为content
的块。
- Flask的表单处理
在Web应用程序中,表单是用户与应用之间交互的一种重要方式。Flask提供了许多方法来处理表单数据,包括GET和POST请求、表单验证、文件上传等。
下面是一个示例程序,用于处理用户提交的表单数据:
from flask import Flask, render_template, requestapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])
def index():if request.method == 'POST':name = request.form['name']email = request.form['email']message = request.form['message']return f'Thank you for your message, {name}!'else:return render_template('index.html')
在上面的程序中,使用request.form
属性获取表单数据,并将其保存到变量中。可以在视图函数中进行数据验证、处理等操作,并返回响应数据。
- Flask的扩展
除了核心组件之外,Flask还提供了许多扩展,以满足不同需求。以下列举了几个常用的扩展:
- Flask-WTF:用于处理Web表单和验证数据。
- Flask-SQLAlchemy:用于数据库集成,支持多种类型的数据库。
- Flask-Login:用于用户认证和会话管理。
- Flask-Mail:用于发送电子邮件。
这些扩展均可通过pip install
命令安装。在使用时,需要在Flask应用程序中导入并初始化相应的扩展。
- 总结
Flask是一个灵活、易用、可扩展的Python Web框架,提供了路由机制、模板引擎、表单处理、扩展等功能。Flask使用简单,适合快速开发原型和小型Web应用程序。在实际开发中,还需要注意性能、安全性、可维护性等方面的问题,保证应用程序的质量和稳定性。
安装 Flask
安装Flask是开发基于Flask的Web应用程序的第一步。本文将介绍如何在不同操作系统和Python环境下安装Flask,以及常见问题的解决方法。
- 在Windows上安装Flask
在Windows上安装Flask需要先安装Python。可以从官网(https://www.python.org/downloads/windows/)下载适用于Windows的Python安装程序,并按照提示进行安装。在安装完成后,可以通过以下命令验证Python是否已经正确安装:
python --version
接着,可以使用pip工具来安装Flask。pip是Python包管理器,用于下载、安装和管理Python模块。
在Windows上,可以打开命令提示符或PowerShell窗口,执行以下命令来安装Flask:
pip install Flask
该命令会自动下载并安装最新版本的Flask。如果需要安装特定版本的Flask,则可以指定版本号,例如:
pip install Flask==1.1.2
- 在MacOS上安装Flask
在MacOS上安装Flask也需要先安装Python。可以通过Homebrew、MacPorts或官方网站等方式安装Python。
安装完成后,可以通过以下命令验证Python是否已经正确安装:
python3 --version
接着,使用pip工具来安装Flask。可以在终端中执行以下命令来安装Flask:
pip3 install Flask
该命令会自动下载并安装最新版本的Flask。如果需要安装特定版本的Flask,则可以指定版本号,例如:
pip3 install Flask==1.1.2
- 在Linux上安装Flask
在Linux上安装Flask也需要先安装Python。可以使用Linux发行版提供的软件包管理器来安装Python。例如,在Ubuntu上可以执行以下命令来安装Python:
sudo apt-get update
sudo apt-get install python3
安装完成后,可以通过以下命令验证Python是否已经正确安装:
python3 --version
接着,使用pip工具来安装Flask。可以在终端中执行以下命令来安装Flask:
sudo pip3 install Flask
该命令会自动下载并安装最新版本的Flask。如果需要安装特定版本的Flask,则可以指定版本号,例如:
sudo pip3 install Flask==1.1.2
- 在虚拟环境中安装Flask
为了避免不同应用程序之间的依赖冲突,推荐在虚拟环境中安装Flask。虚拟环境使得每个应用程序都有自己独立的Python环境和依赖库。
虚拟环境可以使用venv、virtualenv或conda等工具创建。这里以venv为例,介绍如何在虚拟环境中安装Flask。
首先,在终端中进入项目目录,执行以下命令创建虚拟环境:
python3 -m venv env
该命令会在当前目录下创建名为“env”的虚拟环境。
接着,激活虚拟环境:
source env/bin/activate
虚拟环境激活后,可以使用pip安装Flask:
pip install Flask
此时,Flask会被安装在虚拟环境的lib/python3.x/site-packages目录中。
- 常见问题及解决方法
在安装Flask过程中,可能会遇到一些常见问题。下面列举了几个常见问题及其解决方法。
- pip无法安装Flask
如果pip无法安装Flask,有以下几种可能的原因:
- Python版本不兼容:Flask可能需要特定版本的Python才能正常运行。可以在Flask官方文档中查看所需的Python版本,并安装相应版本的Python。
网络问题:如果网络连接不稳定或速度较慢,pip无法成功下载Flask。可以尝试切换到其他网络环境,或使用国内的镜像源来加速下载。例如,在中国大陆可以使用阿里云、清华大学等镜像源。
权限问题:如果没有足够的权限进行安装,pip可能会报错。可以尝试使用sudo或管理员权限来运行pip。例如,在Linux上可以使用以下命令:
sudo pip3 install Flask
- Flask无法运行
如果Flask安装完成后无法正常运行,有以下几种可能的原因:
- 依赖库未安装:Flask可能需要一些依赖库才能正常运行。可以查看Flask官方文档中的依赖列表,并安装缺失的依赖库。- 环境变量未设置:如果Flask安装在非默认路径下,可能需要将其添加到系统的环境变量中。例如,在Windows上可以在“高级系统设置”中添加PYTHONPATH环境变量。- 路径错误:如果代码中指定了错误的文件路径,Flask可能无法找到对应的文件。可以检查代码中的路径是否正确。
- 总结
在本文中,我们介绍了在不同操作系统和Python环境下安装Flask的方法。无论是在Windows、MacOS还是Linux上,都可以使用pip工具来安装Flask。为了避免依赖冲突,建议在虚拟环境中安装Flask。在安装过程中,可能会遇到一些常见问题,需要仔细检查并尝试解决。通过正确地安装和配置Flask,可以快速开发Web应用程序,并实现各种功能,如路由、模板引擎、表单处理、扩展等。
路由和视图函数
Flask是一个轻量级的Web框架,它的设计理念是让开发者可以快速地构建Web应用程序。其中最重要的组成部分之一就是路由和视图函数。
本文将深入探讨Flask中路由和视图函数的概念、使用方法以及常见问题和解决方案。
- 什么是路由和视图函数?
在Web应用程序中,客户端向服务器发送请求时需要指定请求的URL地址。路由就是用于将这些请求映射到相应的处理程序的机制。在Flask中,路由是通过装饰器实现的。
视图函数是处理请求的Python函数。当用户访问某个URL时,Flask会找到与之匹配的路由,并调用对应的视图函数来处理请求。视图函数通常返回一个响应对象,告诉浏览器如何显示页面或其他内容。
例如,下面是一个简单的Flask应用程序,包含一个路由和一个视图函数:
from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Hello, World!'
在上面的代码中,使用了@app.route('/')
装饰器指定了根路径“/”对应的路由。当用户访问该URL时,Flask会调用index()
函数并返回字符串“Hello, World!”作为响应。
- 路由参数
除了根路径“/”外,Flask还支持带有参数的路由。例如,在Web应用程序中,通常会有一个页面用于显示用户信息,其URL可能类似于“/users/123”,其中“123”就是用户的ID。
在Flask中,可以使用尖括号来指定路由参数。例如:
@app.route('/users/<int:user_id>')
def show_user(user_id):return f'This is the page for user {user_id}.'
在上面的代码中,使用了<int:user_id>
指定了一个整数类型的路由参数。当用户访问类似“/users/123”的URL时,Flask会将“123”作为参数传递给show_user()
函数,并返回相应的页面。
除了整数类型之外,还可以使用字符串、浮点数等类型的路由参数。例如:
@app.route('/users/<string:username>')
def show_username(username):return f'This is the page for user {username}.'
在上面的代码中,使用了<string:username>
指定了一个字符串类型的路由参数。当用户访问类似“/users/john”的URL时,Flask会将“john”作为参数传递给show_username()
函数,并返回相应的页面。
- HTTP方法
HTTP协议定义了几种不同的请求方法,包括GET、POST、PUT、DELETE等。在Web应用程序中,我们需要根据请求方法来执行不同的操作。
在Flask中,可以使用methods
参数指定支持的请求方法。例如:
@app.route('/users/<int:user_id>', methods=['GET', 'POST'])
def handle_user(user_id):if request.method == 'GET':# 处理GET请求elif request.method == 'POST':# 处理POST请求
在上面的代码中,使用了methods=['GET', 'POST']
指定了支持的请求方法。当用户发送GET请求时,Flask会调用handle_user()
函数并传递相应的参数;当用户发送POST请求时,Flask也会调用handle_user()
函数,并执行其他操作。
- 路由顺序
在定义路由时,需要注意路由顺序。如果路由的顺序不正确,可能会导致某些路由无法正常工作。
例如,下面的代码定义了两个路由:
@app.route('/users/<int:user_id>')
def show_user(user_id):return f'This is the page for user {user_id}.'@app.route('/users/new')
def new_user():return 'This is the page for creating a new user.'
在上面的代码中,第一个路由使用了带有参数的URL模式,用于显示特定用户的信息;第二个路由用于创建新用户。如果两个路由的顺序颠倒,可能会导致无法正确处理请求。
例如,当用户访问类似“/users/new”的URL时,Flask会先匹配第一个路由,并将“new”作为user_id
传递给show_user()
函数,导致程序逻辑错误。因此,需要确保路由的顺序正确,以避免这种问题。
- URL构建
在Flask中,可以使用url_for()
函数来生成对应于指定视图函数的URL。这种方法可以减少硬编码URL的错误和维护成本,并支持动态路由参数。
url_for()
函数接受视图函数的名称作为参数,并返回对应的URL。例如:
from flask import Flask, url_forapp = Flask(__name__)@app.route('/')
def index():return f'The URL for this page is {url_for("index")}'@app.route('/users/<int:user_id>')
def show_user(user_id):return f'The URL for user {user_id} is {url_for("show_user", user_id=user_id)}'
在上面的代码中,使用了url_for()
函数来生成根路径和带参数的URL。当用户访问相应的URL时,Flask会自动调用相应的视图函数并返回响应。
- 路由重定向
在一些情况下,需要将用户重定向到其他页面。例如,在用户未登录时访问受保护的页面,可以将其重定向到登录页面。
在Flask中,可以使用redirect()
函数进行路由重定向。例如:
from flask import Flask, redirect, url_forapp = Flask(__name__)@app.route('/')
def index():return redirect(url_for('login'))@app.route('/login')
def login():return 'This is the login page.'
在上面的代码中,当用户访问根路径“/”时,程序将使用redirect()
函数将其重定向到登录页面。url_for()
函数用于生成登录页面的URL。
- 使用Blueprint组织路由
随着Web应用程序的规模增长,路由数量也会不断增多。为了更好地组织和管理路由,可以使用Blueprint将相关的路由组织在一起。
在Flask中,Blueprint是一种组织路由的方式。它可以将多个路由组合成一个单独的模块,并允许在应用程序中注册多个蓝图。
例如,下面的代码定义了一个名为users
的蓝图,包含了两个路由:
from flask import Blueprintusers_bp = Blueprint('users', __name__)@users_bp.route('/<int:user_id>')
def show_user(user_id):return f'This is the page for user {user_id}.'@users_bp.route('/new')
def new_user():return 'This is the page for creating a new user.'
在上面的代码中,使用了Blueprint()
函数创建了一个名为users_bp
的蓝图,并定义了两个路由。当用户访问类似“/users/123”的URL时,Flask会将请求转发给users_bp
蓝图中相应的路由处理函数。
要将蓝图注册到应用程序中,可以使用app.register_blueprint()
方法。例如:
from flask import Flaskapp = Flask(__name__)
app.register_blueprint(users_bp, url_prefix='/users')
在上面的代码中,使用了register_blueprint()
方法将users_bp
蓝图注册到应用程序中,并指定了前缀“/users”。这样,在访问属于users_bp
蓝图的路由时,就需要在URL中加上前缀“/users”。
- 常见问题和解决方案
在使用Flask的路由和视图函数时,可能会遇到一些常见问题。下面列出了一些常见问题和相应的解决方案。
- 404错误
当用户访问不存在的URL时,Flask会返回404错误。为了更好地处理404错误,可以使用@app.errorhandler(404)
装饰器定义一个专门的错误处理函数。例如:
from flask import Flask, render_templateapp = Flask(__name__)@app.errorhandler(404)
def page_not_found(error):return render_template('404.html'), 404
在上面的代码中,定义了一个名为page_not_found()
的错误处理函数,并将其与404错误关联起来。当用户访问不存在的URL时,Flask会调用该函数并返回相应的页面。
- URL构建失败
在使用url_for()
函数生成URL时,可能会出现构建失败的情况。这通常是因为未正确指定视图函数名称或路由参数。
为了避免这种问题,建议在编写路由和视图函数时尽量规范化命名。另外,在使用url_for()
函数时,尽量使用关键字参数指定路由参数,而不是直接传递参数值。例如:
# 不推荐做法
url_for('show_user', 123)# 推荐做法
url_for('show_user', user_id=123)
- 路由重复
在定义路由时,需要确保不会出现重复的路由。如果出现重复路由,可能会导致某些路由无法正常工作。
为了避免这种问题,建议使用不同的URL模式和HTTP方法来区分不同的路由。另外,在使用蓝图组织路由时,也需要注意路由名称的唯一性。
- 总结
路由和视图函数是Flask中最核心的组成部分之一。通过合理地设计路由和视图函数,可以快速构建Web应用程序,并实现各种功能,如动态路由、请求处理、页面渲染、路由重定向等。
在本文中,我们深入探讨了Flask中路由和视图函数的概念、使用方法以及常见问题和解决方案。建议开发者在编写Flask应用程序时充分利用路由和视图函数的功能,以提高开发效率并优化用户体验。
模板和静态文件
Flask是一个灵活、易用的Web框架,支持使用模板和静态文件来构建Web应用程序。在本文中,我们将深入探讨Flask中模板和静态文件的概念、使用方法以及常见问题和解决方案。
- 什么是模板?
在Web应用程序中,通常需要将数据动态地渲染到HTML页面中。为了实现这一功能,可以使用模板引擎来生成HTML代码。
在Flask中,默认使用Jinja2作为模板引擎。Jinja2是一个Python模板引擎,具有强大的功能和灵活的语法,可以轻松地生成各种类型的文本文件。
在Flask中,可以使用render_template()
函数来加载并渲染模板。例如:
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')
在上面的代码中,使用了render_template()
函数加载名为“index.html”的模板,并返回渲染后的HTML代码。
在模板中,可以使用特定的语法来插入变量、循环迭代、条件判断等。例如:
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>
</head>
<body><h1>Hello, {{ name }}!</h1>{% if user %}<p>Welcome, {{ user }}!</p>{% else %}<p>Please login.</p>{% endif %}<ul>{% for item in items %}<li>{{ item }}</li>{% endfor %}</ul>
</body>
</html>
在上面的代码中,使用了Jinja2模板语法插入变量、条件判断和循环迭代。当模板被渲染时,Jinja2会将这些语法转换为对应的Python代码,并根据传递的参数动态生成HTML页面。
- 模板继承
在实际开发中,通常需要共享部分页面结构和样式。为了避免重复编写相同的HTML代码,可以使用模板继承来复用代码。
在Flask中,可以使用extends
关键字指定模板继承。例如:
{% extends "base.html" %}{% block title %}Home - {{ super() }}
{% endblock %}{% block content %}<h1>Welcome to my website!</h1><p>This is the home page.</p>
{% endblock %}
在上面的代码中,使用了extends
关键字指定继承自名为“base.html”的基础模板。其中,{% block %}
标签用于定义子模板中可替换的内容,{{ super() }}
用于调用父模板中对应的内容。
- 静态文件
除了动态生成的HTML页面外,Web应用程序通常还需要使用静态文件,如CSS、JavaScript、图片等。在Flask中,可以使用url_for()
函数生成静态文件的URL,然后在HTML页面中引用。
在Flask应用程序中,通常将静态文件放置在/static
目录下。例如,如果需要使用名为“style.css”的CSS文件,可以使用以下代码在HTML页面中引用:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
在上面的代码中,使用了url_for()
函数生成名为“style.css”的静态文件的URL,并将其作为href
属性值赋给<link>
标签,以便浏览器能够正确加载和显示该文件。
- 常见问题和解决方案
在使用Flask的模板和静态文件时,可能会遇到一些常见问题。下面列出了一些常见问题和相应的解决方案。
- 模板文件无法找到
当使用render_template()
函数加载模板时,可能会出现找不到模板文件的情况。这通常是因为未正确指定模板的路径或文件名。
为了避免这种问题,建议将模板文件放置在应用程序的templates目录下,并确保在调用render_template()
函数时指定正确的模板名称。例如:
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')
在上面的代码中,假设将模板文件“index.html”放置在应用程序的templates目录下。当用户访问根路径时,Flask将自动查找并渲染该模板文件。
- 静态文件无法加载
当使用url_for()
函数生成静态文件的URL时,可能会出现无法加载静态文件的情况。这通常是因为未正确指定静态文件的路径或文件名。
为了避免这种问题,建议将静态文件放置在应用程序的static目录下,并确保在在HTML页面中正确引用静态文件的URL。例如:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
在上面的代码中,假设将CSS文件“style.css”放置在应用程序的static目录下。使用url_for()
函数生成该文件的URL,然后在HTML页面中引用该URL即可加载和显示该文件。
- 模板继承错误
在实现模板继承时,可能会出现父模板或子模板中的语法错误。这通常是因为未正确使用{% block %}
标签或未正确调用{{ super() }}
函数。
为了避免这种问题,建议在使用模板继承时遵循Jinja2模板语法规范,并确保在子模板中正确定义和替换父模板中的内容。例如:
{% extends "base.html" %}{% block title %}Home - {{ super() }}
{% endblock %}{% block content %}<h1>Welcome to my website!</h1><p>This is the home page.</p>
{% endblock %}
在上面的代码中,使用了{% block %}
标签定义可替换的内容,并使用{{ super() }}
函数调用父模板中对应的内容。当模板被渲染时,Jinja2会将这些语法转换为对应的Python代码,并根据传递的参数动态生成HTML页面。
- 总结
在本文中,我们深入探讨了Flask中模板和静态文件的概念、使用方法以及常见问题和解决方案。
通过合理地使用模板和静态文件,可以轻松地构建Web应用程序,并实现各种功能,如动态生成HTML页面、共享页面结构和样式、加载CSS和JavaScript文件等。
建议开发者在编写Flask应用程序时充分利用模板和静态文件的功能,以提高开发效率并优化用户体验。
相关文章:

Nmap入门到高级【第十一章】
预计更新第一章. Python 简介 Python 简介和历史Python 特点和优势安装 Python 第二章. 变量和数据类型 变量和标识符基本数据类型:数字、字符串、布尔值等字符串操作列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句循环结构&#…...

配置本地Angular环境并使用VsCode调试Angular前端项目
配置本地Angular环境并使用VsCode调试Angular前端项目 配置本地Angular环境部署Node.Js本地环境配置一下环境变量 使用vscode调试Angular安装vscode 配置本地Angular环境 部署Node.Js本地环境 1 从官网下载node.js, 本文为(v16.13.0) 下载地址: https://nodejs.org/dist/v16.…...

100ASK_全志V853-PRO开发板支持人形检测和人脸识别
1.前言 V853 芯片内置一颗 NPU核,其处理性能为最大 1 TOPS 并有 128KB 内部高速缓存用于高速数据交换,支持 OpenCL、OpenVX、android NN 与 ONNX 的 API 调用,同时也支持导入大量常用的深度学习模型。本章提供一个例程,展示如何使…...

简单实现基于UDP与TCP的回显服务器
目录 前言UDP 版的回显服务器需要用到的 api服务端客户端UDP 版本的字典客户端和字典服务器 TCP 版的回显服务器需要用到的 api服务器客户端对服务器进行改进(使用线程池)TCP 版本的字典客户端和字典服务器 前言 我们写网络程序, 主要编写的是应用层代码. 真正要发送这个数据,…...

家用洗地机有什么推荐的吗?家用洗地机哪款好
洗地机是创新、高效的清洁工具,其具有高性能的清洁能力和卓越的操作体验。与传统的清洁工具相比,洗地机可以迅速而彻底地打扫地面,降低清洁时间和人力成本,让我们在工作之余不用花费大量的时间和精力去打扫卫生,下面就…...

深度学习与文本聚类:一篇全面的介绍与实践指南
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

AP5153 线性降压恒流驱动芯片 2.5A
AP5153 是一种 PWM 调光的、低压 差的 LED 线性降压恒流驱动器。 AP5153 仅需要外接一个电阻和一个 NMOS 管就可以构成一个完整的 LED 恒 流驱动电路, 调节该外接电阻就可以调节 输出电流,输出电流可调范围为 20mA 到 3.0A。 AP5153 还可以通过在 DIM…...

Unity物理系统脚本编程(下)
一、修改物理材质 Unity对物体表面材料的性质做了件化处理,仅有5种常用属性: Dynamic Friction(动态摩擦系数)Static Friction(静态摩擦系数)Bounciness(弹性系数)Friction Combine…...

容器技术的发展
容器技术的发展 近年来,随着计算机硬件、网络以及云计算等技术的迅速发展,云原生的概念也越来越受到业界人士的广泛关注,越来越多的应用场景开始拥抱云原生,其中容器技术的发展起着至关重要的作用。本章将介绍容器技术的基础知识…...

Python Flask request中常见存储参数的介绍
Python Flask request中常见存储参数的介绍 首先从flask模块中导入请求对象: from flask import requestrequest.form 通过method属性可以操作当前请求方法,通过使用form属性处理表单数据(本质也是得到一个字典,如果传输的是字…...

php+vue网盘系统的设计与实现
该网盘系统的开发和设计根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅php书籍&am…...

[前端]深浅拷贝
一、回顾变量类型 基础类型 boolean(bool) number string null undefined 引用类型 object function array 基本类型与引用类型的存储 基本类型一般存储在 栈 (栈小) 栈一旦确认 大小就固定 可能会造成溢出栈一般是先进后出用于存储…...

文章纠错免费软件-文字校对软件免费下载
自动校对稿件的软件 自动校对稿件的软件是一种基于自然语言处理(Natural Language Processing, NLP)和机器学习(Machine Learning)技术的工具,可以较为准确地检测和纠正文本中出现的语法、拼写、标点符号以及其他笔误…...

【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)
目录 一、缓存穿透 1、概念 2、解决办法 1.缓存空对象 2.布隆过滤 二、缓存雪崩 1、概念 2、解决办法 1.给key设置随机的过期时间TTL 2.业务添加多级缓存 3.利用集群提供服务可用性 4.缓存业务添加降级限流 三、缓存击穿 1、概念 2、解决办法 1.互斥锁 2.逻辑…...

为什么很多程序员喜欢linux系统?
a> Linux哪些行业在运用? Linux系统运用极其广泛,不少用户只知道windows,是因为,Linux的运用主要是在企业端。现在科技极其发达,我们手机在手,就能干很多事情,只需点一点屏幕,轻松…...

Bean 作用域和生命周期
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 lombok的使用案例引入作用域定义singleton单例作用域prototype原型作用域(多例作用域)request请求作用域session会话作用域ap…...

PMP考试常见13个固定套路
一、变更批准之后 变更批准后要做三件事: 1、在变更日志中记录 2、通知相关干系人 3、更新项目管理计划 二、风险的情景题 1、先判断风险识别了,还是风险发生了。 2、若是风险识别,按风险管理程序走; 3、若是风险发生,则应采取应急措施…...

Leecode101 ——对称二叉树
对称二叉树:Leecode 101 leecode 101 对称二叉树 根据题目描述,首先想清楚,对称二叉树要比较的是哪两个节点。对于二叉树是否对称,要比较的是根节点的左子树与根节点的右子树是不是相互翻转的,其实也就是比较两个树,…...

JVM学习随笔03——Java堆中new一个对象的步骤
目录 一、进行类加载 二、堆中分配内存 1、怎么输出GC日志: 2、内存分配的两种方式: 3、内存分配过程中并发控制的两种方式: 三、内存空间初始化 四、对象头初始化(对象头包含哪些信息?) 五、执行构…...

虹科方案 | CEMEX 使用HK-Edgility 智能边缘计算平台简化其企业 WAN 管理和运营
一、应对价值 130 亿美元的跨国企业的网络挑战 “我们选择 Edgility 是因为其卓越的管理和协调功能,它为我们提供了一个端到端的工具集,可以经济高效地部署和管理我们边缘设备的生命周期。” —— Fernando Garcia -Villaraco Casero, CEMEX 全球IT 战略…...

rk3568 系统移植和编译
1。 硬件问题 尽量根据原版 evb 开发版 pcb 进行布线和移植,切记不可自行走线。 emmc 和 ddr4 选型都有要求的,按照硬件手册进行设计 2。软件问题 2.1 目前固件系统选用1.3.2 版本进行设计 解压后运行 .repo/repo/repo sync -c 更新代码 2.2 ubo…...

深度解析C++异常处理机制:分类、处理方式、常见错误及11新增功能
C 基础知识 八 异常处理 上篇 一、基础1. 异常的概念2. 异常的分类2.1 内置异常2.2 自定义异常 3. 异常的处理方式3.1 try-catch 语句3.2 throw 语句3.3 noexcept 修饰符3.4 finally 语句块 二、 异常处理机制1 try-catch 语句块2 异常处理流程3 标准异常类 三、 抛出异常1 thr…...

FPGA时序约束(四)主时钟、虚拟时钟和时钟特性的约束
系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 FPGA时序约束(三)时序约束基本路径的深入分析 文章目录 系列文章目录前言主时钟约束跨时钟域…...

JNI开发
文件结构(选中的为生成的) CMake构建不需要执行命令,会自动生成so文件打包进apk Android mk构建需要执行命令生成so文件,再打包进apk。命令如下。 # 在jni目录下执行 # 生成com_demo_cppproject_OtherNdkTest.h头文件 javac -h .…...

JAVA有哪些特点?
JAVA有以下特点: 综上所述,Java作为一种先进的面向对象编程语言,具有简单、可移植、健壮、高性能、多线程、动态性、跨平台、开放性和安全性等众多特点,已经成为广泛使用的编程语言之一。 简单易学:JAVA语言的语法与C语…...

使用读写锁提高并发
我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用: 只允许一个线程写入(其他线程既不能写入也不能读取);没有写入时…...

使用@PropertySource加载配置文件
1.PropertySource和PropertySources注解 1.1.PropertySource注解概述 PropertySource注解是Spring 3.1开始引入的配置类注解。通过**PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文…...

事务及分布式事务解决方案
基础概念 1.1.事务 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。 1.2.本地事务 在计算机系统中,更多的是通过关系型数据库来控制事务,利用数据库本身的事务特性来实现&a…...

【思科、华为、华三、锐捷网络设备巡检命令】
华三 screen-1ength disable 取消分页 displayversion 查看版本 displayclock 查看日期时钟 displayfan 查看风扇状态 displaypower 查看电源信息 displaycpu-usage 查看CPU利用率 displaymemory 查看内存利用率 display environment 查看温度信息 display device 查看设备信息…...

代码随想录算法训练营第五十二天
代码随想录算法训练营第五十二天| 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 题目链接:最长递增子序列 这里是不用处理if nums[i] &l…...