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

Flask 快速入门

1. Flask 简介

1.1 什么是 Flask

Flask 是一个用 Python 编写的轻量级 Web 框架,被誉为 微框架。它提供基础功能,如路由、请求处理和模板引擎,但不强迫开发者使用特定库或工具,赋予开发人员高度的自由选择权,以满足不同项目的需求。

简单来说,Flask 帮助 Python 开发者快速构建 Web 应用,提供以下核心功能:

  • 路由: 将 URL 与对应的 Python 函数进行匹配,实现 URL 到函数的映射。
  • 请求处理: 处理来自用户的 HTTP 请求,例如获取请求参数、解析请求数据等,并将处理结果返回给用户。
  • 模板引擎: 使用 Jinja2 模板引擎动态渲染网页,将数据嵌入到 HTML 模板中,生成最终的 HTML 页面。

1.2 Flask 的优势

  • 轻量级和灵活: Flask 没有强迫性要求,允许开发者自由选择数据库、模板引擎和其他库,完全掌控项目的架构和组件选择。
  • 易于学习: Flask 的语法简洁直观,易于理解和掌握,即使是初学者也能快速上手。
  • 强大的社区支持: Flask 拥有庞大而活跃的社区,开发者可以轻松获取各种资源、教程、示例代码和帮助,解决开发中的问题。
  • 可扩展性: Flask 提供扩展机制,允许开发者通过添加扩展来扩展功能,例如数据库集成、用户认证、表单验证、邮件发送等,满足不同项目的需求。

1.3 Flask 的应用场景

Flask 适合以下应用场景:

  • 小型项目: 对于简单的网站或 API,Flask 提供快速开发和部署方案,节省时间和成本。
  • 原型开发: Flask 帮助开发者快速构建原型,验证想法的可行性,并进行快速迭代和修改。
  • 个性化需求: Flask 的灵活性满足定制化的 API、特定领域应用等需求,可以根据项目的特殊要求进行灵活调整和扩展。

一些使用 Flask 的知名应用:

  • Pinterest: 一家图片社交网站,使用 Flask 构建了其核心功能。
  • Lyft: 一家打车服务公司,使用 Flask 构建了其 API 和 Web 应用。
  • Twilio: 一家云通信平台,使用 Flask 构建了其 API 和管理界面。

1.4 Flask 的基本架构

Flask 的基本架构包括以下几个关键部分:

  1. WSGI 应用: Flask 应用本身是一个 WSGI 应用,负责接收 HTTP 请求并生成响应。
  2. 路由: 使用 @app.route 装饰器将 URL 与 Python 函数进行绑定,实现 URL 到函数的映射。
  3. 请求处理: Flask 提供 request 对象,用于获取 HTTP 请求信息,例如请求方法、请求参数、请求头等。
  4. 模板引擎: Flask 默认使用 Jinja2 模板引擎,用于渲染动态网页。
  5. 响应生成: Flask 使用 render_template 函数渲染模板,或使用 make_response 函数创建响应对象,并返回给用户。

了解这些基本架构有助于理解 Flask 的工作原理,以及如何使用 Flask 构建 Web 应用。

2. 快速上手

2.1 安装 Flask

使用 pip 安装 Flask:

pip install Flask

2.2 创建第一个 Flask 应用

创建名为 app.py 的文件,并添加以下代码:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask!'if __name__ == '__main__':app.run(debug=True)

代码解释:

  • from flask import Flask: 导入 Flask 库。
  • app = Flask(__name__): 创建一个 Flask 应用实例,__name__ 表示当前模块名,用于指定应用的根目录。
  • @app.route('/'): 定义一个路由,将根路径 /index 函数关联。
  • def index():: 定义一个函数,返回一个字符串 “Hello, Flask!”。
  • if __name__ == '__main__':: 确保代码只在直接运行脚本时执行,而不是被其他模块导入时执行。
  • app.run(debug=True): 运行 Flask 应用,开启调试模式。

2.3 运行 Flask 应用

在终端中运行以下命令:

python app.py

打开浏览器,访问 http://127.0.0.1:5000/,你将看到 “Hello, Flask!” 的输出。

2.4 使用路由

路由用于将 URL 与 Python 函数进行匹配。在上面的代码中,@app.route('/') 定义了一个路由,将根路径 /index 函数关联。

你可以定义多个路由,例如:

@app.route('/about')
def about():return 'This is the about page.'@app.route('/contact')
def contact():return 'This is the contact page.'

访问 http://127.0.0.1:5000/abouthttp://127.0.0.1:5000/contact 将分别显示 “This is the about page.” 和 “This is the contact page.”。

2.5 处理 HTTP 请求方法

Flask 可以区分不同的 HTTP 请求方法,例如 GETPOSTPUTDELETE 等。

可以使用 methods 参数来指定允许的 HTTP 请求方法:

@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'GET':return 'Login page'elif request.method == 'POST':# 处理 POST 请求return 'Login successful'

代码解释:

  • methods=['GET', 'POST']: 允许使用 GETPOST 请求方法访问 /login 路由。
  • request.method: 获取当前请求方法。

访问 http://127.0.0.1:5000/login 将显示 “Login page”,使用 POST 请求则会显示 “Login successful”。

3. 模板渲染

模板渲染是将数据动态插入到 HTML 页面中,生成最终的 HTML 内容,Flask 使用 Jinja2 模板引擎来实现模板渲染。

3.1 Jinja2 模板引擎

Jinja2 是一个功能强大的模板引擎,它提供了一套语法来定义模板,并支持变量、循环、条件语句等功能。

3.2 使用模板渲染页面

  1. 创建模板文件

    在应用的根目录下创建 templates 目录,并将模板文件放在该目录下。例如,创建一个名为 index.html 的模板文件:

    <!DOCTYPE html>
    <html>
    <head><title>My Flask App</title>
    </head>
    <body><h1>Hello, {{ name }}!</h1>
    </body>
    </html>
    
  2. 使用 render_template() 函数渲染模板

    在视图函数中使用 render_template() 函数渲染模板,并将数据传递到模板中。

    from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
    def index():name = 'World'return render_template('index.html', name=name)if __name__ == '__main__':app.run(debug=True)
    

    这段代码将 index.html 模板渲染,并传递 name 变量的值到模板中,最终生成的 HTML 内容为:

    <!DOCTYPE html>
    <html>
    <head><title>My Flask App</title>
    </head>
    <body><h1>Hello, World!</h1>
    </body>
    </html>
    

3.3 传递数据到模板

render_template() 函数中,可以使用关键字参数将数据传递到模板中。

传递单个变量:

return render_template('index.html', name='World')

传递多个变量:

return render_template('index.html', name='World', age=25)

传递列表:

names = ['Alice', 'Bob', 'Charlie']
return render_template('index.html', names=names)

传递字典:

user = {'name': 'Alice', 'age': 25}return render_template('index.html', user=user)

3.4 模板继承

Jinja2 支持模板继承,允许你定义一个基础模板,并在其他模板中继承该基础模板。

基础模板 (base.html):

<!DOCTYPE html>
<html>
<head><title>{% block title %}My Flask App{% endblock %}</title>
</head>
<body><header><h1>Welcome to My Flask App</h1></header><main>{% block content %}{% endblock %}</main><footer><p>&copy; 2023 My Flask App</p></footer>
</body>
</html>

继承模板 (index.html):

{% extends 'base.html' %}{% block title %}Home{% endblock %}{% block content %}
<h2>Hello, {{ name }}!</h2>
{% endblock %}

在继承模板中,可以使用 {% block %} 标签定义可覆盖的区域,并使用 {% extends %} 标签继承基础模板。

3.5 模板中的控制语句

Jinja2 支持在模板中使用控制语句,例如循环和条件语句。

循环语句:

<ul>{% for name in names %}<li>{{ name }}</li>{% endfor %}
</ul>

条件语句:

{% if user.is_authenticated %}<p>Welcome, {{ user.name }}!</p>
{% else %}<p>Please log in.</p>
{% endif %}

4. 数据库集成

Flask 通过集成 SQLAlchemy 等数据库 ORM 库,实现与数据库的交互。

4.1 安装 SQLAlchemy

使用 pip 安装 Flask-SQLAlchemy 扩展:

pip install Flask-SQLAlchemy

4.2 配置数据库

在应用的配置中添加数据库连接字符串,例如使用 SQLite 数据库:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

4.3 定义模型

使用 SQLAlchemy 定义数据库模型,例如用户模型:

from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)def __repr__(self):return f'<User {self.username}>'

代码解释:

  • db = SQLAlchemy(app): 创建一个 SQLAlchemy 实例,并绑定到 Flask 应用。
  • class User(db.Model): 定义一个用户模型,继承自 db.Model
  • id = db.Column(db.Integer, primary_key=True): 定义 id 列,作为主键。
  • username = db.Column(db.String(80), unique=True, nullable=False): 定义 username 列,字符串类型,必须唯一且非空。
  • email = db.Column(db.String(120), unique=True, nullable=False): 定义 email 列,字符串类型,必须唯一且非空。

4.4 创建数据库

在交互式 Python 解释器中运行以下命令,创建数据库和表:

>>> from app import db
>>> db.create_all()

4.5 操作数据库

插入数据:

user = User(username='Alice', email='alice@example.com')
db.session.add(user)
db.session.commit()

查询数据:

users = User.query.all()
print(users)

更新数据:

user = User.query.filter_by(username='Alice').first()
user.email = 'alice@newdomain.com'
db.session.commit()

删除数据:

user = User.query.filter_by(username='Alice').first()
db.session.delete(user)
db.session.commit()

4.6 处理数据库关系

SQLAlchemy 支持处理一对多、多对多等复杂关系,例如定义一对多关系:

父模型:

class Author(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)books = db.relationship('Book', backref='author', lazy=True)

子模型:

class Book(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(100), nullable=False)author_id = db.Column(db.Integer, db.ForeignKey('author.id'), nullable=False)

代码解释:

  • db.relationship('Book', backref='author', lazy=True): 在 Author 模型中定义一个关系属性 books,表示与 Book 模型的一对多关系。
  • db.ForeignKey('author.id'): 在 Book 模型中定义外键 author_id,指向 Author 模型的 id 列。

5. 表单处理

Flask-WTF 是一个集成 WTForms 的 Flask 扩展,用于处理表单创建、验证和错误处理。

5.1 安装 Flask-WTF

使用 pip 安装 Flask-WTF 扩展:

pip install Flask-WTF

5.2 配置 Flask-WTF

在应用的配置中添加 CSRF 保护的密钥:

app.config['SECRET_KEY'] = 'your_secret_key'

5.3 定义表单

使用 Flask-WTF 定义一个登录表单:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequiredclass LoginForm(FlaskForm):username = StringField('Username', validators=[DataRequired()])password = PasswordField('Password', validators=[DataRequired()])submit = SubmitField('Login')

代码解释:

  • FlaskForm: 表单基类。
  • StringField: 文本输入框。
  • PasswordField: 密码输入框。
  • SubmitField: 提交按钮。
  • DataRequired: 验证器,确保字段不为空。

5.4 渲染表单

在视图函数中创建表单实例,并在模板中渲染表单。

视图函数:

@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()if form.validate_on_submit():# 处理登录逻辑return 'Login successful'return render_template('login.html', form=form)

模板文件 (login.html):

<!DOCTYPE html>
<html>
<head><title>Login</title>
</head>
<body><form method="POST">{{ form.hidden_tag() }}<p>{{ form.username.label }}<br>{{ form.username(size=32) }}<br>{% for error in form.username.errors %}<span style="color: red;">[{{ error }}]</span>{% endfor %}</p><p>{{ form.password.label }}<br>{{ form.password(size=32) }}<br>{% for error in form.password.errors %}<span style="color: red;">[{{ error }}]</span>{% endfor %}</p><p>{{ form.submit() }}</p></form>
</body>
</html>

代码解释:

  • form.validate_on_submit(): 检查表单是否通过验证。
  • {{ form.hidden_tag() }}: 渲染 CSRF 保护的隐藏标签。
  • {{ form.username.label }}: 渲染表单字段的标签。
  • {{ form.username(size=32) }}: 渲染表单字段的输入框。
  • {% for error in form.username.errors %}: 渲染验证错误信息。

5.5 表单验证

在表单定义中添加验证器,例如 Email 验证器:

from wtforms.validators import Emailclass LoginForm(FlaskForm):username = StringField('Username', validators=[DataRequired(), Email()])password = PasswordField('Password', validators=[DataRequired()])submit = SubmitField('Login')

代码解释:

  • Email(): 验证器,确保字段是有效的电子邮件地址。

5.6 自定义验证器

可以定义自定义验证器,并在表单定义中使用:

from wtforms.validators import ValidationErrordef custom_validator(form, field):if field.data != 'expected_value':raise ValidationError('Invalid value')class LoginForm(FlaskForm):username = StringField('Username', validators=[DataRequired(), custom_validator])password = PasswordField('Password', validators=[DataRequired()])submit = SubmitField('Login')

代码解释:

  • custom_validator(form, field): 自定义验证器函数,检查字段值是否为预期值。
  • raise ValidationError('Invalid value'): 抛出验证错误。

6. 用户认证

Flask-Login 是一个用户会话管理扩展,用于处理用户登录、注销和会话管理。

6.1 安装 Flask-Login

使用 pip 安装 Flask-Login 扩展:

pip install Flask-Login

6.2 配置 Flask-Login

在应用中初始化 Flask-Login,并定义用户加载函数:

from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_userlogin_manager = LoginManager(app)
login_manager.login_view = 'login'@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))

代码解释:

  • LoginManager(app): 创建一个 LoginManager 实例,并绑定到 Flask 应用。
  • login_manager.login_view = 'login': 设置登录视图的端点。
  • @login_manager.user_loader: 定义用户加载函数,根据用户 ID 加载用户对象。

6.3 定义用户模型

用户模型需要继承 UserMixin,并实现用户加载函数:

class User(UserMixin, db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)password = db.Column(db.String(128), nullable=False)def __repr__(self):return f'<User {self.username}>'

代码解释:

  • UserMixin: 提供用户会话管理所需的方法和属性。

6.4 用户登录

在视图函数中处理用户登录:

@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()if form.validate_on_submit():user = User.query.filter_by(username=form.username.data).first()if user and user.password == form.password.data:login_user(user)return 'Login successful'return render_template('login.html', form=form)

代码解释:

  • User.query.filter_by(username=form.username.data).first(): 根据用户名查询用户。
  • login_user(user): 登录用户,创建用户会话。

6.5 保护视图

使用 @login_required 装饰器保护需要登录访问的视图:

@app.route('/dashboard')
@login_required
def dashboard():return f'Welcome, {current_user.username}!'

代码解释:

  • @login_required: 确保只有登录用户才能访问该视图。
  • current_user: 获取当前登录的用户对象。

6.6 用户注销

在视图函数中处理用户注销:

@app.route('/logout')
@login_required
def logout():logout_user()return 'You have been logged out.'

代码解释:

  • logout_user(): 注销用户,结束用户会话。

相关文章:

Flask 快速入门

1. Flask 简介 1.1 什么是 Flask Flask 是一个用 Python 编写的轻量级 Web 框架&#xff0c;被誉为 微框架。它提供基础功能&#xff0c;如路由、请求处理和模板引擎&#xff0c;但不强迫开发者使用特定库或工具&#xff0c;赋予开发人员高度的自由选择权&#xff0c;以满足不…...

C#设计模式(行为型模式):备忘录模式,时光倒流的魔法

C#设计模式&#xff1a;备忘录模式&#xff0c;时光倒流的魔法 在软件开发中&#xff0c;我们经常会遇到需要保存对象状态&#xff0c;并在未来某个时刻恢复的场景。例如&#xff1a; 撤销操作&#xff1a; 文本编辑器中的撤销功能&#xff0c;游戏中的回退操作。事务回滚&am…...

数据库高安全—角色权限:权限管理权限检查

目录 3.3 权限管理 3.4 权限检查 书接上文数据库高安全—角色权限&#xff1a;角色创建角色管理&#xff0c;从角色创建和角色管理两方面对高斯数据库的角色权限进行了介绍&#xff0c;本篇将从权限管理和权限检查方面继续解读高斯数据库的角色权限。 3.3 权限管理 &#x…...

FastAPI 的依赖注入与生命周期管理深度解析

FastAPI 的依赖注入与生命周期管理深度解析 目录 &#x1f527; 依赖注入与 FastAPI 高级特性 1.1 依赖注入的基础与核心概念1.2 FastAPI 的依赖注入机制与设计理念1.3 FastAPI 依赖注入的异步特性 &#x1f579; 生命周期与依赖的异步管理 2.1 依赖的生命周期管理&#xff1…...

【express-generator】05-路由中间件和错误处理(第一阶段收尾)

一、前言 上篇文章我们介绍了express-generator的请求体解析&#xff0c;重点讲了常用的请求体数据格式&#xff08;JSON/URL 编码的表单数据&#xff09;以及一个FILE文件上传&#xff0c;同时搭配代码示范进行辅助理解。 二、本篇重点 我们继续第一阶段的知识&#xff0c;…...

Linux环境下确认并操作 Git 仓库

在软件开发和版本控制中&#xff0c;Git 已成为不可或缺的工具。有时&#xff0c;我们需要确认某个目录是否是一个 Git 仓库&#xff0c;并在该目录中运行脚本。本文将详细介绍如何确认 /usr/local/src/zcxt/backend/policy-system-backend 目录是否是一个 Git 仓库&#xff0c…...

UDP -- 简易聊天室

目录 gitee&#xff08;内有详细代码&#xff09; 图解 MessageRoute.hpp UdpClient.hpp UdpServer.hpp Main.hpp 运行结果&#xff08;本地通信&#xff09; 如何分开对话显示&#xff1f; gitee&#xff08;内有详细代码&#xff09; chat_room zihuixie/Linux_Lear…...

NVIDIA在CES 2025上的三大亮点:AI芯片、机器人与自动驾驶、全新游戏显卡

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜

AI的两次寒冬&#xff1a;从感知机困局到深度学习前夜 引用&#xff08;中英双语&#xff09; 中文&#xff1a; “第一次AI寒冬&#xff0c;是因为感知机局限性被揭示&#xff0c;让人们失去了对算法可行性的信心。” “第二次AI寒冬&#xff0c;则是因为专家系统的局限性和硬…...

transformer深度学习实战CCTSDB中国交通标志识别

本文采用RT-DETR作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。RT-DETR以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对CCTSDB交通标志数据集进行训练和优化&#xff0c;该数据集包含丰富的CCTSDB交…...

JavaWeb开发(六)XML介绍

1. XML介绍 1.1. 什么是XML &#xff08;1&#xff09;XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种很像HTML的标记语言。   &#xff08;2&#xff09;XML 的设计宗旨是传输数据(目前主要是作为配置文件)&#xff0c;而不是显示数据。   &#xff08;3&a…...

使用pbootcms开发一个企业官网

V:llike620 pbootcms开源PHP建站系统 https://www.pbootcms.com/ 配置网站 域名解析后&#xff0c;网站绑定到程序根目录即可 例如&#xff1a;本地域名是dobot.test &#xff0c;那么也要同步本地的hosts是 127.0.0.1 dobot.test 需要配置下伪静态规则 location / {if (!-e $r…...

Linux C编程——文件IO基础

文件IO基础 一、简单的文件 IO 示例二、文件描述符三、open 打开文件1. 函数原型2. 文件权限3. 宏定义文件权限4. 函数使用实例 四、write 写文件五、read 读文件六、close 关闭文件七、Iseek 绍 Linux 应用编程中最基础的知识&#xff0c;即文件 I/O&#xff08;Input、Outout…...

【信息系统项目管理师】高分论文:论信息系统项目的风险管理(人民医院的信息系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划风险管理2、项目风险识别3、风险定性分析4、风险定量分析5、制定风险应对6、实施风险应对计划7、监督风险论文 2022年6月,我作为项目经理承担了XX县人民医院的信息系统建设,该项目总投资300万,其…...

UE播放声音

蓝图中有两个播放声音的函数 Play Sound 2D 和 Play Sound at Location Play Sound 2D没有声音距离衰减&#xff0c;一般用于界面ui Play Sound at Location 有声音距离衰减&#xff0c;一般用于枪声&#xff0c;场景声等&#xff0c;比较常用...

Docker Compose 启动 Harbor 并指定网络

1. 介绍 Harbor 是一个开源的企业级 Docker 镜像仓库&#xff0c;提供镜像存储、访问控制、安全扫描等功能。使用 Docker Compose 启动 Harbor 时&#xff0c;您可以指定一个自定义网络&#xff0c;以便管理容器之间的网络通信。在本示例中&#xff0c;我们将创建一个名为 har…...

WebSocket 实战案例:从设计到部署

在前六篇文章中,我们深入探讨了 WebSocket 的基础原理、服务端开发、客户端实现、安全实践、性能优化和测试调试。今天,让我们通过一个实战案例,看看如何将这些知识应用到实际项目中。我曾在一个大型在线教育平台中,通过 WebSocket 实现了实时互动课堂,支持了数万名师生的同时在…...

selenium合集

环境搭建步骤 安装selenium pip install selenium 安装浏览器 安装浏览器驱动 谷歌浏览器&#xff1a;chromdriver.exe ie浏览器:ieserverdriver.exe FireFox浏览器:geckodriver.exe 特别注意⚠️&#xff1a;下载驱动版本必须与浏览器版本一致 下载地址 淘宝镜像&#xff1…...

JVM生产环境常用参数配置及调优建议

一、生产常用参数配置 JAVA_OPTS"-server -Xms3000m -Xmx3000m -Xmn1500m -XX:UseG1GC -XX:ConcGCThreads8 -XX:PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:./g1-gc.log -XX:MaxMetaspaceSize256m -XX:-UseGCOverheadLimit -XX:UseCompressedOops -XX:HeapDumpOnOu…...

Spring Boot 3 实现 MySQL 主从数据库之间的数据同步

✅ Spring Boot 3 实现 MySQL 主从数据库之间的数据同步 在实际项目中&#xff0c;为了提高 系统的读性能 和 数据的可用性&#xff0c;通常会使用 主从数据库架构。Spring Boot 提供了对 多数据源 的良好支持&#xff0c;可以轻松配置 主从数据库 的数据同步&#xff0c;实现…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...