Flask:程序的基本结构
来源:互联网 发布:mac系统怎样翻墙 编辑:程序博客网 时间:2024/06/10 02:43
初始化
from flask import Flask #导入Flask模块
app = Flask(__name__) #创建Flask类的实例
注:对于Flask开发者来说,传给Flask应用程序构造函数的name参数是比较容易弄混淆的。Flask使用这个参数来确定应用程序的根目录,这样以后可以相对这个路径来找到资源文件。
路由和视图函数
注册新的路由
在Flask应用中,路由是指用户请求的URL与视图函数之间的映射。
Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器。
匹配动态URL
route装饰器 :可以使用Flask应用实例的route装饰器将一个URL规则绑定到一个视图函数上。
下面程序中route装饰器将根目录绑定在index视图上。
@app.route('/')def index():
return '<h1>Hello World!</h1>'
URL变量类型过滤
@app.route('/user/<name>')def user(name):
return '<h1>Hello, %s</h1>' % name
类似:
int 接受整数(float接受浮点数)@app.route('/post/<int:post_id>')
path转换器允许规则匹配包含/的字符串。@app.route('/file/<path:fname>')
启动服务器
if __name__ == '__main__':
app.run(debug=True)
# 模块是对象,并且所有的模块都有一个内置属性 __name__。# 一个模块的 __name__ 的值取决于您如何应用模块。# 如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。# 但是您也可以像一个标准的程序样直接运行模块,# 在这种情况下, __name__ 的值将是一个特别缺省"__main__"。
# debug=True 调试模式开启
一个完整的程序
hello.py: 一个完整的Flask程序
from flask import Flask
app = Flask(__name__)
@app.route('/')def index():
return '<h1>Hello World!</h1>'
if __name__ == '__main__'
app.run(debug=True)
运行结果如下:
hello.py: 包含动态路由的Flask程序
from flask import Flask
app = Flask(__name__)
@app.route('/')def index():
return '<h1>Hello World!</h1>'
@app.route('/user/<name>')def user(name):
return '<h1>Hello,%s</h1>' % name
if __name__ == '__main__'
app.run(debug=True)
# 定义了动态路由/user/<name>
运行结果如下:
请求-响应循环
程序和请求上下文
请求对象封装了客户端发送的HTTP请求。
将请求对象作为参数传入视图函数,视图函数即可访问请求对象。
from flask import request
@app.route('/')def index():
user_agent = request.headers.get('User-Agent')
return '<p>Your browser is %s</p>' % user_agent
Flask上下文全局变量
变量名
上下文
说明
current_app
程序上下文
当前激活程序的程序实例
g
程序上下文
处理请求时用作临时存储的对象。每次请求都会重设这个变量。
request
请求上下文
请求对象,封装了客户端发出的HTTP请求中的内容。
session
请求上下文
用户会话,用户存储请求之间需要“记住”的值的词典
程序上下文使用方法:
>>> from hello import app>>> from flask import current_app>>> current_app.nameTraceback(most recent call last):
...RuntimeError:working outside of application context>>> app_ctx = app.app_context()>>> app_ctx.push()>>> current_app.name'hello'>>> app_ctx.pop()# app.app_context()可获得一个程序上下文
请求调度
URL映射中的HEAD、Options、GET是请求方法,由路由进行处理。
不同的请求方法发送到相同的URL上时,会使用不同的视图函数进行处理。
请求钩子
Flask支持以下4种钩子:
before_first_request:注册一个函数,在处理第一个请求之前运行。
before_request:注册一个函数,在每次请求之前运行。
after_request:注册一个函数,如果没有未处理的异常抛出,也在每次请求之后运行。
teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
响应
创建响应对象并设置Cookie
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
重定向
from flask import redirect
@app.route('/')def index():
return redirect('http://www.example.com')
错误处理
from flask import abort
@app.route('/user/<id>')def get_user(id):
user = load_user(id)
if not user:
abort(404)
return '<h1>Hello, %s</h1>' % user.name
Flask扩展
Flask被设计为可扩展模式,一些重要功能是用安装包的形式增加。
使用Flask-Script支持命令行选项
(venv)$pip install flask-script
hello.py:使用Flask-Script
from flask_script import Manager
manager = Manager(app)# ...if __name__ == '__main__':
manager.run()
运行Python程序: python hello.py runserver
web服务器可使用http://a.b.c.d:5000/ 网络中的任一台电脑进行访问,其中'a.b.c.d'是服务器所在计算机的外网的IP地址。
Python hello.py runserver --host 0.0.0.0
文章来自:segmentfault
- Flask:程序的基本结构
- Flask程序的基本结构
- Flask(2)-程序的基本结构
- 程序的基本结构:第一个Flask程序
- Flask学习之一——程序的基本结构
- flask 学习之路(二) 程序的基本结构
- Flask Web开发 第一部分 virtualenv & 第2章 Flask程序的基本结构
- Python Flask Web 第一课 —— 基本概念和程序的基本结构
- Flask基本结构
- Flask(7)-大型程序的结构
- flask学习笔记1【服务器程序基本结构】
- Flask学习笔记02--Flask基本结构
- 程序的基本结构
- 程序的基本结构
- 程序的基本结构
- Flask基本结构(一)
- Flask 多文件基本结构
- flask大型程序的结构学习中遇到的问题
- mysql5.6 中文乱码问题
- POJ 1789 Truck History(最小生成树)
- android 中添加一个服务
- 宜信大数据信息
- 分布式搜索Elasticsearch——MultiSearch
- Flask:程序的基本结构
- Value【NOIP2016提高A组模拟8.17】
- Android ListView部分属性介绍
- 分布式搜索Elasticsearch——删除指定索引
- Intent传递对象——Serializable和Parcelable区别
- 网络爬虫——原理简介
- NOIP提高模拟 Binary
- JAVA_Apache_POI操作EXCEL(与第一个sheet相同去重)
- 51Nod-1076-2条不相交的路径