如何使用 Flask 框架创建简单的 Web 应用?
Flask是一个轻量级的Web应用框架,用Python编写,非常适合快速开发和原型设计。
它提供了必要的工具和技术来构建一个Web应用,同时保持核心简单,不强制使用特定的工具或库。
二、创建第一个Flask应用
- 安装Flask
首先,你需要安装Flask。你可以使用pip来安装:
pip install Flask
- 编写一个简单的Flask应用
创建一个名为app.py的文件,并添加以下代码:
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)
这段代码做了以下几件事:
- 导入Flask类。
- 创建一个Flask web服务器的实例
app。 - 使用
@app.route装饰器定义路由和对应的处理函数。在这里,我们定义了根URL('/')的处理函数为hello_world。 - 在
hello_world函数中,返回了一个字符串'Hello, World!'。 - 最后,通过
app.run()启动web服务器,并设置debug=True以便在开发过程中获得调试信息。
- 运行应用
在命令行中运行app.py:
python app.py
然后打开浏览器,访问http://127.0.0.1:5000/,你应该能看到"Hello, World!"的输出。
三、日常开发中的合理化使用建议
- 使用蓝图进行模块化
当你的应用变得复杂时,可以使用蓝图(Blueprints)来进行模块化。蓝图允许你将应用分割成更小的、可重用的组件。
例如,你可以创建一个名为users.py的蓝图文件:
from flask import Blueprintusers = Blueprint('users', __name__)@users.route('/users')
def users_route():return 'Users route'
然后在主应用文件中注册这个蓝图:
from flask import Flask
from users import usersapp = Flask(__name__)
app.register_blueprint(users)# ... 其他路由和配置 ...
- 使用模板引擎
Flask默认使用Jinja2作为模板引擎。你可以使用它来渲染HTML页面。
首先,在应用目录下创建一个templates文件夹,并在其中添加一个HTML文件,例如index.html:
<!DOCTYPE html>
<html>
<head><title>Home Page</title>
</head>
<body><h1>Welcome to the Home Page!</h1>
</body>
</html>
然后在Flask应用中渲染这个模板:
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def home():return render_template('index.html')# ... 其他路由和配置 ...
- 使用表单
Flask-WTF是一个流行的扩展,用于处理Web表单。它集成了WTForms,并提供了CSRF保护等功能。
首先安装Flask-WTF:
pip install Flask-WTF
然后创建一个表单类:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequiredclass MyForm(FlaskForm):name = StringField('Name', validators=[DataRequired()])submit = SubmitField('Submit')
在视图中使用这个表单:
from flask import Flask, render_template
from my_form import MyFormapp = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'@app.route('/', methods=['GET', 'POST'])
def home():form = MyForm()if form.validate_on_submit():# 处理表单数据return 'Form submitted!'return render_template('form.html', form=form)# ... 其他路由和配置 ...
- 数据库集成
Flask-SQLAlchemy是一个流行的ORM(对象关系映射)库,用于与数据库交互。
首先安装Flask-SQLAlchemy:
pip install Flask-SQLAlchemy
然后配置数据库并定义模型:
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///my_database.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(80), nullable=False)# ... 其他路由和配置 ...
四、实际开发过程中需要注意的点
- 安全性
- 始终使用HTTPS来保护数据传输。
- 使用Flask-Security或类似扩展来处理用户认证和授权。
- 避免SQL注入攻击,使用ORM或参数化查询。
- 使用CSRF保护来防止跨站请求伪造攻击。
- 性能优化
- 使用缓存来减少数据库查询次数。
- 使用Gunicorn或uWSGI等WSGI服务器来部署应用,以提高性能。
- 使用负载均衡和反向代理来扩展应用。
- 代码结构和可维护性
- 使用蓝图进行模块化,保持代码结构清晰。
- 编写单元测试和集成测试,确保代码质量。
- 使用版本控制系统(如Git)来管理代码。
- 错误处理和日志记录
- 使用Flask的错误处理机制来捕获和处理异常。
- 使用Python的logging模块来记录日志,以便于调试和监控。
相关文章:
如何使用 Flask 框架创建简单的 Web 应用?
Flask是一个轻量级的Web应用框架,用Python编写,非常适合快速开发和原型设计。 它提供了必要的工具和技术来构建一个Web应用,同时保持核心简单,不强制使用特定的工具或库。 二、创建第一个Flask应用 安装Flask 首先,…...
将Minio设置为Django的默认Storage(django-storages)
这里写自定义目录标题 前置说明静态文件收集静态文件 使用django-storages来使Django集成Minio安装依赖settings.py测试收集静态文件测试媒体文件 前置说明 静态文件 Django默认的Storage是本地,项目中的CSS、图片、JS都是静态文件。一般会将静态文件放到一个单独…...
sed | 一些关于 sed 的笔记
sed 总结 sed 语法sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]--- 参数:-e<script> 以选项中指定的script 来处理输入的文本文件-f<script文件> 以选项中指定的script 文件来处理输入的文本文件-n 禁用 pattern space 的默认输出…...
wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新
背景: 在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情,特别是想不自定义前端view的情况下。 材料: wtformsflask_sqlalchemy 制作: 上代码 1、模型代码 from .exts import db from …...
AI的进阶之路:从机器学习到深度学习的演变(三)
(承接上集:AI的进阶之路:从机器学习到深度学习的演变(二)) 四、深度学习(DL):机器学习的革命性突破 深度学习(DL)作为机器学习的一个重要分支&am…...
thinkphp 多选框
视图 <div class"form-group"><label for"c-flag" class"control-label col-xs-12 col-sm-2 col-md-4">{:__(Flag)}</label><div class"col-xs-12 col-sm-8 col-md-8"><!--formatter:off--><select …...
机器学习《西瓜书》学习笔记《待续》
如果说,计算机科学是研究关于“算法”的学问,那么机器学习就是研究关于“学习算法”的学问。 目录 绪论引言基本术语 扩展向量的张成-span使用Markdown语法编写数学公式希腊字母的LaTex语法插入一些数学的结构插入定界符插入一些可变大小的符号插入一些函…...
STM32HAL I2C函数
8.5 使用IIC协议读写EEPROM 硬件方式实现 (HAL库) **HAL_I2C_Mem_Write() :这种方法可以写1个或者多个字节 ** /*** brief 以阻塞模式向指定的内存地址写入数据* param hi2c 指向 I2C_HandleTypeDef 结构体的指针,包含指定 I2C 的配置信息…...
洛谷 P1644 跳马问题 C语言
题目: P1644 跳马问题 - 洛谷 | 计算机科学教育新生态 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧…… 题目描述 中国象棋半张棋盘如图 1 所示。马自左下角 (0,0) 向右上角 (m,n) 跳。规定只能往右跳,不准往左跳。比…...
每天40分玩转Django:实操在线商城
实操在线商城 一、今日学习内容概述 模块重要程度主要内容商品模型⭐⭐⭐⭐⭐商品信息、分类管理购物车系统⭐⭐⭐⭐⭐购物车功能实现订单系统⭐⭐⭐⭐⭐订单处理、支付集成用户中心⭐⭐⭐⭐订单管理、个人信息 二、模型设计 # models.py from django.db import models fro…...
Bug解决!ImportError: cannot import name MutableMapping from collections
省流:python版本更新 而一些生态库的变量命名没更新变化导致的问题 起因是在win环境下装spark 但是发现这是python底层的问题 于是想写一篇这个错误的博客警戒世人 py实在是太多生态库了 但并不是所有的都维护的很好 大概可以理解成 python原先有个东西叫col…...
【Rust自学】4.5. 切片(Slice)
4.5.0. 写在正文之前 这是第四章的最后一篇文章了,在这里也顺便对这章做一个总结: 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况,但是当数据所有者超…...
医学图像 三维重建,原图与灰度图叠加,原图与多图叠加显示;多图像融合显示,彩色灰度图像融合
Part1: Summary 我们在做图像分割或融合时,有时需要显示多份数据进行叠加显示;可能需要这种效果: 四视图: 基于这个,我看一下网上的实现总结了一下;实现了以下几种效果: Part2:多种…...
递归实现指数型枚举(递归)
92. 递归实现指数型枚举 - AcWing题库 每个数有选和不选两种情况 我们把每个数看成每层,可以画出一个递归搜索树 叶子节点就是我们的答案 很容易写出每dfs函数 dfs传入一个u表示层数 当层数大于我们n时,去判断每个数字的选择情况,输出被选…...
Unity实现Root Motion动画的Navigation自动导航
Root motion动画可以将角色的根节点(通常是角色的骨盆或脚部)的运动直接应用到游戏对象上,从而实现角色的自然移动和旋转,避免出现脚底打滑的现象。采用Root motion动画的游戏对象,通常是重载了onAnimatorMove函数&…...
[react]不能将类型“string | undefined”分配给类型“To”。 不能将类型“undefined”分配给类型“To”
场景, 封装组件的时候, 想通过外部传进去一个路由地址, 再用<Link to{}>跳转, 显示这个, 有四种方法解决 第一种 合并运算符 ?? ?? 是 空值合并运算符(Nullish Coalescing Operator),它是 JavaScript 和 TypeScript 中的一种逻辑…...
python实现基于RPC协议的接口自动化测试
01 什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程…...
如何使用PSQL Tool还原pg数据库(sql格式)
新建一个数据库用来还原;选择新建的数据库,右键选择【PSQL Tool】,打开PSQL Tool命令行界面;赋予pg库对sql文件的执行权限,否则会报“Permission denied”的错误,命令如下: chmod urwx D://NoS…...
uni-app商品搜索页面
目录 一:功能概述 二:功能实现 一:功能概述 商品搜索页面,可以根据商品品牌,商品分类,商品价格等信息实现商品搜索和列表展示。 二:功能实现 1:商品搜索数据 <view class="search-map padding-main bg-base"> <view class…...
【深度学习】零基础介绍循环神经网络(RNN)
RNN介绍 零基础介绍语言处理技术基本介绍分词算法词法分析工具文本分类与聚类情感分析 自然语言处理词向量词向量学习模型1. 神经网络语言模型2. CBOW 和 skip-gram3. 层次化softmax方法4. 负采样方法 RNN介绍RNN的变种:LSTM1. Forget Gate2. Input Gate3. Update M…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
