Python实战:Flask轻量级web框架入门

Flask是一个轻量级的Web框架,它是由Armin Ronacher开发的,使用Python语言编写。Flask易于上手,具有高度的可扩展性,非常适合快速开发Web应用程序。

一.Flask简介

Flask是一个基于Werkzeug WSGI工具箱和Jinja2模板引擎的Web框架。与Django等其他Web框架相比,Flask更加轻量级,它没有内置的ORM、表单验证等功能,而是通过扩展来实现这些功能。这使得Flask更加灵活,可以根据项目的需求选择合适的扩展。

二.Flask安装

在开始使用Flask之前,需要确保已经安装了Python。Flask可以通过pip命令进行安装:

pip install Flask

三. Flask基础

1.Hello, World!

创建一个Flask应用程序非常简单。首先,创建一个名为app.py的文件,并输入以下代码:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():return 'Hello, World!'
if __name__ == '__main__':app.run()

这段代码创建了一个简单的Flask应用程序,当访问根URL(/)时,它会返回"Hello, World!"。

2.路由和视图函数

在Flask中,路由用于将URL映射到视图函数。在上面的示例中,@app.route('/')定义了一个路由,当用户访问根URL时,会调用hello_world视图函数。
Flask还支持动态路由,可以通过在路由中使用变量来捕获URL的一部分。例如,可以将用户ID作为URL的一部分:

@app.route('/user/<int:user_id>')
def show_user(user_id):return f'User ID: {user_id}'

在这个示例中,<int:user_id>定义了一个整数类型的变量,它将匹配URL中的整数部分,并将其作为参数传递给show_user视图函数。

3.模板引擎

Flask使用Jinja2作为模板引擎,可以动态生成HTML内容。首先,在项目目录中创建一个名为templates的文件夹,并在其中创建一个名为index.html的HTML文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask Template</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

接下来,在app.py中修改hello_world视图函数,使用render_template函数渲染模板:

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

在这个示例中,render_template函数接受模板文件名和要传递给模板的参数。在模板文件中,使用{{ name }}语法来插入变量。

四.Flask扩展

Flask的强大之处在于其丰富的扩展。以下是一些常用的Flask扩展:

1.Flask-Script

Flask-Script为Flask应用程序提供了命令行接口。安装Flask-Script:

pip install Flask-Script

app.py中,使用Manager类创建一个命令行接口:

from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
@app.route('/')
def hello_world():return 'Hello, World!'
if __name__ == '__main__':manager.run()

现在,可以通过命令行运行应用程序:

python app.py runserver

2.Flask-Migrate

Flask-Migrate是一个用于数据库迁移的Flask扩展,它基于Alembic。安装Flask-Migrate:

pip install Flask-Migrate

app.py中,首先需要初始化数据库迁移:

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(64), unique=True)
if __name__ == '__main__':manager.run()

现在,可以使用命令行创建数据库表:

python app.py db init
python app.py db migrate -m "Initial migration."
python app.py db upgrade

3.Flask-RESTful

Flask-RESTful是一个用于构建RESTful API的Flask扩展。安装Flask-RESTful:

pip install Flask-RESTful

app.py中,使用Api类创建一个RESTful API:

from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
class UserResource(Resource):def get(self, user_id):user = User.query.get_or_404(user_id)return {'username': user.username}
api.add_resource(UserResource, '/user/<int:user_id>')
if __name__ == '__main__':app.run()

在这个示例中,我们创建了一个UserResource类,它继承自Resource类。get方法用于处理GET请求,并返回用户名。add_resource方法将UserResource类注册为API资源。

五.结论

Flask是一个轻量级、灵活的Web框架,非常适合快速开发Web应用程序。通过本文的介绍,我们了解了Flask的基础知识,包括路由、视图函数、模板引擎和扩展。通过实际的项目经验,我们可以更好地掌握Flask,并利用其丰富的扩展来构建功能强大的Web应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753063.shtml

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

相关文章

thinkphp 微信商户转账到微信小程序用户零钱(v3密钥版)

这几天做项目有一个需求,小程序用户提交记录后,商家后台审核通过自动转账到用户的微信零钱中. 今天分享下如何实现自动打款, 一种是用v2密钥的接口:企业付款到零钱 一种是用v3密钥的接口:微信商户转账到零钱(听说是v2接口的微信商户容易被限制,后来就改成v3了) php后端代码 v3…

Linux中判断某个Docker容器服务的内存是否超过临界值,比如到达10G,则在凌晨4点执行定时任务执行重新构建命令

监测NAME是blade-jiangxinzhougarden的服务&#xff0c;如果内存&#xff08;MEM USAGE&#xff09;超过10G则在凌晨4点执行重新构建命令 1.编写脚本文件restart_jxz.sh #!/bin/bash# 设置要监控的容器名称或服务名称(替换成你的服务名) SERVICE_NAME"blade-jiangxinzhou…

正信晟锦:老板拖工资怎么说比较合适

在职场中&#xff0c;老板拖欠工资是一个敏感而棘手的问题。面对这一情况&#xff0c;员工应保持冷静与专业&#xff0c;采取合适的方式表达自己的合理关切&#xff0c;并寻求问题的解决。 私下与老板进行沟通。选择一个适当的时机&#xff0c;以尊重和理解的态度开场&#xff…

Leetcode 3084. Count Substrings Starting and Ending with Given Character

Leetcode 3084. Count Substrings Starting and Ending with Given Character 1. 解题思路2. 代码实现 题目链接&#xff1a;3084. Count Substrings Starting and Ending with Given Character 1. 解题思路 这一题其实挺简单的&#xff0c;只要看一下目标的character在stri…

数据库系统概论 第五版(王珊) 数据库课程实验

数据库系统概论 第五版(王珊) 数据库课程实验 定义基本表 8个基本表建表sql如下&#xff1a; CREATE TABLE Region(/*地区表*/regionkey INTEGER PRIMARY KEY ,name CHAR(25),COMMENT VARCHAR(152) );CREATE TABLE Nation (/*国家表*/nationkey integer PRIMARY KEY ,name c…

每日一题——LeetCode1694.重新格式化电话号码

方法一 模拟&#xff1a; 首先去除number里面的破折号和空格&#xff0c;取出纯数字组成的字符串str。 对于str每三个数分成一组&#xff0c;加一个破折号&#xff0c;当str的长度小于等于4时再分情况讨论&#xff0c;如果等于4就分为22形式&#xff0c;如果小于4&#xff0c…

Springboot 整合Mybatis 实现增删改查(二)

续上篇&#xff1a;Springboot整合Mybatis的详细案例图解分析-CSDN博客 mapper层&#xff08;StudentMapper&#xff09; //通过id查询student方法Student searchStudentById(int id);//通过id删除student方法int deleteStudentById(int id);//通过id增加student方法int inser…

基于springboot+vue的乡政府管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Fay数字人<助理版>具体编译步骤,手把手带你避坑 | 多图预警 ( python 3.11 编译环境 超详细教程 )

Fay数字人<助理版>具体编译步骤 系列教程环境描述一、搭建编译环境1、下载anaconda2、下载Fay(带货版)源码 二、Fay编译参数配置&#xff08;手把手教学&#xff09;(一)Fay具体编译步骤(二)配置 aliyun key(三)配置 aliyun 智能语音交互app(四)修改并配置自己的FAY数字…

解决后端传给前端的日期问题

解决方式&#xff1a; 1). 方式一 在属性上加上注解&#xff0c;对日期进行格式化 但这种方式&#xff0c;需要在每个时间属性上都要加上该注解&#xff0c;使用较麻烦&#xff0c;不能全局处理。 2). 方式二&#xff08;推荐 ) 在WebMvcConfiguration中扩展SpringMVC的消息转…

canal问题记录:something goes wrong when doing authentication: auth failed for user:

一、问题描述 部署了1.15服务端 canal.deployer-1.1.5 用于监听mysql的binlog日志&#xff0c;同时在项目中集成了canal client,用于在监听到指定数据表变化时自定义写入es。 服务端配置&#xff1a; 客户端配置&#xff1a; public void run() {// 创建链接CanalConnector …

全流程ArcGIS Pro技术应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

Trustzone和Tee的基本概念区分

Trustzone和Tee的基本概念区分 TrustZone:可信 区域,TrustZone是ARM处理器提供的一种特性或安全方案,而TEE是一个更广泛的概念,包含了TrustZone以及其他可以实现类似功能的解决方案。 ARM公司于2006年提出了一种硬件虚拟化技术TrustZone及其相关硬件实现方案。TrustZone即…

P3392 涂国旗 python解法

P3392 涂国旗 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) n,mmap(int,input().split()) arr[] ks[] ans100000000 #因为要比较最小值&#xff0c;这里由于数据较小可以设置这么大&#xff0c;数据要再大的话就设置最大常量 #前i行涂蓝成本b[i],涂红成本r[i],涂白成本w[i],…

代码随想录阅读笔记-哈希表【四数之和】

题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target&#xff0c;判断 nums 中是否存在四个元素 a&#xff0c;b&#xff0c;c 和 d &#xff0c;使得 a b c d 的值与 target 相等&#xff1f;找出所有满足条件且不重复的四元组。 注意&#xff1a;答案中不可以包…

Linux-find命令

在Linux下&#xff0c;要查找文件&#xff0c;可以使用find命令。find命令能够在指定的目录及其子目录中查找文件&#xff0c;并且支持使用多种条件进行过滤。 以下是find命令的基本用法&#xff1a; find <路径> <选项> <表达式> 常用选项包括&#xff1a;…

网络协议与层次划分:探索计算机网络体系结构

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Vulnhub - Symfonos

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Symfonos 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/symfonos-1,322/ 0x01 信息收集 …

鼎阳SDS6204示波器EPICS IOC的搭建

三年前曾写过这个文&#xff1a; 鼎阳SDS6204示波器的EPICS IOC调试 文章里有EPICS网站设备IOC搭建的指南&#xff0c;具体搭建IOC的步骤就没详细写了&#xff0c;几年后重新搭建时发现还是费了些力气才搭建起来&#xff0c;因此写此文记录下手把手的过程方便自己以及EPICS的初…

【论文阅读】MSGNet:学习多变量时间序列预测中的多尺度间序列相关性

MSGNet&#xff1a;学习多变量时间序列预测中的多尺度间序列相关性 文献介绍摘要总体介绍背景及当前面临的问题现有解决方案及其局限性本文的解决方案及其贡献 背景知识的相关工作背景知识问题表述&#xff1a; Method论文主要工作1.输入嵌入和剩余连接 (Input Embedding and R…