怎么在网站备案号码上加一个工信部链接地址泰州网站排名seo
初始Flask框架
Flask 是一个轻量级的 Python Web 框架,它基于 WSGI 工具包 Werkzeug 和模板引擎 Jinja2 构建,被广泛用于快速开发 Web 应用和 API。Flask 的设计理念是 “微而不缺”(Micro but not lacking),它提供了核心功能(如路由、请求处理、会话管理),但不强制依赖特定的数据库或表单验证工具,开发者可以根据需求自由选择和集成第三方扩展。
核心特点
- 轻量级:无内置数据库、表单验证或用户认证系统,仅保留 Web 应用的核心功能。
- 灵活:支持各种数据库(SQLite、MySQL、PostgreSQL)、ORM(SQLAlchemy)、表单验证(WTForms)等。
- 可扩展:通过 Flask 扩展(如 Flask-RESTful、Flask-SQLAlchemy、Flask-Login)轻松添加功能。
- 学习曲线平缓:适合初学者快速上手 Web 开发。
Flask 与 Django 的对比
- Flask:适合小型项目、API 开发、快速原型或需要高度定制的场景。
- Django:内置 ORM、管理后台、表单验证等全套组件,适合大型、功能完整的 Web 应用。
基本工作流程
- 路由定义:通过装饰器(如
@app.route('/')
)将 URL 映射到处理函数。 - 请求处理:接收 HTTP 请求,处理业务逻辑,返回响应(HTML、JSON 等)。
- 模板渲染:使用 Jinja2 模板引擎生成动态 HTML。
- 会话管理:通过 Cookie 或服务器端会话跟踪用户状态。
常用扩展
- Flask-SQLAlchemy:数据库 ORM 工具,简化数据库操作。
- Flask-RESTful:构建 RESTful API 的工具。
- Flask-Login:处理用户认证和会话管理。
- Flask-JWT-Extended:支持 JSON Web Token(JWT)认证。
- Flask-CORS:处理跨域资源共享(CORS)问题。
实际应用场景
- API 开发:构建轻量级后端服务(如 JSON API、GraphQL)。
- Web 应用原型:快速验证想法,后期可扩展为大型项目。
- 微服务:作为独立服务处理特定业务逻辑。
- 数据可视化:结合前端框架(如 React、Vue)展示动态数据。
安装方法
通过 pip 安装 Flask:
pip3 install flask
示例Flask
创建一个简单flask
下面是一个简单的 Flask 应用示例,创建一个返回 “Hello, World!” 的 Web 服务:
from flask import Flask# 创建 Flask 应用实例,__name__ 表示当前模块名称
app = Flask(__name__)# 定义路由:当用户访问根路径 / 时,执行下方的函数
@app.route('/')
def hello_world(): # 视图函数,处理客户端请求并返回响应return 'Hello, world!' # 返回字符串作为 HTTP 响应内容# 主程序入口:确保应用只在直接运行脚本时启动,而非被导入时
if __name__ == '__main__':# 启动 Flask 开发服务器# host='0.0.0.0' 允许外部网络访问# port=5000 指定服务器端口# debug=True 开启调试模式,修改代码后自动重启并显示详细错误信息app.run(host='0.0.0.0', port=5000, debug=True)
运行站点
python3 aaa.py
访问该站点
[root@localhost ~]# curl 192.168.10.101:5000
Hello,world!
###!!!!成功
Flask路由与视图函数
from flask import Flask# 创建 Flask 应用实例,__name__ 作为应用根路径的参考点
app = Flask(__name__)# 定义根路径路由:当用户访问网站根目录时触发
@app.route('/')
def hello_world():# 返回静态字符串作为 HTTP 响应return 'Hello,world!'# 定义动态路由:通过 URL 参数接收用户名
@app.route('/greet/<name>')
def greet(name):# 使用 f-string 格式化字符串,动态生成问候语return f'nihao, {name}'# 主程序入口:确保应用作为脚本直接运行时才启动服务器
if __name__ == '__main__':# 启动 Flask 开发服务器# host='0.0.0.0': 允许外部网络访问# port=5000: 监听 5000 端口# debug=True: 开启调试模式(自动重载代码 + 详细错误信息)app.run(host='0.0.0.0', port=5000, debug=True)
代码解释:
<name>
是 URL 变量,会被捕获并传递给name
参数f'nihao, {name}'
使用 Python 3.6+ 的格式化字符串语法
访问
[root@localhost ~]# curl 192.168.10.101:5000/greet/zhangsan
nihao, zhangsan
[root@localhost ~]#
多种http请求方法
在上面原有的基础上增加一个route
@app.route('/submit',methods=['POST'])
def submit():return '提交成功'
代码功能
创建一个接收 POST 请求 的 API 端点 /submit
,当客户端通过 POST 方法访问该路径时,返回固定文本 提交成功
。
-
@app.route
:Flask -
的路由装饰器,将 URL 路径映射到视图函数。
-
/submit
:定义访问路径,客户端需请求http://域名/submit
。 -
methods=['POST']
限制请求方法
为 POST(默认仅支持 GET)。
✅ 常见 HTTP 方法:
GET
:获取资源(如查询数据)。POST
:提交数据(如表单、文件上传)。PUT
:更新资源。DELETE
:删除资源。
访问
[root@localhost ~]# curl -XPOST 192.168.10.101:5000/submit
提交成功[root@localhost ~]#
使用Jinjia2模版渲染HTMl示例
什么是Jinjia?
Jinja2 是 Python 生态中最流行的 模板引擎,由 Flask 框架的开发者 Armin Ronacher 创建,用于将 Python 变量和逻辑嵌入到 HTML、XML 或其他文本格式中,广泛应用于 Web 开发、邮件模板、配置文件生成等场景。
核心特点
- 安全:默认自动转义 HTML,防止 XSS 攻击。
- 灵活:支持变量渲染、条件判断、循环、过滤器等。
- 可扩展:自定义过滤器、标签和测试函数。
- 高性能:编译模板为 Python 字节码,执行速度快。
- 集成友好:与 Flask、Django 等框架无缝集成。
与其他模板引擎对比
特性 | Jinja2 | Django 模板 | Mako |
---|---|---|---|
安全性 | 高 | 高 | 中等 |
性能 | 高 | 中等 | 极高 |
灵活性 | 高 | 中等 | 极高 |
语法复杂度 | 中等 | 简单 | 复杂 |
语法示例
使用jinjia2模版渲染html
[root@localhost ~]# mkdir templates ###创建templates 目录 (flask默认模版存放位置)
[root@localhost ~]# cd templates ###进入目录
[root@localhost templates]# vim index.html
<html>
<head>
<meta charset='UTF-8'>
<title>你好,杜甫</title></head>
<body>
<h1> hello, {{ name }} </h1></body></html>
代码功能解析
-
HTML 基础结构:
- 标准的 HTML5 文档结构,包含
head
和body
标签。 charset='UTF-8'
确保中文等非 ASCII 字符正常显示。
- 标准的 HTML5 文档结构,包含
-
Jinja2 模板语法
<h1> hello, {{ name }} </h1>
{{ name }}
是 Jinja2 的 变量占位符,会在渲染时被替换为 Python 传递的数据。- 例如,若 Python 代码传递
name='李白'
,则最终页面会显示hello, 李白
。
-
静态与动态内容结合:
<title>你好,杜甫</title>
是静态文本,始终显示 “你好,杜甫”。<h1> hello, {{ name }} </h1>
是动态内容,name
会被替换。
from flask import Flask, render_template# 创建 Flask 应用实例
app = Flask(__name__)# 定义动态路由:接收 URL 中的 name 参数
@app.route('/greet/<name>')
def greet(name):# 渲染 templates/index.html 模板,并将 name 参数传递给模板# 模板中的 {{ name }} 会被替换为实际传入的值return render_template('index.html', name=name)# 主程序入口:确保应用作为脚本直接运行时才启动服务器
if __name__ == '__main__':# 启动 Flask 开发服务器# host='0.0.0.0': 允许外部网络访问# port=5000: 监听 5000 端口# debug=True: 开启调试模式(自动重载代码 + 详细错误信息)app.run(host='0.0.0.0', port=5000, debug=True)
这里站点的name值会传参给网页中的name值
访问验证
[root@localhost ~]# curl 192.168.10.101:5000/greet/lisi ##这里我们输入lisi name参数传参给下方网页中的name
<html>
<head>
<meta charset='UTF-8'>
<title>你好,杜甫</title></head>
<body>
<h1> hello, lisi </h1> ###这里的lisi参数是有站点中name传参</body></html>
模板的继承与块
什么是模版的继承
模板继承是 Jinja2(以及许多其他模板引擎)提供的一种强大机制,用于创建可复用的模板结构。它允许你定义一个基础模板(包含通用布局),然后通过子模板继承并覆盖特定部分,从而避免代码重复。
核心概念
- 基础模板:定义网站的整体结构(如头部、导航栏、页脚),包含可被子模板替换的 块(block)。
- 子模板:继承基础模板,并通过
{% block %}
标签覆盖特定区域的内容。 - 基础模版一定写入到子模版内
示例
站点文件
# 导入 Flask 框架和模板渲染函数
from flask import Flask, render_template# 创建 Flask 应用实例,__name__ 表示当前模块名称
app = Flask(__name__)# 定义根路径 '/' 的路由处理函数
@app.route('/')
def aaa():# 渲染并返回 templates 目录下的 base.html 模板# 注意:需要确保 templates 目录存在且包含 base.html 文件return render_template('base.html')# 应用程序入口点
if __name__ == '__main__':# 启动 Flask 开发服务器# host='0.0.0.0' 允许外部访问服务器# port=5000 指定服务器端口为 5000# debug=True 开启调试模式,代码修改后自动重启服务器app.run(host='0.0.0.0', port=5000, debug=True)
关键注释说明:
-
Flask 实例创建:通过
Flask(__name__)
创建应用实例 -
路由定义:使用
@app.route
装饰器定义 URL 路由 -
模板渲染:
render_template
函数会在 templates 目录中查找指定的模板文件 -
开发服务器配置
:
host='0.0.0.0'
使服务器可通过网络访问debug=True
仅用于开发环境,生产环境应禁用
-
应用入口:
if __name__ == '__main__'
确保代码作为脚本直接运行时才启动服务器
基础模版 base.html
<!DOCTYPE html>
<!-- 设置页面语言为简体中文 -->
<html lang="zh-CN">
<head><!-- 设置字符编码为 UTF-8 --><meta charset="UTF-8"><!-- 配置响应式布局,确保在移动设备上正确显示 --><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 使用 Jinja2 模板引擎的块标签,允许子模板覆盖页面标题 --><title>{% block title %}My website{% endblock %}</title><!-- 引入 Font Awesome 图标库 --><link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
</head>
<body><!-- 页面头部区域,通常包含导航栏 --><header><h1>nihao</h1><!-- 导航菜单,使用无序列表实现 --><nav><ul><li><a href="/">首页</a></li><li><a href="/about">关于</a></li><li><a href="/contact">联系我们</a></li></ul></nav></header><!-- 主内容区域,使用 Tailwind CSS 类实现居中布局和内边距 --><!-- container mx-auto 使内容居中,px-4 提供水平内边距,py-8 提供垂直内边距 --><main class="container mx-auto px-4 py-8"><!-- Jinja2 块标签,子模板将在这里插入具体内容 -->{% block content %}{% endblock %}</main><!-- 页脚区域,使用深灰色背景和白色文字 --><footer class="bg-gray-800 text-white py-8"><div class="container mx-auto px-4"><p>© 2025 版权所有</p></div></footer>
</body>
</html>
代码结构说明
- 文档类型与语言设置
<!DOCTYPE html>
声明使用 HTML5 标准lang="zh-CN"
指定页面语言为简体中文
- 头部元信息
- 字符编码设置
- 响应式布局配置
- 动态标题块(可被子模板覆盖)
- 外部资源引入
- 页面结构
<header>
:页面头部区域,包含网站标题和导航<main>
:主要内容区域,使用 Tailwind CSS 类实现响应式布局<footer>
:页脚区域,显示版权信息
- 模板继承机制
{% block title %}
:允许子模板自定义页面标题{% block content %}
:子模板的主要内容将插入此处
验证
用浏览器访问更加直观
http://192.168.10.101:5000/
CTYPE html>
nihao
首页
关于
联系我们
© 2025 版权所有
总结
Flask 的 “微框架” 特性使其成为灵活、高效的开发工具,尤其适合追求简洁性和自由度的开发者。无论是个人项目、企业级应用,还是 API 服务,Flask 都能以最小的学习成本实现强大功能。