第二章 程序的基本结构
from flask import Flask
from flask import request
from flask import make_response
from flask import redirect
from flask import abort
app = Flask(__name__)
@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return '<h1>hello world</h1><p>your browser is %s<p>' %user_agent
@app.route('/bad')
def index_bad():
return '<h1>bad request</h1>', 400
@app.route('/make_response')
def index_make_response():
response = make_response('<h1>This document carried a cookie!</h1>')
response.set_cookie('ansewr', '42')
return response
@app.route('/redirect')
def index_redirect():
return redirect('/bad')
@app.route('/abort/<id>')
def index_abort(id):
ids = ['1', 2, 3]
if id not in ids:
abort(404)
return id
@app.route('/user/<name>')
def user(name):
return '<h1>hello, %s!<h1>' %name
@app.route('/user/str/<path:name>') # 动态部分默认匹配字符串,也可以匹配定义的类型,flask支持int, float, path(字符串,但不把斜线视为分隔符)类型
def user_2(name):
return '<h1>hello, %s!<h1>' %name
if __name__ == '__main__':
app.run(debug = True)
第三章 模板
包含:jinja2引擎,flask-bootstrap,自定义错误页面,动态路由,静态文件引用,flask-moment本地化日期时间
# hello.py
from datetime import datetime
from flask import Flask
from flask import render_template # 函数把Jinja2模板引擎集成到了程序中
from flask import url_for # 动态路由,也可以在html文件中使用
from flask.ext.bootstrap import Bootstrap
from flask.ext.moment import Moment
app = Flask(__name__)
bootstrap = Bootstrap(app)
moment = Moment(app)
@app.route('/')
def index():
return render_template('index.html', current_time=datetime.utcnow()) # current_time供moment.js使用
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
@app.route('/bootstrap_test/<name>')
def bootstrap_test(name):
return render_template('bootstrap_test.html', name=name)
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404 # 自定义404页面
@app.route('/url_for_test/<name>')
def url_for_test(name):
index_url = url_for('index', _external=True) # _external 生成绝对地址
user_url = url_for('user', name=name, page=2) # name=name 动态部分作为关键字传入, page=2 额外参数
return render_template('url_for_test.html', index_url=index_url, user_url=user_url)
if __name__ == '__main__':
app.run(debug=True)
# base.html
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% 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 %}
{% 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>