您的位置:首页 > 编程语言 > Python开发

Python Flask Web框架(四)

2017-02-17 15:19 453 查看


一、静态文件

动态的 web 应用同样需要静态文件。
CSS
JavaScript
文件通常来源于此。理想情况下,
你的 web 服务器已经配置好为它们服务,然而在开发过程中 Flask 就能够做到。 只要在你的包中或模块旁边创建一个名为
static
 的文件夹,在应用中使用
/static
即可访问。

给静态文件生成 URL ,使用特殊的
static
端点名:
url_for('static', filename='style.css')


这个文件是应该存储在文件系统上的
static/style.css


二、渲染模板

在 Python 中生成 HTML 并不好玩,实际上是相当繁琐的,因为你必须自行做好HTML转义以保持应用程序的安全。 由于这个原因,Flask 自动为你配置好 Jinja2 模版。

你可以使用方法
render_template()
来渲染模版。所有你需要做的就是提供模版的名称以及你想要作为关键字参数传入模板的变量。这里有个渲染模版的简单例子,
修改
hello.py
文件:
from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)


Flask 将会在
templates
文件夹中寻找模版。因此如果你的应用是个模块,这个文件夹在模块的旁边,如果它是一个包,那么这个文件夹在你的包里面:

Case 1:应用是模块(本系列实验的应用结构都是模块型):
/application.py
/templates
/hello.html


Case 2: 应用是包:
/application
/__init__.py
/templates
/hello.html


对于模板,你可以使用 Jinja2 模板的全部能力。详细信息查看官方的 Jinja2 Template Documentation 。

这里是一个模版的例子,在这之前需要建立文件结构如下图所示:



然后编写
hello.html
模板文件:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}


效果如下(这里建议在图形界面下开启两个终端,一个用来启动服务器,一个用来编写代码):



在模版中你也可以使用requestsessiong对象,也能使用函数get_flashed_messages() 。

模版继承是十分有用的。如果想要知道模版继承如何工作的话,请阅读文档模板继承。基本的模版继承使得某些特定元素(如标题,导航和页脚)在每一页成为可能。

自动转义默认是开启的,因此如
name
包含 HTML,它将会自动转义。如果你信任一个变量,并且你知道它是安全的(例如一个模块把 wiki
标记转换到 HTML ),你可以用
Markup
类或
|safe
过滤器在模板中标记它是安全的。
在 Jinja 2 文档中,你会见到更多例子。

下面一个
Markup
类如何工作的基本介绍:
$ python
>>> from flask import Markup
>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'
Markup(u'<strong>Hello <blink>hacker</blink>!</strong>')
>>> Markup.escape('<blink>hacker</blink>')
Markup(u'<blink>hacker</blink>')
>>> Markup('<em>Marked up</em> » HTML').striptags()
u'Marked up \xbb HTML'


注意:在后面的0.5版本以上:

自动转义不再在所有模版中启用。模板中下列后缀的文件会触发自动转义:
.html, .htm, .xml,.xhtml
。从字符串加载的模板会禁用自动转义。


三、小结

本节讲了 flask 的静态文件和模板的基本知识,静态文件放在 
static
目录中,模板文件放在
templates
目录下。


四、练习

请创建一个模板和
CSS
文件,并在模板引入
CSS
文件,显示一个绿色的
Hello
ShiYanLou
字样。关于
HTML
以及
CSS
的学习请参考在线教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python Flask css