Flask实战第6天:视图函数Response返回值

视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下:

如果返回的是一个合法的响应对象,则直接返回

可以使用make_response函数来创建Response对象,这个方法可以设置额外的数据,比如cookie、header信息等

rom flask import Flask
from flask import make_response

app=Flask(__name__)

@app.route(‘/about/‘)
def about():
    return make_response(‘about page‘)

如果返回的是一个字符串,那么Flask会重新创建一个werkzeug.wrappers.Response对象,Response将该字符串作为主体,状态码为200,MIME类型为text/html,然后返回该Response对象

@app.route(‘/about/‘)
def about():
    return ‘about page‘
from werkzeug.wrappers import Response

app=Flask(__name__)

@app.route(‘/about/‘)
def about():
    resp=Response(response=‘about page‘,status=200,content_type=‘text/html;charset=utf8‘)
    return resp

如果返回的是一个元组,元组中的数据类型是(response,status,headers)。status会覆盖默认的200状态码,headers可以是一个列表或者字典作为额外的消息头

from flask import Flaskfrom flask import make_responsefrom werkzeug.wrappers import Response

app=Flask(__name__)

@app.route(‘/about/‘)def about():    return ‘about page‘,200,{‘server‘:‘xiaomingyan‘}

if __name__ ==‘__main__‘:    app.run(host=‘127.0.0.1‘,port=8080) # 运行,指定监听地址为127.0.0.1:8080

如果以上条件都不满足,Flask会假设返回值是一个合法的WSGI应用程序,并通过Response.force_type(rv,request.environ)转换为一个请求对象

我们尝试返回一个字典,字典不满足上面的三个条件,因此进入第4步,但是字典也不是一个合法的WSGI应用程序,因此不是一个可请求对象。产生异常!

@app.route(‘/about/‘)
def about():
    return {‘name‘:‘heboan‘}

如果我们想把所有的URL都发送 JSON数据,那么我们就可以执行响应

自定义响应必须满足3个条件

1、必须继承Response类

2、实现类方法force_type(cls, response, environ=None)

3、必须制定app.response_class为你定义的Response

我们可以定义一个叫做JSONResponse的类来代替Flask自带的Response类

#coding=utf-8

from flask import Flask
from werkzeug.wrappers import Response
from flask import jsonify

app=Flask(__name__)

class JSONResponse(Response):
    default_mimetype = ‘application/json‘
    @classmethod
    def force_type(cls, response, environ=None):
        if isinstance(response,dict):
            response=jsonify(response)
            return super(JSONResponse,cls).force_type(response,environ)
app.response_class=JSONResponse
@app.route(‘/about/‘)
def about():
    return {‘name‘:‘xiaomingyan‘}

if __name__ ==‘__main__‘:
    app.run(host=‘127.0.0.1‘,port=8080) # 运行,指定监听地址为127.0.0.1:8080

2019-01-1717:42

UP UP!!!

原文地址:https://www.cnblogs.com/xinbaby2358/p/10283539.html

时间: 2024-11-01 10:16:03

Flask实战第6天:视图函数Response返回值的相关文章

第二天,函数的返回值return

首先是前一天问题的答案 第一题: <!DOCTYPE html> <html lang="en"> <heda> <meta charset="UTF-8">  <title></title> </head> <body> </body> </html> 第二题: 结构-HTML 表现-CSS 行为-JavaScript 第三题 <!DOCT

测试函数用Return 返回值和用函数名返回值的区别

'*************************************************************************'**模 块 名:工程1 - Form1'**说    明:蓝凤凰设计商城 浴火凤凰-郭卫 | 蓝凤凰-魔灵 | 郭卫-icecept'**创 建 人:浴火凤凰-郭卫'**日    期:2015年10月19日  21:53:17'**修 改 人:浴火凤凰-郭卫'**日    期:'**描    述:QQ:493405998 | 微信\旺旺:icece

赋值运算符函数的返回值类型详解

在c++赋值运算符函数的学习中,对于返回值类型的问题,一直非常费解,今天彻底总结一些每种不同返回值类型的结果: 1.当返回值为空时: <span style="font-size:14px;">void hasptr::operator=(const hasptr& s)</span> 这个时候如果只有一个'='(a = b)运算那就没问题,但是如果存在'='(a = b = c)的链式操作时,编译器就会报错 我们看:a = b = c: 程序会先运行

函数的返回值

1.params 可变参数  必须出现在参数列表的最后. 2.ref 仅仅是一个地址,引用传递,可以把值传递强制改为引用传递 3.out 让函数可以输出多个值 •1.在方法中必须为out参数赋值 •2.out参数的变量在传递之前不需要赋值,即使赋值了也不能在方法中使用.(赋值没意义) 3ref •参数在传递之前必须赋值 •在方法中可以不为ref参数赋值,可以直接使用. ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所. 函数的返回值,布布扣

shell获取函数的返回值

背景:定义了一个函数,比对本地和线上服务器集群数量差别,想要获取不同集群的个数.shell和其他语言的函数返回值还是差别挺大的. 定义一个函数 functionname(){ 操作内容 echo 输出内容 return 返回值 #返回值可有可不有 } 获得函数的返回值 1.函数默认是将标准输出传递出来,不是返回值. 所以如果直接调用functionname,实际上是将输出传递回来 例如: a=`functionname` 将函数functionname的标准输出传递给a 2.调用函数不需要加()

有的函数有返回值 有的没有 当测试输出为为空时,应该是不需要接收的函数你给接收了

replace函数有返回值  需要变量接收(大部分都需要变量接收) s='abc' s=s.replace('a','x',1) 列表remove函数无返回值(非常特殊) 不需要变量接收 li=[1,2,3]  li.remove(1) 列表extend函数无返回值 不需要变量接收

Scheme高阶函数之函数作为返回值暨currying/柯里化

1.4.1currying/柯里化 通常,编程的函数可以有一个参数列表,而λ表达式要求单参数.所以,currying/柯里化--多个参数的函数转化为只有一个参数的多个函数的连续调用,需要函数作为返回值. 有λ表达式,λx. λy. ( 2x+3y) (define (F x y)(+ ( * 2 x) (* 3 y)));;;等价于下面的表示 (define F (lambda ( x y) (+ ( * 2 x) (* 3 y)) ) ) (F 2 3)            → 13 函数F

关于printf函数的返回值问题

#include <stdio.h> #include <stdlib.h> int main() { printf("%d", printf("%d", printf("%d", 43))); system("pause"); return 0; } 大家平时经常使用printf这个输出函数,但是有多少人想过它的返回值是什么?或者想过它有没有返回值! 通过上面程序的运行结果就可以知道printf函数的

关于PHP中eval函数的返回值

关于eval 的概念就是把字符串作为PHP代码执行.但是关于其返回值,有时候容易出错. 如下面定义一个函数 function get_func_type(){ return array(1=>'字符串处理','2'=>'数组处理'); } 你能正确说出例1,例2,例3的执行结果吗? 例1 $p=eval('get_func_type();'); trace($p); 例2 $p=eval('return get_func_type();'); trace($p); 例3 eval('$p=ge