python Flask学习笔记(一)

来源:互联网 发布:双十一淘宝津贴怎么用 编辑:程序博客网 时间:2024/06/04 21:14

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

render_template

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

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

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

@app.route('/user/<int:id>')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 Flaskapp = Flask(__name__)@app.route('/')def index():    return '<h1>Hello</h1>'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_responsedef index():    response = make_response('content')    response.set_cookie('answer','42')    return responsefrom 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 Managerfrom flask_script import Managerapp = Flask(__name__)manager = Manager(app)if __name__ == '__main__':    manager.run()

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

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

0 0
原创粉丝点击