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 ...
随机推荐
- Py修行路 Matplotlib 绘图及可视化模块
Matplotlib是一个强大的Python绘图和数据可视化的工具包. 安装方法:pip install matplotlib 引用方法:import matplotlib.pyplot as plt ...
- ehcache缓存入门学习
ehcache缓存入门学习 1,概念 特性 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. 主要的特性有:1. 快速2 ...
- <c:set var="ctx" value="${pageContext.request.contextPath}" />的学习
${pageContext.request.contextPath},是获取当前根目录 set var="ctx",是给这个路径定义了一个变量,用的时候可以通过EL表达式获取:${ ...
- JSON 解析出错问题
从 PHP 返回一段 JSON 数据给前台页面,但使用 eval 和 JSON.parse 解析都出错. 在网上那上在线的 json 解析工具解析都正确. 于是一段段删除测试,最终发现问题出在 \r\ ...
- Tornado之抽屉实战(1)--分析与架构
项目模拟地址:http://dig.chouti.com/ 知识点应用: AJAX 用于偷偷发请求 原生ajax jQuery ajax($.ajax) iframe伪造 上传文件 传统Form ...
- IE的haslayout
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元 ...
- css自动换行 word-break:break-all和word-wrap:break-word(转)
css自动换行 word-break:break-all和word-wrap:break-word 2012-12-31 17:30 by greenal, 159 阅读, 0 评论, 收藏, 编辑 ...
- Realsense深度相机资料
1.Realsense SDK 2.0 Ubuntu 16.04 安装指导网址 https://github.com/IntelRealSense/librealsense/blob/master/d ...
- hibernate第三天 一对多 , 多对多
1.1. 阐述你对inverse的理解 答: 1.inverse的默认值是false,代表不放弃外键维护权,配置值为true,代表放弃了外键的维护权. 2.双方维护外键会多产生update语句,造成浪 ...
- SingletonPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...