(venv)pip install flask
flask,Flask,app
from flask import Flask
app = Flask(__name__)
从flask引入Flask类,创建一个叫app的程序实例,所有接受自客户端的请求都交给这个app程序实例(Flask类的对象)处理。Flask也用这个参数(app)决定了程序的根目录,以便能找相对于根目录的资源文件位置。
request(其他还有current_app,g,session)
from flask import request
@app.route('/')
def index():
user_agent= request.headers.get('User-Agent')
return '<p>Your brower is %s<p>' % user_agent
request请求对象,它封装了客户端发出的HTTP请求中的内容
make_response
from flask import make_response
@app.route('/'):
def index():
response = make_response('<h1>This document carries a cookie!</h1>')
response.set_cookie('answer','42')
return response
响应包括HTML页面,状态码,由首部组成的字典,那么多的参数不好解决,这时Response对象应运而生。
make_response函数可接受几个参数,response.set_cookie()可以设置cookie,统一返回一个response。
redirect,abort
from flask import redirect,abort
@app.route('/')
def index():
return redirect('http://www.example.com')
@app.route('/user/<id>')
def get_user(id):
user = load_user(id)
if not user:
abort(404)
return '<h1>Hello,%s</h1>' % user.name
redirect重定向函数,还有一个特殊响应由abort函数生成,用于处理错误。
user = load_user(id)解析传入的id,与model中的user对比。
(venv)pip install flask-script
from flask.ext.script import Manager
manager = Manager(app)
#...
if __name__ == '__main__':
manager.run()
使用Flask-Script支持命令行选项
现在运行python hello.py会显示一个用法消息,运行python hello.py runserver来启动Web服务器。
render_template
from flask import Flask,render_template
#...
@app.route('/user/<name>')
def user(name):
reuturn render_template('user.html', name=name)
Flask提供的render_template函数把JinJia2模板引擎集成到程序中。render_template函数的第一个参数是模板的文件名。随后的参数都是键值对。
(venv)pip install flask-bootstrap
from flask.ext.bootstrap import Bootstrap
#...
bootstrap = Bootstrap(app)
把程序实例app传入构造方法进行初始化,初始化Flask-boostrap之后,程序就可以使用一个包含所有Bootstrap文件的基模板。Flask-bootstrap中的基模板提供的一个网页框架,引入了Bootstrap中的所有CSS和JavaScript文件。
(venv)pip install flask-moment
Moment
from flask.ext.moment import Moment
moment = Moment(app)
Flask-moment依赖moment.js和jquery.js,Bootstrap已经引入jquery.js,还得在base.html引入moment.js库,如下:
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}
在index.html中放置渲染时间的文本,如下:
<p>本地时间为{{ moment(current_time().format('LLL')}}.</p>
<p>现在过了{{ moment(current_time).fromNow(refresh=True) }}.</p>
datetime
以下代码吧变量current_time传入模板进行渲染:
from datetime import datetime
@app.route('/')
def index():
return render_template('index.html',
current_time=datetime.utcnow())