Python Flask 编程 | 连载 09 - Jinja2 模板特性

Flask SSTI漏洞实战:从Jinja2模板注入到沙箱逃逸 服务器端模板注入(SSTI)是一种严重的安全漏洞,攻击者通过将恶意代码注入服务器端模板,利用模板引擎的渲染机制执行任意命令。其原理在于模板引擎将用户输入误解析为模板语法而非普通数据,从而绕过沙箱限制。该漏洞的技术价值在于能够直接控制服务器,实现文件读取、命令执行等高危操作,在CTF竞赛和真实Web应用渗透测试中具有重要地位。应用场景广泛存在于使用Jinja2、Twig等模板引擎的Web框架中,特别是Flask、Django等Python生态。本文以Flask-SSTI-labs靶场为例,深入解析Jinja2 阅读详情

一、模板的宏

宏,相当于函数,可以把常用功能抽取出来实现重用。HTML 中也会出现重复的代码,将重复的 HTML 代码抽取出来就成为模板的宏,模板的宏是可以写在单独的 HTML 文件中。

模板中的宏的定义需要使用到 macro 关键字。

html
复制代码
{% marco 宏的名字%}
<!--HTML代码-->
{% endmarco %}

在 templates 文件夹下创建 marco.html 页面,定义并使用宏。

html
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<form action="">
    <!--定义一个宏-->
    {% macro input(name, type='text', value='')%}
        <div>
            <input class="input-control class2" type="{{ type }}" name="{{ name }}" value="{{ value }}">
        </div>
    {% endmacro %}
    
    {#  使用宏  #}
    <p>用户名:{{ input('username', value='admin') }}</p>
    {#  密码 password  #}
    <p>密 码:{{ input('password', type='password') }}</p>

</form>
</body>
</html>

这里通过宏定义了一个 input 输入框,并定义了一些参数以及设置了默认值。

在 app.py 中定义一个视图函数,该视图函数返回 marco.html 页面

python
复制代码
@app.route('/marco')
def marco():
    return render_template('macro.html')

重新启动项目,浏览器访问 /marco。

image.png

页面中显示了两个输入框,并且第一个输入框显示了设置的默认值,并且 input 框的文本类型也是通过 type 参数传递的类型。

在项目中并不会把宏的定义的代码和调用代码放在一个文件中,将宏的定义保存在 marco.html 页面中中,新建一个 form.html 并且通过 from ... import ... 来导入定义好的宏。

html
复制代码
<form action="">

    <h2>导入并使用宏创建登录表单</h2>
    {% from 'macro.html' import input %}
   
    Username: {{ input('username', value='stark') }}
    Password: {{ input('password', type='password') }}
</form>

新建一个视图函数 forms,该函数返回 forms.html。

python
复制代码
@app.route('/forms')
def forms():
    return render_template('forms.html')

保存代码,浏览器访问 /forms。

image.png

二、模板抽象,继承与包含

模板继承

在项目中每个页面都使用了公共的导航栏和底部栏,引用了公共的 js 和 css 等静态文件,这种情况下就可以使用模板的继承,既可以通过 extends 关键字继承一个基本的页面,这个页面中包含了公共的导航栏、静态文件等,在基本页面中使用 block 关键字来定义需要重写的内容。

继承的实现大概分为三个步骤:

  1. 首先在被继承的基本页面中通过 block 关键字定义需要重写的内容
  2. 接着在新的页面中使用 extends 关键字来继承基本页面
  3. 最后就可以在新的页面中通过 block 重写新的内容
  4. 如果有的页面无须重写 block 块的内容,也可以使用 super() 关键字来复用被继承页面中的内容。

在 templates 模板下新建基本页面 base.html,将公共的 html 代码放入 base.html 中,这里通过 block 定义了 title 和 content 两个需要重写的块。

html
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    {% block title %}
    <title>Title</title>
    {% endblock %}
</head>
<body>
    <div class="contain">
        <header>
            页面头部
        </header>
        <article>
            {% block content %}
                主体内容
            {% endblock %}
        </article>
        <footer>
            页面底部
        </footer>
    </div>
</body>
</html>

新增 extends.html 并继承 base.html,只需要通过 block 关键字填充中间内容即可

html
复制代码
{% extends 'base.html' %}

{% block title %}
<title>第一个继承实现的页面</title>
{% endblock %}

{% block content %}
    <h2>这是重写了 base.html 中的 content 部分的内容</h2>
{% endblock %}

新增视图函数 extends。

python
复制代码
@app.route('/extends')
def extends():
    return render_template('extends.html')

保存代码,并在浏览器中请求 /extends。

image.png

此时如果需要修改样式或者引用的文件,只需要修改 base.html 即可,比如修改 base.html 的 header,在 heade 标签中增加 css 样式。

html
复制代码
<!--其余代码保持不变-->
<style type="text/css">
    div header {
        background-color: rebeccapurple;
    }
</style>

保存代码后,再次访问 /extends。

image.png

可以看出 extends.html 页面的头部也随之更改。

当然如果不想重写 base.html 页面中定义的 block 块,也可以使用 super() 关键字来复用 base.html 页面中的内容。

修改 extends.html 页面,复用 base.html 中 content block 块的内容,并增加新的内容。

html
复制代码
<!--其余代码保持不变-->

{% block content %}
    <h2>复用 base.html 中的 content 部分的内容</h2>
    {{ super() }}
    <P> 主体内容 2</P>
    <P> 主体内容 3</P>
{% endblock %}

保存代码后,再次访问 /extends。

image.png

base.html 中 content block 块的内容被保留。

模板包含

include 标签

当公共的模块不是所有的页面都会使用,比如导航条,可能只有一半的页面会使用同一个导航条,这是后就可以将这个导航条单独拆出来到一个页面,相当于定义一个接口,当有页面需要使用这个导航条时,可以使用 include 关键字引入。

使用模板包含大概分为几个步骤:

  1. 首先将只有部分页面才使用的导航栏单独拆到一个页面中
  2. 接着在有需要使用导航栏的页面通过 include 关键字引入

新建一个 side.html 页面,保持只有部分页面使用的导航栏。

html
复制代码
<p>这是一个只有部分页面才使用的导航</p>

在 extends.html 页面中引入这个导航栏,如果页面不需要就可以不引入。

html
复制代码
{% block content %}
    <h2>引入导航栏</h2>
    {% include 'side.html' %}
    <h2>复用 base.html 中的 content 部分的内容</h2>
    {{ super() }}
    <P> 主体内容 2</P>
    <P> 主体内容 3</P>

{% endblock %}
bash
复制代码
保存代码后,再次访问 */extends*。

image.png

通过模板的包含引入了在独立页面中定义的导航栏。

继承与包含的区别

继承使用关键字 extends 并使用 block 关键字定义和使用代码块,被继承的页面中包含了所有公共的内容,类似于 Java 中的类或者抽象类,而包含则是使用 include 关键字来引入代码块,相当于接口的定义,并不适用于所有页面,如果有需要可以引入。

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

SSTI漏洞攻防实战:从模板注入到远程代码执行 服务器端模板注入(SSTI)是一种高危的Web安全漏洞,其核心原理在于模板引擎未能正确区分数据与代码的边界。当用户输入被直接拼接到模板字符串中时,攻击者可以注入恶意模板语法,从而在服务器端执行任意代码。这种漏洞的技术价值在于它直接绕过了应用逻辑层,实现了从用户输入到服务器命令执行的路径打通,危害性极大。在应用场景上,SSTI常见于邮件模板、报告生成、内容管理系统等需要动态渲染内容的Web功能中。本文聚焦于SSTI漏洞的检测与利用,深入剖析了如何通过模糊测试、引擎指纹识别(如Jinja2、FreeMarker 阅读详情

相关推荐

Flask项目安全防护实战:从SQL注入到CSRF的全面防御指南

在Web开发领域,安全防护是构建可靠应用的核心基础。其原理在于通过分层防御体系,在数据输入、业务处理、输出响应等各环节实施安全控制,从而保障应用免受恶意攻击。从技术价值看,有效的安全措施能防止数据泄露、服务中断和财产损失,是项目成功上线的关键保障。无论是电商平台、内容管理系统还是API服务,安全都是不可或缺的要素。本文聚焦Flask框架,针对SQL注入、CSRF等常见漏洞,提供从输入验证到生产环境配置的完整解决方案,帮助开发者构建坚固的Web应用防线。

areen7003的博客 371

flask之jinja2入门

一、宏 用于提高代码复用率 最简单封装好的对象 1、宏的定义 使用macro定义 {% macro func1(label='',type='text',name='') %} <label>{{label}}</label><input type="{{type}}" name="{{name}}"> {% endmacro %} 2...

changfcqxhy的博客 1767

Python Web安全实战:四大核心漏洞原理与防御详解

Web安全是软件开发的基石,其核心在于正确处理用户输入与系统信任边界。从原理层面看,SQL注入、XSS、CSRF和SSRF等漏洞均源于对用户输入数据的过度信任或不当处理。理解这些漏洞的成因与利用方式,不仅能提升代码安全性,更是进行渗透测试、漏洞挖掘等安全实践的基础。在工程实践中,参数化查询、输出编码、CSRF Token和请求过滤等技术构成了有效的防御体系。例如,针对SQL注入,应强制使用参数化查询而非字符串拼接;对于XSS,需在输出时进行HTML实体编码。这些防护措施与安全HTTP头、依赖库管理等共同构建

449

python Flask之JinJa2

文章目录什么是jinja2过滤器使用方式:常见的过滤器字符串操作列表操作自定义过滤器两种方法方法一(调用)方法二(装饰器)流程控制语句: 什么是jinja2 Jinja2是Python下一个被广泛应用的模版引擎,要想使用Jinja2模板,需要从flask导入render_template函数,然后在路由函数中调用render_template函数 过滤器 过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用 Python 中的某

qq_48082548的博客 1423

Flask原型链污染攻击:从漏洞利用到调试PIN码计算全解析

原型链污染是一种常见的安全漏洞,它允许攻击者通过操纵对象的原型链来修改应用程序的行为。在JavaScript和Python等语言中,当程序对用户输入进行不安全的递归合并操作时,就可能引发此类问题。其技术原理在于利用语言特性,通过特殊属性(如__proto__或__init__)污染基础对象,进而影响整个应用状态。这种漏洞的价值在于它能够绕过常规的输入验证,实现权限提升或数据篡改。在Web安全领域,特别是在CTF竞赛和渗透测试中,原型链污染常被用于攻击流行的框架如Flask。当Flask应用开启调试模式时,会

weixin_30613343的博客 384

CTF Web实战:从基础绕过到PHP反序列化与Flask Session伪造的九大核心技巧

在网络安全领域,Web安全是核心方向之一,涉及对Web应用漏洞的挖掘与利用。其原理在于攻击者通过构造恶意输入,利用应用程序逻辑或处理缺陷,实现未授权访问、信息泄露或命令执行。掌握Web安全技术对于提升系统防护能力、理解攻击链至关重要,广泛应用于渗透测试、CTF竞赛和安全研发等场景。本文聚焦CTF Web实战,深入剖析PHP伪随机数预测、反序列化POP链构造等关键技术。通过解析mt_rand()函数的确定性特征,演示如何从已知输出反推种子;同时,详解利用PHAR协议及魔术方法链(如__destruct、__t

weixin_30335353的博客 447

Flask中的jinja2模板介绍与使用

Flask中的jinja2模板介绍与使用

IT之一小佬的博客 1550

Trae Solo模式:本地化API文档自动生成系统

API文档自动化是现代软件工程中提升协作效率与交付质量的基础能力。其核心原理在于从代码结构(如Spring Boot Controller、Swagger注解)中静态解析接口元数据,并通过模板引擎实现多格式(HTML/Word/PDF)一致性渲染。技术价值体现在消除人工撰写误差、保障文档与代码同步、满足金融/政务等场景的离线与数据不出域要求。典型应用场景包括CI/CD流水线集成、内网安全审计环境下的文档交付,以及跨角色(开发/测试/产品)的标准化契约共享。Trae Solo模式正是这一能力的轻量级落地实践,

weixin_30385925的博客 338

flask——2:flask模板——使用Jinja2

一,模板引擎 flask使用Jinja2引擎来渲染模板。 1,什么是模板 简单来说,在web应用开发中,后端主要负责业务逻辑,完成请求与相应的逻辑处理及数据读写,前端主要负责表现逻辑,完成应用界面表现与交互逻辑。为了实现前后端的解耦,分离前后端逻辑,就可以将表现逻辑分离出来交友模板通过模板引擎渲染来实现。 这样看来,其实模板就是包含静态与动态内容的网页内容。 2,什么是Jinja2 Jinja是一种现代的、对设计人员友好的Python模板语言。它具有快速、广泛使用和安全的特性,并且具有可选的沙箱模板执行环境

dangfulin的博客 5348

Shader Graph入门

Shader Graph 简介

zaizai1007的博客 1万+

零代码搭建专业知识库:Wiki.js+cpolar让团队协作像写笔记一样简单

"项目文档又找不到了!“团队负责人小张第N次在群里看到这样的抱怨——技术文档分散在邮件、网盘和个人电脑里,新人入职要花一周熟悉文档位置,远程协作时版本混乱更是家常便饭。Wiki.js与cpolar内网穿透服务的出现,就像给团队协作装上了"中央大脑”,用写Markdown笔记的简单方式,搭建一个专业的知识库系统。普通人对知识管理的需求其实很简单:方便记录、容易查找、大家能用。但传统方案把这个过程搞得异常复杂:建服务器、配环境、学语法、搞权限……大部分团队还没开始就放弃了。

Yawesh的博客 2040

Flask教程3:jinja2模板引擎

文件,第二个(及后续)参数为可选项,用于向模板中传递变量。修改格式,我们可以在变量后添加括号,并在括号内定义。模板的第一个参数为指定的模板文件名称,如自定义的。来实现模板的渲染,要使用这个方法,我们需要导入。等属性 → \rightarrow →点击查看。如果想给该变量添加属性便于。

Cachel Wood的博客 1139

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

Jinja 版本演进全解析:从 CHANGES.rst 看 Jinja2 模板引擎的十年变迁

本文以 Jinja 仓库中的官方变更日志 [CHANGES.rst](https://link.gitcode.com/i/2c0b855dfd1913195abe34479e2dd90d) 为骨架,系统梳理 Jinja2 模板引擎从 2.0rc1 到 3.2.0 的完整演进史,覆盖安全修复、异步支持、Undefined 语义、沙箱机制、i18n 国际化、加载器与字节码缓存等核心模块的变迁脉络。读

gitblog_00929的博客 466

04目标检测-Two-stage的目标检测算法

前面我们对进行了对比分析,同时上一篇我们介绍了传统算法在目标检测的原理和效果,此篇我们记录了我学习目标检测算法的深度,深入讲述一下深度学习算法在目标检测的原理和效果。原文链接:https://blog.youkuaiyun.com/qq_41946216/article/details/132800752。版权声明:本文为优快云博主「爱吃面的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。One-stage(YOLO和SSD系列):直接回归目标位置。

qq_41946216的博客 3650

(入门向)在Ubuntu22.04.3安装Matlab2021b,以及无法安装在当前目录下的解决办法(见最后)

还有这个/usr/local是只读状态,我试过sudo chmod..去改那个文件的读,结果还是安装不了,我不是这个默认路径,因为它文件夹还是只读,于是我在matlab2021b下创了一个bin,并选上。输入完成后,依次按y,因为里面有三个文件,他会让你确定3次密码,直接yyy跳过即可。你可能会遇到装不下的情况,这个软件占30g,可是你分配给虚拟机就剩10g。,于是我去Downloads下建了一个matlab2021b文件夹,果然好使,3).此时,会提示你输入密码,因为这个rar是有密码的,

harrype的博客 7286

Flask Web 开发全攻略:3 个步骤教你玩转路由与模板

在当今的数字化时代,Web 开发已经成为编程领域中最热门的技能之一。无论是构建个人博客、电商平台还是企业级应用,掌握一个简单易用的 Web 框架都能让你事半功倍。Flask,作为 Python 生态系统中一个轻量级的 Web 框架,以其简洁性和灵活性受到广大开发者的喜爱。本文将带你从零开始,学习Flask 框架的安装与使用创建简单的 Web 应用,以及路由与模板引擎的核心知识。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供清晰的操作步骤和实用示例,助你快速入门 Web 开发!

吴师兄大模型的博客 1048

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1706

鸣潮自动化助手配置教程:3步跑起来,日常与刷本全托管

每天上线先清委托,再刷几把声骸,周末还得抽空跑周常,这些重复流程最磨人。**ok-wuthering-waves** 是个鸣潮自动化辅助工具,靠截屏识别游戏画面、模拟键鼠输入,把重复劳动直接代肝掉。这篇讲清楚3步怎么装好、跑前查什么、出问题怎么办。 ## 它能替你干什么:自动战斗、刷声骸、一键日常 - 把自动战斗交给它:进本后自己出招、放技能、躲大招,打完自己收工 - 把资源刷取交给它:声骸、

gitblog_01034的博客 438

XDMA Scatter-Gather(SG)模式

XDMA Scatter-Gather(SG)模式 是 Xilinx FPGA 中用于高效处理 ​非连续内存数据 的 DMA 传输机制,通过 ​描述符链表(Descriptor List)​ 管理多块分散数据,显著减少 CPU 开销并提升吞吐量。

浩瀚之水的专栏 2136

5实践报告撰写

一 项目流程 明确标准 确定分析目标 寻找分析数据 清洗数据 描述性分析 诊断性分析 提出建议 撰写报告 二 确定分析目标 什么是你感兴趣的? 什么是你熟悉的? 什么是你擅长的? 1 电商零售行业 商品销量分析 价格分析 评价分析 ...... 2 自媒体行业 广告投放力度分析 广告投放回报分析 不同类型的产品分析 ...... 3 金融行业 股票价格分析 信贷业务违约分析 客户画像分析 ...... ...

waywardG的博客 2832

Jinja 版本演进与技术内幕全解:从 2.0 到 3.2 的变更日志深度剖析

Jinja 是一个快速、富有表现力且可扩展的 Python 模板引擎,本篇文章以仓库根目录下的 [CHANGES.rst](https://link.gitcode.com/i/ade8d5c786af164dc7ee2d4e6899e89b)(官方变更日志)为绝对骨架,逐条梳理从 2008 年的 Jinja 2.0 到当前开发中的 3.2.0 之间所有关键变更,并结合 `src/jinja2/`

gitblog_00035的博客 370

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

flask学习笔记-09

flask09-jinja2简介 Jinja2模板引擎简介 模板 在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容。 模板其实是一个包含响应文本的文件,其中用占位符(变...

NT的博客 276

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Flask 版本演进全解:从 CHANGES.rst 读懂 Flask 从 0.1 到 3.2 的关键变更与升级要点

本文以仓库中的 [CHANGES.rst](https://link.gitcode.com/i/89450af46d92c1a17f2b5a2014aeefef) 为主体,系统梳理 Flask 自 2010 年首个公开预览版 0.1 到当前开发版 3.2.0.dev 的全部版本脉络:每个大版本周期引入了哪些核心能力、废弃并移除了哪些 API、依赖最低版本如何演进。读完后,你可以快速判断自己的项目

gitblog_00210的博客 428

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Flask入门:介绍与简单使用

1、Flask简介   Flask是一个使用Python编写的轻量级 Web 应用框架。其WSGI工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。   Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。 2、Flask的依赖模块...

weixin_30336061的博客 249

Flask基础进阶与python flask实战bbs

├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-Python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04-Flask基本结构及MVC请求响应过程.m...

tq55557的博客 482
上一篇: 副业必看,程序员接单的十个注意事项
下一篇: Python数据分析库-Pandas,数据处理与分析的得力助手!
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值