Flask:程序的基本结构

初始化

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映射中的HEADOptionsGET是请求方法,由路由进行处理。
不同的请求方法发送到相同的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

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值