Python Flask模块
模块是一个包含响应文本的文件,其中包含占用位变量表示的动态部分,其具体值只在请求的上下文中才知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模块,Flask使用一个名为Jinja2的强大模板引擎。
一、Jinja2模板引擎
形式最简单的Jinja2模板就是一个包含响应文本的文件。
<h1>Hello,World!</h1>
<h1>Hello,{{name}}!</h1>
1、渲染模板
默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板。在下一个hello.py版本中,要把前面定义的模板保存在templates文件夹中,并分别命名为index.html和user.html。
#!/usr/bin/env python from flask import Flask,render_template
app = Flask(__name__) @app.route('/')
def index():
return render_template('index.html') @app.route('/user/<name>')
def user(name):
return render_template('user.html',name=name) if __name__ == '__main__':
app.run()
Flask提供的render_template函数把Jinja模块引擎集成到了程序中。
2、变量
模板中使用的{{name}}结构表示一个变量,它是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取。
Jinja2能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。在模板中使用变量的一些实例如下
<p>a value from a dictionary: {{ mydict['key'] }}</p>
<p>a value from a list:{{ mylist[3] }}</p>
<p>a value from a list,with a varliable index:{{ mylist[myintavr] }}</p>
<p>a value from a objects method:{{ myobj.somemethod() }}</p>
Jinja2变量过滤器
| 过滤器名 | 说明 |
| safe | 、渲染时不转义 |
| capitalize |
把值得首字母转换成大写,其他字母转换成小写 |
| lower | 把值转换成小写形式 |
| upper | 把值转换成大写形式 |
| title | 把值中每个单词的首字母都转换成大写 |
| trim | 把值的首位空格去掉 |
| striptags | 渲染之前把值中所有HTML标签都删除 |
3、控制结构
在模板中使用条件控制语句:
{% if user %}
Hello,{{ user }}!
{% else %}
Hello,Stranger!
{% endif %}
<ul>
{% for commet in commets %}
<li>{{ commet }}</li>
{% end for %}
</ul>
Jinja2还支持宏,类似于Python代码中的函数。例如:
{% macro render_commet(commet) %}
<li>{{ commet }}</li>
{% endmacro %}
<ul>
{% for commet in commets %}
{{ render_commet(commet) }}
{% endfor %}
</ul>
为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入:
{% import 'macros.html' as macros %}
<ul>
{% for commet in commets %}
{{ macros.render_commet(commet) }}
{% endfor %}
</ul>
另一种重复使用代码的强大方式是模板继承,它类似于Python代码中的类继承。首先创建一个名为base.html的基模板:
<html>
<head>
{% block head %}
<title>{% block title %}{% endblock %} - My Application</title>
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
二、使用Flask-Bootstrap集成Twitter Bootstrp
Bootstrap是客户端架构,因此不会直接涉及服务器。服务器要做的知识提供引用了Bootstrap层叠样式表(CSS)和Javascript文件的HTML响应,并在HTML/CSS和Javascript代码中实例化所需组件。这些操作最理想的执行场所就是模板。

#初始化 Flask-bootstrap from flask.ext.bootstrap import Bootstrap
#...
bootstrap = Bootstrap(app)
初始化Flask-Bootstrap之后,就可以在程序中使用一个包含所有Bootstrap文件的基模板。
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">Flasky</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
</ul>
</div>
</div>
</div>
{% endblock %}
{% block content %}
<div class="container">
<div class="page-header">
<h1>Hello,{{ name }}!</h1>
</div>
</div>
{% endblock %}
三、自定义错误界面
#自定义错误界面 #!/usr/bin/env python from flask import Flask,render_template
app = Flask(__name__) @app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'),404 @app.errorhandler(500)
def internal_server_error(e):
return render_template('500.html'),500 if __name__ == '__main__':
app.run()
四:链接
Flask提供url_for()辅助函数,它可以使用程序URL映射中保存的信息生成URL。
url_for()函数最简单的用法是以视图函数名(或者app.add_url_route()定义路由时使用的端点名)作为参数,返回对应的URL。
使用url_for()生成动态地址时,将动态部分作为关键字参数传入。例如,url_for('user',name='john',_external=True)
五、静态文件
默认设置下,Flask在程序根目录中名为static的子目录中寻找静态文件。如果需要,可在static文件夹中使用子文件夹存放文件。
#定义收藏夹图标
{% block head %}
{{ super() }}
<link rel="shortcut icon" href="{{ url_for('static',filename='favicon.ico') }}"
type="image/x-icon">
<link rel="icon" href="{{ url_for('static',filename='favicon.ico') }}"
type="image/x-icon">
{% endblock %}
六、使用Flask-Moment本地化日期和时间
Flask-Moment是一个Flask程序扩展,能把moment.js集成到Jinja2模板中。

#初始化Flask-Moment
from flask.ext.moment import Moment
moment = Moment(app)
#引入moment.js库
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}
#!/usr/bin/env python from flask import Flask,render_template
app = Flask(__name__) from datetime import datetime
from flask_moment import Moment moment = Moment(app)
@app.route('/')
def index():
return render_template('index.html',
current_time=datetime.utcnow()) if __name__ == '__main__':
app.run()
Python Flask模块的更多相关文章
- Python flask模块接口开发学习总结
引言 Flask 是一个简单且十分强大的Python web 框架.它被称为微框架,“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩 ...
- python 12篇 mock接口之flask模块
一.使用pip install flask按照flask模块. import flask,json # 轻量级web开发框架 server = flask.Flask(__name__) @serve ...
- [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题
http://www.cnblogs.com/mizhon/p/4242073.html [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题 最近想 ...
- Day5 模块及Python常用模块
模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...
- Python Flask学习笔记之Hello World
Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...
- 前端和后端的数据交互(jquery ajax+python flask+mysql)
上web课的时候老师布置的一个实验,要求省市连动,基本要求如下: 1.用select选中一个省份. 2.省份数据传送到服务器,服务器从数据库中搜索对应城市信息. 3.将城市信息返回客户,客户用sele ...
- Day6 模块及Python常用模块
模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...
- python flask实现小项目方法
本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走. 下载源码,运行 pip install -r requirements.txt 建立环境 python ...
- 【原创】python内存泄漏以及python flask框架莫名coredump
1.python内存泄漏 今天在看服务器上的进程时,用top查的时候,发现一个一直跑的脚本程序内存竟然达到了1.6G,这个脚本我有印象,一开始仅占用20M左右,显然是内存泄漏了. 用gc和objgra ...
随机推荐
- DAY11-MYSQL多表查询
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name ) ); create table employ ...
- 2.2.3 Analyzing the output 分析对用户推荐书目的结果(2)
2.2.3 Analyzing the output 在之前的程序运行结果中我们得到的结果输出是: RecommendedItem [item:104, value:4.257081] 程序要 ...
- IDEA创建Maven Web 项目
前提:安装过maven并且配置了maven的环境变量,这里就不演示了.转载了别人一篇maven详解,不了解的可以先看一下这个 链接 图文讲解: 创建项目 选择Maven 选择创建webapp项目 指定 ...
- Android广播接收者
其实,在什么是广播的第一句就已经说明了广播有什么用了.对了,笼统一点讲就是用来传输数据的.具体一点说就是:1. 实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能 ...
- 浅析大数据的技术生态圈(Hadoop,hive,spark)
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...
- 面试题: java面试经历 已看1 抢红包如何分配每个人抢到的钱 有用 难点的面试题
2018.03.09 深圳乐唯科技 我看了下感觉这公司貌似挺不错的,面试官人也挺好的,氛围应该很不错,可惜我实力不足,唉,接续努力,下面把面试中印象较深的三个问题写一下. 面试问题1:数据库删除重复数 ...
- 获取iframe自适应后的宽高
1.同域 一:引入jquery <script type="text/javascript" src="../jquery.min.js">< ...
- 7.qfilesystemmodel rowcount 为什么为0? 一个简单的model类的例子
任务: 1.新建一个空的mainwindow项目 2.debug下编译得到一个文件夹,应用程序输出这个文件夹中的文件(不显示文件夹中的文件夹) 3.使用QFileSystemModel完成. 本例显示 ...
- Java Annotation详解
元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: l 编写文档:通过代码里标识的元数据生成文档. l ...
- 《Maven实战》笔记-10-灵活的构建
一.灵活构建的意义 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就 ...