python Flask学习笔记(一)

app = Flask(__name__)
Flask的构造函数只有一个必须制定的参数,即程序主模块或包的名字。
Flask 用这个参数决定程序的根目录,以便能够找到相对于程序根目录的资源文件位置

render_template

render_template函数第一个参数是模板文件名,随后的都是关键字参数

@app.route('/user/')
def user(name):
    return render_template('user.html', name=name)

flask支持在路由中使用int,float和path类型,默认是字符串

@app.route('/user/')
def get_user(id):
    abort(404)
    return "no, %d" % id

Jinja2使能识别所有类型的变量,包括列表、字典和对象

<p>{{mydict['dict]}}p>
<p>{{mylist[3]}}p>
<p>{{mylist[myintvar]}}p>
<p>{{myobj.somemethod()}}p>

一个简单的Flask程序

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '

Hello

'
if __name__ == '__main__': app.run(debug=True)

控制结构

在模板中使用条件控制语句

{% if user %}
    Hello, {{user}}
{% else %}
    Hello,Stranger!
{% endif %}

在模板中渲染一组元素

<ul>
    {% for comment in comments %}
        <li>{{comment}}li>
    {% endfor %}
ul>

Flask上下文

Flask使用上下文临时把某些对象变为全局可访问。使用上下文让变量在一个线程中全局可访问,与此同时不会干扰其他线程。
Flask中有两种上下文,程序上下文和请求上下文

变量名 上下文 说明
current_app 程序上下文 当前激活程序的实例
g 程序上下文 处理请求时用作临时存储的对象,每次请求都会重设这个变量
request 请求上下文 请求对象,封装了客户端发出的HTTP请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要记住的值得词典

请求钩子

有时在处理请求之前或之后执行代码,可以使用钩子。Flask支持四种钩子
before_first_request 注册一个函数,在处理第一个请求之前运行
before_request 注册一个函数,在每次请求之前运行
after_request 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行
teardown_request 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行
例如,before_request处理程序可以从数据库中加载已登录的用户,并将其保存到g.user中,随后调用视图函数时,视图函数再使用g.user获取用户。

获取响应

from flask import make_response
def index():
    response = make_response('content')
    response.set_cookie('answer','42')
    return response

from flask import redirect

@app.route('/')
def index():
    return redirect('http://www.baidu.com')

from flask import abort
@app.route('/')
def get_user(id):
    abort(404)

注意:abort不会把控制权交还给调用它的函数,而是抛出异常把控制权交给Web服务器。

Flask扩展

使用Flask-script支持命令行选项
Flask-script是一个Flask扩展,为Flask程序添加了一个命令行解析器。pip3 install flask-script
使用Flask-script

# from flask.ext.script import Manager
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)

if __name__ == '__main__':
    manager.run()

这样,可以通过 python hello.py runserver以调试模式启动web服务器,查看更多选项可以使用python hello.py runserver --help

本文参考《Flask Web开发-基于Python的Web应用开发实战》

你可能感兴趣的:(python,Flask)