Python Flask实现蓝图Blueprint配置和模块渲染

 Python基础学习:

  • Pyhton 语法基础
  • Python 变量
  • Python控制流
  • Python 函数与类
  • Python Exception处理
  • Python 文件操作
  • Python 日期与时间
  • Python Socket的使用
  • Python 模块
  • Python 魔法方法与属性

Flask基础学习:

  • Python中如何选择Web开发框架?
  • Python Flask 入门开发
  • 如何使用virtualenv实现python环境的隔离?
  • Python中使用国内源头下载依赖
  • Python Flask 路由配置
  • Flask 使用Context上下文
  • Python Flask实现蓝图Blueprint配置和模块渲染 

蓝图(BluePrint)

蓝图(Blueprint)是Flask实现的应用模块化,通过模块化的方式分割视图,让应用的层次更加清晰,更加便于开发者开发和维护项目。通过蓝图,我们可以创建一组相同前缀的路由组合,可以用于分割应用不同的服务。如应用有两个服务:认证服务和用户服务,我们可以通过模块化分割服务,然后通过Flask注册不同前缀的蓝图。

创建main服务

先创建一个main服务,代码如下:

1、创建main.py文件

# main.py
# !/usr/bin/env python
# -*-coding:utf-8 -*-
from datetime import datetime
from flask import render_template,session,redirect,url_for,abort,request,Blueprint
main = Blueprint('main', __name__)@main.route('/index')
def index(item_name="dashboard", **kwargs):return render_template('manager/index.html', item_name=item_name, kwargs=kwargs)@main.route('/user/<username>')
def user(username):return render_template('user.html', user=user)

2、创建api.py文件

# !/usr/bin/env python
# -*-coding:utf-8 -*-
from flask import jsonify, request,make_response,Blueprint,Flask
from. import api@api.route('/post/', methods=['POST'])
def post():json = request.jsonprint(str(json))post1 = Post.from_json(json)db.session.add(post1)db.session.commit()return jsonify({"status": 1,"response": u"提交成功"})

3、注册Blueprint

# !/usr/bin/env python
# -*-coding:utf-8 -*-
from flask import Flask,render_template,Response
from flask_cors import CORSdef create_app(config_name):app = Flask(__name__)# 注册main服务from .main import main as main_blueprintapp.register_blueprint(main_blueprint, url_prefix='/manager')# 注册api服务from app.api import api as api_blueprintCORS(api_blueprint, supports_credentials=True)app.register_blueprint(api_blueprint, url_prefix='/api/v1.0')return app

 模块渲染(Template)

使用Flask可以直接在路由中返回Html文档,但处理起来比较麻烦。因此,Flask框架默认支持Jinja2末班引擎,可通过flask提供的内置方法render_template直接进行渲染,我们只需要提供html的相对路径即可,flask中默认模板目录为templates

如下通过一个示例看下flask中的模板渲染如何使用:

from flask import render_template,Flaskapp = Flask(__name__)@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):return render_template('base.html', name=name)if __name__ == '__main__':app.run()

Jinja2 模板引擎

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:4

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}<li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

变量使用

Flask可以通过Jinja2模板将Python中的变量传递到html模板中。如下通过py和html中来了解如何使用:

// demo.py
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/args')
def temp_jinja2():data = {'Python': '编程语言','Flask': 'Web 框架','Jinja2': '模板引擎','HTML': '前端语言'}return render_template('route_two.html', data=data)if __name__ == '__main__':app.run(debug=True)

如上,通过render_template传递jinja2参数。html使用变量如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Jinja2 Args</title>
</head>
<body>
<h2 style="color: red">获取 data 中的数据:</h2>
<p style="color: blue"> {{ data['Python'] }} </p>
<p style="color: blue"> {{ data['Flask'] }} </p>
<p style="color: blue"> {{ data.Jinja2 }} </p>
<p style="color: blue"> {{ data.HTML }} </p>
<br/>
{% if data %}{{ data.keys() }}
{% else %}<p style="color: blue"> Hello Jinja2 ! </p>
{% endif %}
<br/>
<br/>
{% for key in data.keys() %}<div><p style="color: rebeccapurple"> {{ key }} : {{ data[key] }} </p></div>
{% endfor %}
</body>
</html>

过滤器

Flask中模板过滤器的使用是通过管道符(|)分割,也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。如 {{ name|striptags|title }} 会移除 name 中的所有 HTML 标签并且改写 为标题样式的大小写格式。其使用格式如下:

// 使用格式
{% 变量 | 过滤器名 %} // 示例
{# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p> 

常见的内置过滤器:

  • abs(number):返回参数的绝对值。
  • attr(objname):获取对象的属性。 foo|attr(‘bar’) 像 foo[‘bar’] 一样工作,只是总是返回一个属性并且不查找项目。
  • batch(valuelinecountfill_with=None):批处理项目的过滤器。它的工作原理与 slice 非常相似,只是反过来。它返回具有给定项目数的列表列表。如果您提供第二个参数,则该参数用于填充缺失的项目。
  • capitalize(s):大写一个值。第一个字符将是大写的,所有其他字符都是小写的。
  • center(valuewidth=80):将给定宽度的字段中的值居中。
  • default(valuedefault_value=u”boolean=False):如果该值未定义,它将返回传递的默认值,否则返回值。
  • dictsort(valuecase_sensitive=Falseby=’key’):对 dict 和 yield (key, value) 对进行排序。
  • escape(s):将字符串 s 中的字符 &、 、 、 ‘ 和 ” 转换为 HTML 安全序列。如果您需要在 HTML 中显示可能包含此类字符的文本,请使用此选项。将返回值标记为标记字符串。
  • filesizeformat(valuebinary=False):将值格式化为“人类可读”的文件大小(即 13 kB、4.1 MB、102 字节等)。默认使用十进制前缀(Mega、Giga 等),如果第二个参数设置为 True,则使用二进制前缀(Mebi、Gibi)
  • first(seq):返回序列的第一项。
  • float(valuedefault=0.0):将值转换为浮点数。如果转换不起作用,它将返回 0.0。您可以使用第一个参数覆盖此默认值。
  • forceescape(value):强制 HTML 转义。这可能会使转义变量加倍。
  • format(value*args**kwargs):在对象上应用 python 字符串格式。
  • groupby(valueattribute):按公共属性对一系列对象进行分组。
  • indent(swidth=4indentfirst=False):返回传递的字符串的副本,每行缩进 4 个空格。第一行没有缩进。
  • int(valuedefault=0):将值转换为整数。如果转换不成功,它将返回 0。
  • join(valued=u”attribute=None):返回一个字符串,它是序列中字符串的串联。
  • last(seq):返回序列的最后一项。
  • length(object):返回序列或映射的项目数。
  • list(value):将值转换为列表。如果它是一个字符串,则返回的列表将是一个字符列表。
  • lower(s):将值转换为小写。
  • map():对一系列对象应用过滤器或查找属性。这在处理对象列表时很有用,但您实际上只对它的某个值感兴趣。
  • pprint(valueverbose=False):漂亮地打印一个变量。对调试很有用。
  • random(seq):从序列中返回一个随机项。
  • reject():通过对对象或属性应用测试并拒绝测试成功的对象来过滤一系列对象。
  • rejectattr():通过对对象或属性应用测试并拒绝测试成功的对象来过滤一系列对象。
  • replace(soldnewcount=None):返回值的副本,所有出现的子字符串都替换为新的子字符串。
  • reverse(value):反转对象或返回一个迭代器,以相反的方式迭代它。
  • round(valueprecision=0method=’common’):将数字四舍五入到给定的精度。
  • safe(value):将该值标记为安全的,这意味着在启用了自动转义的环境中,该变量将不会被转义。
  • select():通过对对象或属性应用测试并仅选择测试成功的对象来过滤一系列对象。
  • selectattr():通过对对象或属性应用测试并仅选择测试成功的对象来过滤一系列对象。
  • slice(valueslicesfill_with=None):切片迭代器并返回包含这些项目的列表列表。
  • sort(valuereverse=Falsecase_sensitive=Falseattribute=None):对可迭代对象进行排序。默认情况下它按升序排序,如果您将它作为第一个参数传递 true 它将反转排序。
  • string(object):如果还没有,请创建一个字符串 unicode。这样标记字符串就不会转换回 unicode。
  • striptags(value):去除 SGML/XML 标签并将相邻的空格替换为一个空格。
  • sum(iterableattribute=Nonestart=0):返回数字序列加上参数“start”的值(默认为 0)的总和。当序列为空时,它返回开始。
  • title(s):返回值的标题版本。 IE。单词将以大写字母开头,所有其余字符均为小写字母。
  • trim(value):去除前导和尾随空白。
  • truncate(slength=255killwords=Falseend=’…’):返回字符串的截断副本。长度由第一个参数指定,默认为 255。
  • upper(s):将值转换为大写。
  • urlencode(value):用于 URL 的转义字符串(使用 UTF-8 编码)。它接受字典和常规字符串以及成对的可迭代对象。
  • urlize(valuetrim_url_limit=Nonenofollow=False):将纯文本的 URL 转换为可点击的链接。
  • wordcount(s):计算该字符串中的单词。
  • wordwrap(swidth=79break_long_words=Truewrapstring=None):返回传递给过滤器的字符串副本,在 79 个字符后换行。
  • xmlattr(dautospace=True):根据字典中的项目创建 SGML/XML 属性字符串。

示例代码

视图函数:

from flask import Flask, render_template# todo 初始化Flask项目的服务
app = Flask(__name__)student = {'name': 'kobe', 'age': 14, 'gender': '男'}@app.route('/str')
def test1():return render_template('04-字符串的过滤器.html',**student)  #为了方便在模板中使用,可以把字典打伞if __name__ == '__main__':# 0.0.0.0:代表当前的系统的所有的ip地址,# 设置端口为8080,# flask的debug模式:把错误的信息显示到页面中app.run(host='0.0.0.0', port=8080, debug=True)

模板文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>字符串的过滤器</title>
</head>
<body>{# 当变量数据没有传入数据的时候,可以给变量设置默认值 #}
<p>{{ name | default('自律') }}</p>
<P>{{ name1 | default('自爱') }}</P>{# 单词首字母大写 #}
<p>{{ 'hello world' | capitalize }}</p> {# 单词全小写 #}
<p>{{ 'XML' | lower }}</p> {# 去除字符串前后的空白字符 #}
<p>{{ ' hello ' | trim }}</p> {# 字符串反转,返回"olleh" #}
<p>{{ 'hello' | reverse }}</p> {# 格式化输出,返回"Number is 99" #}
<p>{{ '%s is %d' | format("Number", 99) }}</p> {# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p> {% autoescape false %}{# HTML转义,即使autoescape关了也转义,可以缩写为e #}
<p>{{ '<em>name</em>' | escape }}</p>
{% endautoescape %}
</body>
</html>

 静态文件配置

Flask框架默认静态文件的目录为根目录下的static目录,默认模板文件目录为templates,或者也可以通过Flask来设置静态文件目录、模板目录、以及静态访问前缀。Flask支持的设置参数如下:

    def __init__(self,import_name: str,  static_url_path: t.Optional[str] = None,static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",static_host: t.Optional[str] = None, host_matching: bool = False,subdomain_matching: bool = False,template_folder: t.Optional[str] = "templates",instance_path: t.Optional[str] = None,instance_relative_config: bool = False,root_path: t.Optional[str] = None,)

如下,我们可以通过一个示例来看一下如何设置:

from flask import Flaskapp = Flask(import_name=__name__,static_url_path='/',static_folder='static',template_folder='templates')

如下,通过一个示例来看下如何配置静态文件。

创建main.py

from flask import Flask, render_templateapp = Flask(import_name=__name__, static_url_path='/',static_folder='static', template_folder='templates')# 添加html访问路由
@app.route('/')
def blog():return render_template('index.html')if __name__ == "__main__":app.run()  # 默认设置host:0.0.0.0 port:5000

创建静态文件和模板文件

如下所示,在模板中我们可以通过url_for来访问获取静态文件,格式如下:

url_for(<static-folder>,<static-relative-path) # 社会静态目录和相对静态目录的静态文件地址

访问结果

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

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

相关文章

数据结构笔记 4 树和二叉树

二叉树和完全二叉树的区别&#xff1f; 二叉树和完全二叉树的主要区别在于它们的结构特性和节点排列方式&#xff1a; 1. **二叉树**&#xff1a; - 是一种数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为左子节点和右子节点。 - 节点的子节点数量…

git凭证

默认是manager # 将凭证缓存到内存中&#xff0c;默认缓存15分钟 git config --global credential.helper cache# 将凭证存储到磁盘上的纯文本文件中 git config --global credential.helper store# 使用 Git 凭证管理器 git config --global credential.helper manager-core查…

图文详解Windows系统下搭建mysql开发环境——mysql Community 8 和 navicat Premium 17 的安装和使用

在正式开始学习使用MySQL之前&#xff0c;我们有必要先搭建一个良好的开发环境&#xff0c;让我们的学习和工作效率事半功倍。 本文涉及到的软件百度云盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1jj_YajEv8adeEjMrXLhOTQ?pwd1023 提取码&#xff1a;1023 目录 …

元宇宙数字藏品交易所,未来发展的大趋势

随着科技的飞速进步&#xff0c;元宇宙以其独特的魅力为数字世界绘制了一幅前所未有的宏伟蓝图。在这一宏大的背景下&#xff0c;数字藏品交易所作为连接虚拟与现实的桥梁&#xff0c;正以其卓越的优势&#xff0c;引领着数字藏品市场迈向新的高度。 首先&#xff0c;元宇宙为…

三十六篇:未来架构师之道:掌握现代信息系统典型架构

未来架构师之道&#xff1a;掌握现代信息系统典型架构 1. 引言 在企业的数字化转型浪潮中&#xff0c;信息系统架构的角色变得日益重要。它不仅承载了企业的IT战略&#xff0c;更是确保企业在复杂、动态的市场环境中稳定运行的关键。作为信息系统的骨架&#xff0c;一个精心设…

HTML5+CSS3+JS小实例:网格图库

实例:网格图库 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

Python中猴子补丁是什么,如何使用

1、猴子补丁奇遇记 &#x1f412; 在Python的世界深处&#xff0c;隐藏着一种神秘而又强大的技巧——猴子补丁&#xff08;Monkey Patching&#xff09;。这是一项允许你在程序运行时动态修改对象&#xff08;如模块、类或函数&#xff09;的行为的技术。它得名于其“快速修补…

算法导论实战(六)(算法导论习题三十四、三十五章)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;算法启示录 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 前言 算法导论的知识点学习将持续性更新在算…

Docker 基础使用(2) 镜像与容器

文章目录 镜像的含义镜像的构成镜像的作用镜像的指令容器的含义容器的状态容器的指令 Docker 基础使用&#xff08;0&#xff09;基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使用&#xff08;2&#xff09; 镜像与容器 Docker 基础使用&#xff08;3&#xff09; 存…

2024年【天津市安全员C证】免费试题及天津市安全员C证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员C证免费试题是安全生产模拟考试一点通生成的&#xff0c;天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材汇编出天津市安全员C证仿真模拟考试。2024年【天津市安全员C证】免费试题及天津市…

VBA excel 表格将多行拆分成多个表格或 文件 或者合并 多个表格

excel 表格 拆分 合并 拆分工作表按行拆分为工作表工作表按行拆分为工作薄 合并操作步骤 拆分 为了将Excel中的数万行数据拆分成多个个每个固定行数的独立工作表&#xff0c;并且保留每个工作表的表头&#xff0c;你可以使用以下VBA脚本。这个脚本会复制表头到每个新的工作表&…

行心科技中禄松波携手,开启智能健康新时代

在2024年第34届健博会暨中国大健康产业文化节的盛大舞台上&#xff0c;广州市行心信息科技有限公司&#xff08;以下简称“行心科技”&#xff09;与浙江中禄松波生物工程有限公司&#xff08;以下简称“中禄松波”&#xff09;宣布达成战略合作&#xff0c;共同推动医康养产业…

socket通信(C语言+Python)

在socket文件夹下创建server.c和client.c。 服务端代码&#xff08;server.c&#xff09;&#xff1a; #include <stdio.h> #include <Winsock2.h> void main() {WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested MAKEWORD( 1, 1 );err WSAS…

探索 Noisee AI 的奇妙世界与变现之旅

日赚800&#xff0c;利用淘宝/闲鱼进行AI音乐售卖实操 如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 抖音主播/电商人员有福了&#xff0c;利用Suno创作产品宣传&#xff0c;让产品动起来-小米Su7 用sunoAI写粤语歌的方法&#xff0c;博主已经亲自实践可行 五音不全也…

通道堵塞自动识别摄像机

通道堵塞自动识别摄像机是一种利用先进的人工智能和图像识别技术来监测和识别通道堵塞情况的装置&#xff0c;广泛应用于交通管制、商场管理等领域。这项技术的出现极大地提高了通道管理的效率和准确性&#xff0c;为改善人们的出行体验和商场营运提供了新的解决方案。 传统的通…

Vue3【十一】08使用toRefs和toRef

08使用toRefs和toRef toRefs()函数将person对象中的name和age属性转换为响应式引用&#xff0c;并返回一个对象&#xff0c;对象中的name和age属性都是响应式引用&#xff0c;具有响应式功能。 toRef()函数将person对象中的name属性转换为响应式引用&#xff0c;并返回一个响应…

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题&#xff0c;我们通常采用分库分表的方式对库表进行拆分&#xff0c;以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦&#xff0c;这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…

最新PHP众筹网站源码 支持报名众筹+商品众筹+公益众筹等多种众筹模式 含完整代码包和部署教程

在当今互联网飞速发展的时代&#xff0c;众筹模式逐渐成为了创新项目、商品销售和公益活动融资的重要渠道。分享一款最新版的PHP众筹网站源码&#xff0c;支持报名众筹、商品众筹和公益众筹等多种众筹模式。该源码包含了完整的代码包和详细的部署教程&#xff0c;让新手也可以轻…

java之面向对象

1 面向对象介绍 <span style"background-color:#f8f8f8"><span style"color:#333333">1.面向过程:自己的事情自己干,代表语言C语言洗衣服:每一步自己要亲力亲为 -> 找个盆,放点水,找个搓衣板,搓搓搓 2.面向对象:自己的事情别人帮忙去干,代…

STM32 uc/OS-III多任务程序

目录 一、项目创建 二、代码移植 1、uC/OS-III源码处理 2、KEIL文件配置 ​编辑3、文件修改 启动文件 ​编辑app_cfg.h includes.h bsp.c和bsp.h main.c lib_ cfg.h app.c和app.h 三、总结 学习目标&#xff1a; 学习嵌入式实时操作系统&#xff08;RTOS&#xf…