如何java中自定义异常类Flask中的响应类

如何自定义Flask中的响应类_百度知道
如何自定义Flask中的响应类
我有更好的答案
Flask中的响应类下面的类定义,展示了我眼中这个类所具备的灵活属性和方法:class Response:
charset = 'utf-8'
default_status = 200
default_mimetype = 'text/html'
def __init__(self, response=None, status=None, headers=None,
mimetype=None, content_type=None, direct_passthrough=False):
@classmethod
采纳率:98%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何自定义Flask中的响应类_百度知道
如何自定义Flask中的响应类
我有更好的答案
Flask框架中的响应类,命名很贴切,叫Response。不过Flask应用中很少直接调用这个类。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Flask中的响应(response) - 简书
Flask中的响应(response)
Flask中的Response.
一些特殊的响应.
Flask中的Response
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '***Saltriver***'
if __name__ == '__main__':
仍然从Flask.wsgi_app()开始分析. 我们假设整个过程没有异常发生.
def wsgi_app(self, environ, start_response):
# 此处获得response.
response = self.full_dispatch_request()
# 返回response调用后的结果.
return response(environ, start_response)
在full_dispatch_request()中:
def full_dispatch_request(self):
if rv is None:
rv = self.dispatch_request()
# 设置print语句,用于查看rv的值.
# 对于示例程序,rv的值为'***Saltriver***'
print('rv---&', rv)
response = self.make_response(rv)
response = self.process_response(response)
return response
下面我们看self.make_response(rv), make_response文的档说道,rv值可以有4种类型,其中就包括str类型的字符串,其他暂时忽略不管,先分析示例程序中rv为字符串的类型.
def make_response(self, rv):
status_or_headers = headers = None
if not isinstance(rv, self.response_class):
# 如果rv为text_type类型.
if isinstance(rv, (text_type, bytes, bytearray)):
# 用response_class对rv进行包装(wrap).
rv = self.response_class(rv, headers=headers,
status=status_or_headers)
headers = status_or_headers = None
response_class是如何对rv进行包装的呢?可查看werkzeug官方文档5.4节Response. 文档说, In reality, response objects are nothing more than glorified WSGI applications. 实际上,response对象不过是一个遵循WSGI标准的应用而已. 也就是说,我们甚至可以调用它.调用它时,传入什么参数呢? environ和start_response.
回到full_dispatch_request()中,对于process_response(response),主要做两件事情,调用after_request_functions和设置Cookies, 以此对response做最后的处理.示例程序没有实质性process-response. 最后,返回response(environ, start_response)! 下面来仔细研究研究.
def run(self, host=None, port=None, debug=None, **options):
# self为一个Flask实例.
run_simple(host, port, self, **options)
在app.run()里,会调用run_simple函数.我们可以在werkzeug.serving中查看.
def inner():
make_server(hostname, port, application, threaded,
processes, request_handler,
passthrough_errors, ssl_context).serve_forever()
在run_simple()中, 我们会调用make_server(...).serve_forever(), 假设make_server返回的是BaseWSGIServer. 在WSGIRequestHandler中,重点分析run_wsgi()函数.下面看其中的execute函数,因为app(environ, start_response)就在其中执行.
def execute(app):
application_iter = app(environ, start_response)
for data in application_iter:
write(data)
if not headers_sent:
write(b'')
if hasattr(application_iter, 'close'):
application_iter.close()
application_iter = None
由于我们在Flask.wsgi_app(...)返回一个是一个response对象,传入execute函数的app,也就是response对象.
# Werkzeug/wrappers.py/Class.BaseResponse
def __call__(self, environ, start_response):
app_iter, status, headers = self.get_wsgi_response(environ)
start_response(status, headers)
return app_iter
start_response的任务就是设置了WSGIRequestHandler中run_wsgi中的headers_set变量:
headers_set[:] = [status, response_headers]
而在run_wsgi中的write(data)函数中, 在向wfile写入data之前,会先写入status和response_headers.
def write(data):
assert headers_set, 'write() before start_response'
if not headers_sent:
# &---注意此处.
status, response_headers = headers_sent[:] = headers_set
code, msg = status.split(None, 1)
except ValueError:
code, msg = status, ""
self.send_response(int(code), msg)
# &---注意此处.
header_keys = set()
for key, value in response_headers:
self.send_header(key, value)
key = key.lower()
header_keys.add(key)
if 'content-length' not in header_keys:
self.close_connection = True
self.send_header('Connection', 'close')
if 'server' not in header_keys:
self.send_header('Server', self.version_string())
if 'date' not in header_keys:
self.send_header('Date', self.date_time_string())
self.end_headers()
# &---注意此处.
assert type(data) is bytes, 'applications must write bytes'
self.wfile.write(data)
# &---注意此处.
self.wfile.flush()
下面是一些留给我自己思考问题(但还没有解决的问题):
WSGI接口为什么要这样设计?
app_iter为什么是iterable的?
准备再重新读一遍PEP333. _
[TOC]一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见。最近正好时间充裕,决定试试做一下,并记录一下学习心得。首先说明一下,本文研究的Flask版本是0.12。首先做个小示例,在pycharm新建flask项目&flask_source&后,默认创建项目入口&...
全文基于Python 2.7 macOS 10.12.2 werkzeug是Python实现的WSGI规范的使用函数库。什么是WSGI?如何理解CGI,WSGI 网上的说明很多,在文章的开始,我想要强调两点 WSGI是一种服务器和客户端交互的接口规范 理解web组件:cli...
本来做了个目录快速跳转的,后来简书不再支持这种写法,无奈阅读只能自己根据章节明ctrl+f/v/enter来定位了 ┑( ̄Д  ̄)┍ --------------------------目录结构----------------------- 前言 Flask框架的特点 本书...
回顾一下Flask的流程: WSGI Server 到 WSGI App 图中可以看到HTTP请求都是通过WSGI Server进行解包封装然后调用Flask App(WSGI App),这里再补充一张调用链的图: run_wsgi之前,都是WSGI Server的基于Py...
我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有开发者希望马上给自己做个博客出来,例如我),既然是WEB,免不了接触到一些WEB框架,例如Django,Flask,Torando等等,在开发过程中,看过一些文档总会介绍生产环境和开发环境服务器的配置问题,...
我的婆婆,她是一位糖尿病患者,患糖尿病已经有30多年了。据她回顾在1986年她就开始出现口干、多饮伴体重下降,当年她才35岁。婆婆家住农村,当时要去镇医院看病要走20多公里路(那个年代没有班车)。家里小孩就我老公和他大姐,孩子都在外面读书,加上家里经济条件又不好,就找了...
产品包装盒是一个长方形的白色盒子,盒子做工很精致,非常薄,表面上有一层膜。盒子背面有产品的信息。盒子盖上还有层黑色的海绵,对产品保护的很好。下边放着产品和数据线等。设计的很简洁。 把产品拿出来放在手里,说实话,以前也看过别人用,但真没想到这个产品有这么薄——8毫米。小巧精致...
今天下午,微信红包照片突然流行起来,朋友圈里满屏都是打了深度马赛克的照片。 微信朋友圈相关的内容,全变成金黄色,焕然一新。 玩法也很简单,操作与平常操作无异,只需要选择图片,输入想描述的话,就能生成一张模态的图片,等着红包。 微信红包图片在17:00开放,于今晚8点下线,而...
我们家不管是外婆还是奶奶都叫婆婆,如果有指代不明的情况就冠以住家地名,譬如外婆是安县婆婆,奶奶是界牌婆婆。我这里写的是我外婆,而非另一个婆婆。 我原来问过婆婆:为啥不喊外婆要喊婆婆?婆婆听了,怒目圆睁:嘿,又不是外人喊啥外婆?我就哑口无言了。 婆婆的思维灵活,嘴巴快而凶。小...
规范: 1.计算一定要准确,不要让内容的高度超过我们设置的宽高【再IE6下,内容会撑开设置好的宽高】; 2.在IE6元素浮动,如果宽度需要内容撑开,就给里边的块元素都加浮动; 3.在IE6,7下元素要通过浮动并在同一行,就给这行的元素都加浮动; 4.注意标签嵌套规范(p标签...如何自定义Flask中的响应类_百度知道
如何自定义Flask中的响应类
我有更好的答案
点“插入”-&“类”。 弹出一对话框。类的类型寻Generic Class”,然后填入你的类名,如果你要从基
采纳率:85%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Flask 教程,第十二部分:整合 - 技术翻译 - 开源中国社区
Flask 教程,第十二部分:整合
【已翻译100%】
英文原文:
推荐于 5年前 (共 7 段, 翻译完成于 12-29)
参与翻译&(1人)&:
这篇文章是我记录我使用的微型框架来编写网络程序的经验系列文章的第十二篇。
这系列教程的目的是开发一个功能像样的微型博客应用,并展示所有并非独创的,我决定称之为微型博客(轻博客?)。
这里是系列教程的目录,迄今为止已经发布的如下:
&翻译得不错哦!
如果你耍过一会微博程序,你一定会注意到我们还没有花费很多时间在它的外表上。到目前为止我们模版部分的组织还非常基础,且没有任何样式。这样很有好处,因为我们并不希望在编程时分散注意力到写好看HTML上。
但是现在我们不得不认真地花费些许时间来写了,所以今天我们中断一会来看看我们可以做些什么来让我们的程序对用户来说具有一些吸引力。
这篇文章与之前的将有所不同,因为写漂亮的HTML/CSS是一个浩瀚的话题并且会脱离这个系列文章初衷。这里讲不会有详细的HTML或CSS代码,我们将要讨论的是基本的路线和想法来更接近于完成该任务
&翻译得不错哦!
我们如何做?
当我们可以证明编程很苦逼,相比网页设计者来说我们的痛苦什么也不是,他们必须写出漂亮的并且在清单里的每一个浏览器里都显示一致的模版,而这些浏览器大多隐藏了BUG或者奇特的问题。再者在这个时代,他们不仅仅需要使他们的设计在不合格的浏览器里看起来不错,还要在资源有限的平板和智能手机的浏览器里显示。
不幸的是,学习HTML、CSS和Javascript并避免在不同浏览器显示正常是一个不确定及测算的任务。我们真的没有时间(或者兴趣)做这个。我们只是想让我们的程序看起来正常并且少花费精力。
所以我们如何在这么多限制下完成添加样式到我们的微型博客的任务?
&翻译得不错哦!
介绍Bootstrap
我们来至Twitter的好朋友发布一个开源的Web框架叫&,它可能就是我们制胜关键。
Bootstrap是一个用于所有通用类型的网页开发的CSS和Javascript组件集合。如果您想看看使用这个框架可以开发的页面效果,这里是一些。
下面是Bootstrap擅长的地方:
在主流浏览器上显示一致
自动捕获桌面,手机和平板的屏幕尺寸
自定义布局
完整样式的导航条
完整样式的表单
还有很多很多...
&翻译得不错哦!
Bootstrap微型博客
在我们将Bootstrap添加到我们程序中前,首先需要安装BootStrap的CSS/Javascript/图片等文件到我们Web服务器能够找到的地方.
在Flask内app/static目录就是这些文件合适的去处。服务器知道如何去找到这些文件如果它的URL包含了/Static前缀。
例如,如果我们保存一个文件名为image.png的文件到/app/static,
&img src="/static/image.png" /&
我们将依据下列的结构来安装& Bootstrap 框架:
bootstrap.min.css
bootstrap-responsive.min.css
glyphicons-halflings.png
glyphicons-halflings-white.png
bootstrap.min.js
然后我们遵从在基础模版的&head&标签内添加如下代码:
&!DOCTYPE html&
&html lang="en"&
&link href="/static/css/bootstrap.min.css" rel="stylesheet" media="screen"&
&link href="/static/css/bootstrap-responsive.css" rel="stylesheet"&
&script src="http://code.jquery.com/jquery-latest.js"&&/script&
&script src="/static/js/bootstrap.min.js"&&/script&
&meta name="viewport" content="width=device-width, initial-scale=1.0"&
&link&和&script&标签加载Bootstrap的CSS和Javascript文件。注意这里还需要的Javascript文件是,它被Bootstrap的一些插件所使用。
&翻译得不错哦!
&meta&标签可以开启Bootstrap的模式, 它缩放页面以适应桌面、平板和智能手机。
将这些改动添加到我们base.html模版里,我们就可以开始使用Bootstrap了,它简单地在我们的模版里做了些修改。
我们所要做的修改如下:
将所有页面内容封装在单列的内,它包含了.
使用Bootstrap的改写所有表单.
将我们的导航栏替换为.
转换我们的上一页和下一页链接为按钮.
使用Boostrap的替换FLASH信息栏.
在登陆表单中使用来替换建议的OpenID提供商.
我们将不会讨论以上这些特殊的修改因为这些很简单。有意思的是,这些修改都可以在这个用diff来查看。Bootstrap参考在尝试分析新的微型博客模版时会非常有用。
&翻译得不错哦!
今天我们承诺不写一行代码,我们坚持这样做。所有的我们所做的增加或修改都是修改模版文件。
只是为了给您一个巨大的转变的思路,这里有之前的和现在的一些截图。点击图片来放大他们。
如果想要改进程序可以再如下地址下载他们:
在下一章节我们打算改进日期和时间的显示格式。期望届时能再次见到您的身影!
&翻译得不错哦!
我们的翻译工作遵照 ,如果我们的工作有侵犯到您的权益,请及时联系我们

我要回帖

更多关于 自定义响应式布局 的文章

 

随机推荐