Flask实例教程四

一:Flask处理请求和回复

Flask和Werkzeug提供了request和response对象去处理请求和回复的数据。Flask通过@app.route包裹的函数(后面我们称这个函数叫做视图函数),来响应请求。

视图函数返回的值可以分为三类:

string:返回的就是普通的字符串。

一个response的实例:具备HTTP属性的一个响应的对象的实例。通过make_respone来构建

一个元组:(string,status)或者(string,status,http_headers)这样的结构,对于这种方式很方面不需要创建response的实例。

下面是这三种方式的例子:

# encoding=utf-8
from flask import Flask,make_response

app = Flask(__name__)

@app.route("/string/")
def return_string():
    return "Hello,world"

@app.route("/object/")
def return_object():
    headers={‘Content-Type‘:‘text/plain‘}
    return make_response(‘Hello,world‘,200,headers)

@app.route("/tuple/")
def return_tuple():
    return "hello,world",304,{‘Content-Type‘:‘text/plain‘}

三种方式的总结:

方式一:   最简单,最常用,后面可借助模板引擎输出html,但是不可以定制响应。

方式二:灵活性强,可对响应报文进行定制,定制status等等,但是需要创建一个response的实例

方式三:   具备方式二的优点,并且简单明了。

二:Flask request对象详解

通过下面的一个例子全面的去了解flask中的request对象:

# encoding=utf-8
from flask import Flask,request

app = Flask(__name__)

def dump_request_detail(request):
    request_detail="""
request.endpoint:{request.endpoint}
request.method:{request.method}
request.view_args:{request.view_args}
request.args:{request.args}
request.form:{request.form}
request.user_agent:{request.user_agent}
request.files:{request.files}
request.is_xhr:{request.is_xhr}
{request.headers}""".format(request=request).strip()
    return request_detail

@app.before_request
def call_me():
    app.logger.debug(dump_request_detail(request))

@app.after_request
def call_me(response):
    app.logger.debug("#After Request#\n"+repr(response))
    return response

@app.route("/string/")
def return_string():
 return "Hello,World"

上面这个程序会通过app.logger.debug开启日志调试,通过在dos窗口下可以看下日志输出的信息。

重点介绍下before_request这个装饰器,这个装饰器包裹下的函数会在每次request前执行。

after_request会在每次request结束后执行。但是有一个情况就是如果一个request没有正常结束的话,那么after_request下包裹的函数是不会执行的。

那么就有另外一个装饰器teardown_request,这个装饰器无论请求是否正常结束都会执行的。

接下来开始运行上面的应用,并查看DOS窗口下的输出信息。

到此本节到此结束,更多知识还需要读者自己 进一步去了解。

Flask实例教程四

时间: 2024-10-06 22:32:16

Flask实例教程四的相关文章

Flask实例教程六

Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行,提供能兼容众多数据库(如 SQLite.MySQL.Postgres.Oracle.MS-SQL.SQLServer 和 Firebird)的企业级持久性模型. 一.为你的Flask应用加载Flask-SqlAlchemy扩展 from flask import Flask from fl

Flask实例教程五

一:Flask中的g对象 Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据.可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子.下面的这个例子会使用random随机产生一个0~9的整数,并使用g.x保存并记录debug日志: # encoding=utf-8 from flask import Flask from flask import g import random app = Flask(__name__) @app.before_re

Flask实例教程三

一:Flask中url的工作方式 # encoding=utf-8 from flask import Flask app = Flask(__name__) @app.route("/task/") def task_list():     return "List of all task" @app.route("/task/<int:task_id>/") def task_detail(task_id):     return

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

Flask 学习(四)静态文件

Flask 学习(四)静态文件 动态 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件.理想情况下你的服务器已经配置好提供静态文件的服务. 在开发过程中, Flask 也能做好这个工作. 静态文件引用 我们先来看下普通的 html 引用静态文件,如 css(js也同样,就不多加示例了),以下为一简单实例,直接打开html: flask 处理 —— static 若直接将该html 当成 flask 模板,相对路径自然就失效了,静态文件将不会被成功读取. 那在flask中

flask 大型教程项目优化版(1):Hello World

Hello World 作者背景 作者是一个使用多种语言开发复杂程序并且拥有十多年经验的软件工程师.作者第一次学习 Python 是在为一个 C++ 库创建绑定的时候. 除了 Python,作者曾经用 PHP, Ruby, Smalltalk 甚至 C++ 写过 web 应用.在所有这些中,Python/Flask 组合是作者认为最为自由的一种. 应用程序简介 作为本教程的一部分–我要开发的应用程序是一个极具特色的微博服务器,我称之为 microblog . 我会随着应用程序的不断地进展将涉及到

BPEL 实例教程

http://www.oracle.com/technetwork/cn/articles/matjaz-bpel1-090722-zhs.html BPEL 实例教程 作者:Matjaz Juric 了解如何创建一个将一系列虚拟的.与旅行相关的 web 服务结合起来的示例业务流程,然后将其部署到 Oracle BPEL Process Manager 运行时环境. 本文相关下载  示例代码 Oracle BPEL Process Manager 和 Designer 面向 Web 服务的业务流

开机动画 看图学Android---Android 开发实例教程五

Android实例图解教程目录 http://blog.csdn.net/wyx100/article/details/45061407 在<开发一个新的android界面.界面跳转 看图学Android---Android 开发实例教程三.四>基础完成开机动画,开机界面的图片,在5.5秒内逐渐消失,显示主界面. 只修改StartActivity.java中代码以下部分 StartActivity.java源代码 package com.example.helloword; import an

Quartz教程四:Trigger

原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣研究源码的同学,可以参考我对quartz-core源码的注释(进行中). 与job一样,trigger也很容易使用,但是还有一些扩展选项需要理解,以便更好地使用quartz.trigger也有很多类型,可以根据实际需要来选择. 最常用的两种trigger会分别在教程五:SimpleTrigger和教