加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Flask笔记:视图函数/方法返回值(HTML模板/Response对象)

发布时间:2020-12-15 00:32:10 所属栏目:大数据 来源:网络整理
导读:返回HTML模板: 使用“from flask import render_template”,在函数中传入相对于文件夹“templates”HTML模板路径名称字符串即可(默认模板路径),flask会自动到项目根目录的“templates”文件夹(创建flask项目时,PyCharm会自动创建两个空文件夹,其中一

返回HTML模板:使用“from flask import render_template”,在函数中传入相对于文件夹“templates”HTML模板路径名称字符串即可(默认模板路径),flask会自动到项目根目录的“templates”文件夹(创建flask项目时,PyCharm会自动创建两个空文件夹,其中一个就是“templates”)下寻找对应的HTML文件。

  1. 默认模板路径:项目根目录下的templates文件夹。
  2. 自定义模板路径:如果不想使用默认的模板路径,即项目根目录的templates文件夹,可以在实例化flask时指定参数template_folder的值,以指定默认模板的路径。
  3. 模板传参:如果需要给HTML模板传参,则在“render_template”中使用变量名或字典进行传参即可(在Python2中,如果涉及中文,需要使用Unicode字符串)。

  

?

返回Response对象:视图函数返回响应Response给浏览器,一般来说只能是字符串和固定格式的元组,当然也可以自定义,但无论是返回哪种数据格式,最终都是被包装成一个Response对象返回给浏览器的。返回的是字符串时,其实也是被包装成Response对象返回给浏览器的。也可以是一个固定格式的元组:(Response,status,headers),即响应体、状态码和头信息的元组,可以只返回一个Response,或者两个(Response,status),或者全部返回(Response,headers)。当可以自定义返回的响应体时需要注意以下几点:

  • Response子类:自定义的Response子类必须继承自from flask import Response(其实就是from werkzeug.wrappers import Response)。
  • response_class:使用app.response_class=MyResponse使之生效。
  • force_type(response,environ=None):当返回的数据类型,既不是字符串,也不是元组时,flask就会调用Response的force_type方法来处理,如果不能处理就会返回错误,所以Response子类一般是需要重写这个方法来返回一个合法的数据,参数response即为传入的不合法的数据,可以经过处理后返回一个合法的Response对象。
  •  1 from flask import Flask,Response
     2 
     3 app = Flask(__name__)
     4 
     5 
     6 class MyResponse(Response):
     7     """自定义Response类"""
     8     @classmethod
     9     def force_type(cls,response,environ=None):
    10         重写force_type方法,当参数既不是字符串,
    11         也不是(Response,headers)元组时会调用此方法12         if isinstance(response,list):
    13             response = Response('+'.join(response))
    14 
    15         # 这里需要包装成Response对象才能传入父类的force_type中,
    16          只传字符串会报错
    17         return super().force_type(response,environ)
    18 
    19 
    20  指定自定义的Response类,使之生效
    21 app.response_class = MyResponse
    22 
    23 
    24 @app.route(/listresponse/25 def list_response():
    26      返回一个不合法的数据
    27      如果没有自定义的Response类来处理的话,就会报错
    28     return [python',36]
    29 
    30 
    31 if __name__ == __main__:
    32     app.run(debug=True)

    ?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读