Web 框架 Flask 快速入门(一)flask基础与模板

news2025/3/12 9:40:31

前言

课程地址:Python Web 框架 Flask 快速入门

文章目录

  • 前言
  • 🌴 Flask基础和模板
    • 🌷 一个简单的flask程序
    • 🌼 模板的使用


🌴 Flask基础和模板

1、web框架的作用

避免重复造轮子,app程序不必关心于服务器的沟通方式,而专注于核心的业务逻辑实现。

  • 稳定,可扩展性强
  • 开发效率高

flask是一个轻量级的Web开发框架,python常见的web开发框架还有Django、Tornado。但轻量不等于弱,因为可以引入各种扩展,就像python可以安装各种库一样。

2、安装flask库

pip install flask

🌷 一个简单的flask程序

程序代码:

# 1. 导入Flask扩展
from flask import Flask, render_template

# 2. 创建Flask应用程序示例
# 需传入__name__,作用是为了确定资源所在路径
app = Flask(__name__)

# 3. 定义路由及视图函数
# Flask中定义路由是通过装饰器实现
@app.route('/', methods=['GET', 'POST'])
def hello_world():
    return '<h1>Hello, flask!</h1>'

# 使用同一个视图函数,来显示不同用户的订单信息
# <>定义路由的参数
@app.route('/orders/<int:order_id>')
def get_order_id(order_id):
    # 需要在视图函数的()内填入参数名,后面的代码才能去使用
    # 有时,需要对路由做访问优化,订单ID应该是int类型
    return '<h2>order_id %s</h2>' % order_id

# 4. -- main --
# 会将Flask程序运行在一个简易服务器上(Flask提供,用于测试)
app.run()

这个程序的hello_world()实现了对根目录请求的响应,此时程序就只有一个固定的响应方式。


下面的get_order_id实现了对路径/orders/...的响应,<int:order_id>表示url的这一部分将被解析为一个参数数据传入(url不用?order_id=1这种写法,也可以传递参数,而这取决于程序对url的解析方法)。


可以使用Edge的Postwoman插件对请求进行测试,

对根目录的请求时,返回

<h1>Hello, flask!</h1>

/orders/666目录发送请求时,返回

<h2>order_id 666</h2>

当请求不符合规定时,就会返回错误,例如代码中<int:order_id>要求了order_id只能是一个整数,当url使用http://127.0.0.1:5000/orders/a 时,返回

<!doctype html>
<html lang=en>
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>

🌼 模板的使用

flask库中有一个内置的模板引擎,叫做Jinjia2。

为什么用模板引擎?

我们不希望Server仅返回一个字符串,而是返回一整个网页。而且不应该只能返回写死的网页,而要可以动态地填充数据。一个可以填充数据的网页,就可以成为“模板”。

使用flask模板时的目录结构:

flask_template_demo.py
templates
- index.html

flask的render_template会自动在templates目录下找html文件,所以我们的html需要放在该目录下。

html中的代码块

  • 变量代码块

    {{ 变量名 }}
    
  • 控制代码块

    有if、else、for,例如:

    {{% for %}}
    	...
    {{% endfor %}}
    

render_template

将写好的html文件(模板网页),和变量,都作为参数传递给render_template(),它就会将变量填充(填充方式在html中实现)到模板中,形成最终的网页,最后返回。

index.html文件代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title></title>
    </head>
    <body>
        这是模板<br>
        这是首页<br>
        {{url_str}}<br>
        <!-- 列表的使用 -->
        {{my_list}}<br>
        {{ my_list[1] }}<br>
        {{ my_list.3 }}<br>
        <!-- 字典的使用 -->
        {{my_dict}}<br>
        {{my_dict.url}}<br>
        {{my_dict['name']}}<br>

        <hr>

        <!-- for循环的使用 -->
        {% for num in my_list %}
            {% if num > 3 %}
                {{num}}<br>
            {% endif %}
        {% endfor %}

        <hr>

        <!-- 过滤器使用 -->
        <!-- 字符串变大写 -->
        {{ url_str | upper}}<br>
        <!-- 字符串反转 -->
        {{ url_str | reverse}}<br>
        <!-- 大写后反转 -->
        {{ url_str | upper | reverse}}<br>

    </body>
</html>

flask_template_demo.py文件代码

from flask import Flask, render_template

app = Flask(__name__)

# 1. 如何返回一个网页(模板)
# 2. 如何给模板填充数据
@app.route('/')
def index():
    # 准备转入到网页模板中的变量
    url_str = 'www.baidu.com'
    my_list = [1, 3, 5, 7, 9]
    my_dict = {
        'name': '程序员',
        'url': 'www.baidu.com'
    }
    # 通常模板中使用的变量名,和传入的变量名保持一致
    return render_template(
        'index.html', 
        url_str=url_str, 
        my_list=my_list, 
        my_dict=my_dict)

# 运行程序
app.run(debug=True)


程序运行效果

网页上渲染显示:

在这里插入图片描述

也可以看看返回的源代码。


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

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

相关文章

java agent设计开发概要

agent开发设计 agent 开发的一些心得&#xff0c;适合熟悉agent或者有agent开发需求的同学 1 有个基础的agent&#xff0c;是java 标准的agent。这是agent代码入口 2 设计包结构&#xff0c; 基础agent agent下有plugin,加载plugin可以自己定义一个类加载器 plugin&#xff1…

C++——多态 上

目录 一、概念 二、多态的定义及实现 三、动态多态的实现条件 四、重写相关 五、构成重写与同名隐藏的函数有什么区别&#xff1f; 六、C11 中的override 和 final 一、概念 通俗来说&#xff0c;就是多种形态&#xff0c;当完成某个行为时&#xff0c;当不同的对象去完…

Python 手写数字识别 MNIST数据集下载失败

目录 一、MNIST数据集下载失败 1 失败的解决办法&#xff08;经验教训&#xff09;&#xff1a; 2 亲测有效的解决方法&#xff1a; 一、MNIST数据集下载失败 场景复现&#xff1a;想要pytorchMINIST数据集来实现手写数字识别&#xff0c;首先就是进行MNIST数据集的下载&am…

Fastjson踩“坑”记录和“深度”学习

作者&#xff1a;陶征策 阿里国际站商家技术团队 Fastjson是阿里开发的Java语言编写的高性能JSON库&#xff0c;本文总结了Fastjson使用时的一些注意事项&#xff0c;并简单分析了Fastjson的底层工作原理&#xff0c;结合具体的验证代码以及跟Jackson的对比&#xff0c;希望能…

非代码的贡献也能成为Committer,我与DolphinScheduler社区的故事

点亮 ⭐️ Star 照亮开源之路 https://github.com/apache/dolphinscheduler ​ // 每个人对于”开源社区“的定义都不一样&#xff0c;在社区的想法也完全不一样&#xff0c;我认为玩开源就像”谈恋爱“&#xff0c;要想方设法对它好&#xff0c;在接触 Apache DolphinSche…

nodejs+vue毕业生求职招聘平台系统

前台首页功能模块毕业生信息招聘平台首页、空中宣讲会、招聘岗位、求职信息、论坛信息、试卷列表、招聘资讯、个人中心、后台管理功能。论坛中心试卷列表招聘资讯管理员功能模块管理员登录空中宣讲会管理招聘岗位管理毕业生管理企业功能模块招聘岗位管理信息咨询管理线上面试管…

java实现二叉树(一文带你详细了解二叉树的)

&#x1f387;&#x1f387;&#x1f387;作者&#xff1a; 小鱼不会骑车 &#x1f386;&#x1f386;&#x1f386;专栏&#xff1a; 《数据结构》 &#x1f393;&#x1f393;&#x1f393;个人简介&#xff1a; 一名专科大一在读的小比特&#xff0c;努力学习编程是我唯一…

JDBC与Druid连接池

1 什么是jdbc? JDBC&#xff08;java database connectivity &#xff09;是Java语言连接操作关系型数据库的一套解决方案&#xff0c;屏蔽了底层各数据库不同的差异。 具体是通过sun公司定义的统一的一套API【标准接口】来实现解决差异&#xff0c; 具体实现是各大数据库厂商…

【数据库】 mysql的四种安装方式

目录 MySQL 安装部署 一&#xff0c;仓库安装 二&#xff0c;本地安装 三&#xff0c;容器安装 四&#xff0c;源码安装 MySQL 安装部署 一&#xff0c;仓库安装 1&#xff0c;使用rpm命令从指定的网址装包 ​ [rootlocalhost yum.repos.d]# rpm -ivh https://repo.mys…

每日学术速递2.10

Subjects: cs.Cv 1.Spatiotemporal Deformation Perception for Fisheye Video Rectification 标题&#xff1a;鱼眼视频矫正的时空形变感知 作者&#xff1a;Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao 文章链接&#xff1a;https://arxiv.org/abs/2302.03934v1 项…

【手写 Vuex 源码】第四篇 - Vuex 中 Getters 的实现

一&#xff0c;前言 上篇&#xff0c;主要介绍了 Vuex 中 State 状态的实现&#xff0c;主要涉及以下几个点&#xff1a; 创建 Store 类中的 State 状态&#xff1b;借助 Vue 实现 State 状态的响应式&#xff1b; 本篇&#xff0c;继续介绍 Vuex 中 getters 的实现&#xf…

VHDL语言基础-时序逻辑电路-寄存器

目录 寄存器的设计&#xff1a; 多位寄存器&#xff1a; 多位寄存器的VHDL描述: 移位寄存器&#xff1a; 串进并出的移位寄存器的VHDL描述: 寄存器的设计&#xff1a; 多位寄存器&#xff1a; 一个D触发器就是一位寄存器&#xff0c;如果需要多位寄存器&…

飞凌嵌入式RK3568J核心板助力工业机器人产业迈向高质量发展新阶段

工业机器人是能够代替人工完成高强度重复工作的多自由度机器装置&#xff0c;不仅可以确保产品质量&#xff0c;还可以大幅提高生产效率。据工信部数据显示&#xff0c;“十三五”期间我国工业机器人产量从7.2万套增长到了21.2万套&#xff0c;年均增长31%&#xff0c;预计2023…

切换分支报错:Untracked Files Prevent Checkout

切换分支报错&#xff1a;Untracked Files Prevent Checkoutgit分支切换 Untracked Files Prevent Checkout本人解决办法&#xff1a;git分支切换 Untracked Files Prevent Checkout 新起的项目在切换master分支到工作分支时&#xff0c;出现下图的问题&#xff1a; Untracked…

【机器学习】过拟合与正则化

上一章——逻辑回归 文章目录三种拟合状态解决过拟合的三种方法什么是正则化正则化的数学原理线性回归恭喜三种拟合状态 在之前的课程中&#xff0c;我们说过机器学习的中极为重要的一步&#xff0c;就是给训练集找到一条合适的拟合曲线。 还是以房价问题这个回归问题为例&…

【微服务】微服务架构超强讲解,通俗易懂

微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA&#xff08;service oriented architecture&#xff09;和微服务的区别1、SOA喜欢重用&#xff0c;微服务喜欢重写2、SOA喜欢水平服务&#xff0c;微…

Linux教程:MQTT入门基础概念与学习介绍及服务部署搭建并使用桌面工具进行测试开发

前言&#xff1a; ----在2023年的今天&#xff0c;智能家居与智能家电的兴起犹如滚滚长江迅速袭来&#xff0c;智能终端设备也不断出现在人们的视野当中&#xff0c;实现远程控制&#xff0c;其中必然不能缺少终端与终端&#xff0c;终端与服务之间的交互&#xff0c;如何来解…

ag-Grid Enterprise

ag-Grid Enterprise Ag-Grid被描述为一种商业产品&#xff0c;已在EULA下分发&#xff0c;它非常先进&#xff0c;性能就像Row分组一样&#xff0c;还有范围选择、master和case、行的服务器端模型等等。 ag Grid Enterprise的巨大特点&#xff1a; 它具有以下功能和属性&#x…

Docker调用Intel集显实现FFmpeg硬解码

文章目录Docker调用Intel集显实现FFmpeg硬解码参考FFmpeg 集成qsv方式一 容器完成所有步骤方式二 容器完成部分步骤方式三 dockerfile部署Docker调用Intel集显实现FFmpeg硬解码 参考 ffmpeg_qsv_docker拉取该镜像可以实现FFmpeg集成vaapi的硬加速&#xff0c;通过dockerfile文…

什么是特权访问管理(PAM)

特权访问管理 &#xff08;PAM&#xff09; 是指一组 IT 安全管理原则&#xff0c;可帮助企业隔离和管理特权访问、管理特权帐户和凭据、控制谁可以获得对哪些端点的管理访问权限级别&#xff0c;并监视用户对该访问权限执行的操作。 什么是特权访问 特权访问是一种 IT 系统访…