
一、简介
Flask是一个用于开发网页App的轻量级框架,功能类似Django,但是比Django要简洁很多(省去了大量模板化的代码)。此外,由于Flask比较新,其开发过程中广泛吸取了社区的支持和意见,故语法方面比较Pythonic。一句话介绍如下:
"Flask is a lightweight Python framework for web applications that provides the basics for URL routing and page rendering."
二、Hello World
以下通过四个小代码段了解下flask的基本运作及语法。
2.1 Hello world
插入下面代码,命名为app.py。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World"
if __name__ == "__main__":
app.run('0.0.0.0', '8000')
可以看出flask语法主要是基于python的装饰器实现的。注意当使用python app.py执行该脚本时,变量name的值为"main"。
该装饰器看起来只是将函数的返回值重定向到装饰器修饰路径对应的页面下了。由于函数的功能比较简单,暂时还看不出其他内容。

2.2 app.route
下面这段代码了解下修饰器app.route()传递的参数:
from flask import Flask
app = Flask(__name__)
@app.route("/") # 网站根目录(默认为localhost:5000)
def index():
return "Index!"
@app.route("/hello")
def hello():
return "Hello World!"
@app.route("/members")
def members():
return "Members"
@app.route("/members/<string:name>/") # 该路径支持一个名字作为参数
def getMember(name):
return name # 在该网址print出名字
if __name__ == "__main__":
app.run()
然后可以运行脚本,分别输入
"localhost:5000/hello",
"localhost:5000/members",
"localhost:5000/hello/chiyuan"
可以看到页面中显示出了对应的结果:

此时观察下脚本执行对应的输出:注意最下面当输入了没有设置的网址,会显示访问结果404.

2.3 render
这里我们使用下简单的render_template。首先创建一个templates文件夹,在下面创建一个test.html,插入下面一行代码:
<h1>Hello {{ name }}!</h1>
然后修改app.py:
from flask import Flask, flash, redirect, render_template, request, session, abort
app = Flask(__name__)
@app.route("/")
def index():
return "Flask App!"
@app.route("/hello/<string:name>/")
def hello(name):
return render_template(
'test.html',name=name) #将字符串传入html中
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
这里使用了一个最简单的template,即一级标题,效果如下图:

2.4 Style
这部分使用预定的模板对页面进行渲染。不过其中模板的语法还不是很了解,等需要用的时候可以从这个入手。看起来可以通过extend关键字将多个html template组合起来,比如这里先创建两个templates文件夹下的文件,test.html和layout.html:
{% extends "layout.html" %}
{% block body %}
<div class="block1">
<h1>Hello {{ name }}!</h1>
<h2>Here is an interesting quote for you:</h2>
"The limits of my language are the limits of my mind. All I know is what I have words for."
<img src="http://www.naturalprogramming.com/images/smilingpython.gif">
</div>
{% endblock %}
下面为layout.html的内容:
<title>Website</title>
<style>
@import url(http://fonts.googleapis.com/css?family=Amatic+SC:700);
body{
text-align: center;
}
h1{
font-family: 'Amatic SC', cursive;
font-weight: normal;
color: #8ac640;
font-size: 2.5em;
}
</style>{% block body %}{% endblock %}
然后刷新localhost网站,效果如下:

不知道为啥,好像有一些语法没有compile正确..回头再了解了解..
网友评论