flask post请求浏览器请求一个方法后怎么打印元组

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!频道本月排行
随机推荐文章
Copyright (C) 2006 - 2016 www.eorder.net.cn
All Rights Reserved# flask开发之(URL配置)【python吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:185,068贴子:
# flask开发之(URL配置)收藏
一楼献祭度娘
应用吧活动,
python_总监级名师全程面授,项目实战案例式教学,企业需求无缝对接,助你无忧就业!python,0基础21周快速实现高薪就业,0元试听两周.名额有限,欲报从速.点击抢座
# flask入门(二) ### 页面跳转和重定向:重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此我们应该给他重定向到登录页面。
应用吧活动,
* 永久性重定向:`http`的状态码是`301`,多用于旧网址被废弃了要转到一个新的网址确保用户的访问,最经典的就是京东网站,你输入``的时候,会被重定向到``,因为`jingdong.com`这个网址已经被废弃了,被改成`jd.com`,所以这种情况下应该用永久重定向。
应用吧活动,
* 暂时性重定向:`http`的状态码是`302`,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果当前用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向。
应用吧活动,
在`flask`中,重定向是通过`flask.redirect(location,code=302)`这个函数来实现的,`location`表示需要重定向到的`URL`,应该配合之前讲的`url_for()`函数来使用,`code`表示采用哪个重定向,默认是`302`也即`暂时性重定向`,可以修改成`301`来实现永久性重定向。
应用吧活动,
应用吧活动,
### URL唯一:`Flask`的`URL`规则是基于`Werkzeug`的路由模块。这个模块的思想是基于`Apache`以及更早的`HTTP`服务器的主张,希望保证优雅且唯一的`URL`。举个例子:
@app.route('/projects/')
def projects():
return 'project page'
```上述例子中,当访问一个结尾不带斜线的`URL`会被重定向到带斜线的`URL`上去。这样有助于避免搜索引擎搜索同一个页面两次。
应用吧活动,
再看一个例子:
@app.route('/about')
def about():
return 'about page'
```以上例子中,当访问带斜线的`URL`(/about/)会产生一个404(&Not Found&)错误。
应用吧活动,
### 关于响应(Response):视图函数的返回值会被自动转换为一个响应对象,`Flask`的转换逻辑如下:* 如果返回的是一个合法的响应对象,则直接返回。* 如果返回的是一个字符串,那么`Flask`会重新创建一个`werkzeug.wrappers.Response`对象,`Response`将该字符串作为主体,状态码为200,`MIME`类型为`text/html`,然后返回该`Response`对象。* 如果返回的是一个元组,元祖中的数据类型是(response,status,headers),只能包含一个元素。status值会覆盖默认的200状态码,headers可以是一个列表或者字典,作为额外的消息头。* 如果以上条件都不满足,`Flask`会假设返回值是一个合法的`WSGI`t应用程序,并通过`Response.force_type(rv,request.environ)`转换为一个请求对象。 以下将用例子来进行说明:
应用吧活动,
第一个例子:直接使用`Response`创建:
from werkzeug.wrappers import Response
@app.route('/about/')
def about():
resp = Response(response='about page',status=200,content_type='text/charset=utf-8')
return resp
应用吧活动,
python,博为峰IT培训免费试听,0元入学,现在更有多重优惠,仅限今天!博为峰,真正的为年轻人服务的企业,14年间培训15万余名it工程师,成绩斐然!
第二个例子:可以使用`make_response`函数来创建`Response`对象,这个更加的方便,因为他封装了默认的`Content-Type`以及`status`等:
from flask import make_response
@app.route('/about/')
def about():
return make_response('about page')
应用吧活动,
第三个例子:通过返回元组的形式:
@app.errorhandler(404)
def not_found():
return 'not found',404
```第四个例子:自定义响应。自定义响应必须满足三个条件:* 必须继承自`Response`类。* 必须实现类方法`force_type(cls,rv,environ=None)`。* 必须指定`app.response_class`为你自定义的`Response`
应用吧活动,
以下将用一个例子来进行讲解,`Restful API`都是通过`JSON`的形式进行传递,如果你的`后台`跟前台进行交互,所有的`URL`都是发送`JSON`数据,那么此时你可以自定义一个叫做`JSONResponse`的类来代替`Flask`自带的`Response`类:
from flask import Flask,jsonify
from werkzeug.wrappers import Response
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 {&message&:&about page&}
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8000)
```此时如果你访问`/about/`这个`URL`,那么在页面中将会显示:
&message&: &about page&}
应用吧活动,
注意以上例子,如果不写`app.response_class = JSONResponse`,将不能正确的将字典返回给客户端。因为字典不在`Flask`的响应类型支持范围中,那么将调用`app.response_class`这个属性的`force_type`类方法,而`app.response_class`的默认值为`Response`,因此会调用`Response.force_class()`这个类方法,他有一个默认的算法转换成字符串,但是这个算法不能满足我们的需求。因此,我们要设置`app.response_class=JSONResponse`,然后重写`JSONResponse`中的`force_type`类方法,在这个方法中将字典转换成`JSON`格式的字符串后再返回。
应用吧活动,
应用吧活动,
登录百度帐号opencv通过webcam可以获取本地实时视频流,但是如果需要将视频流共享给其他机器调用,就可以将利用flask框架构建一个实时视频流服务器,然后其他机器可以通过向这个服务器发送请求来获取这台机器上的实时视频流。**[这篇文章](!
首先需要说明的是这里flask提供视频流是通过generator函数进行的,不了解的可以去查下文档这里就不具体讲了。flask通过将一连串独立的jpeg图片输出来实现视频流,这种方法叫做motion JPEG,好处是延迟很低,但是成像质量一般,因为jpeg压缩图片的质量对motion stream不太够用。
multipart 模式
想要将后一次请求得到的图片覆盖到前一次从而达到动画的效果就需要使用在response的时候使用multipart模式。Multipart response由以下几部分组成:包含multipart content类型的header,分界符号分隔的各个part,每个part都具有特定的content类型。multipart视频流的结构如下:
HTTP/1.1 200 OK
Content-Type: multipart/x-mixed- boundary=frame
Content-Type: image/jpeg
&jpeg data here&
Content-Type: image/jpeg
&jpeg data here&
flask server
具体实现代码:main.py
from flask import Flask, render_template, Response
import opencv
class VideoCamera(object):
def __init__(self):
# 通过opencv获取实时视频流
self.video = cv2.VideoCapture(0)
def __del__(self):
self.video.release()
def get_frame(self):
success, image = self.video.read()
# 因为opencv读取的图片并非jpeg格式,因此要用motion JPEG模式需要先将图片转码成jpg格式图片
ret, jpeg = cv2.imencode('.jpg', image)
return jpeg.tobytes()
app = Flask(__name__)
@app.route('/')
def index():
# jinja2模板,具体格式保存在index.html文件中
return render_template('index.html')
def gen(camera):
while True:
frame = camera.get_frame()
# 使用generator函数输出视频流, 每次请求输出的content类型是image/jpeg
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
@app.route('/video_feed')
# 这个地址返回视频流响应
def video_feed():
return Response(gen(VideoCamera()),
mimetype='multipart/x-mixed- boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True, port=5000)
index.html
&title&Video Streaming Demonstration&/title&
&h1&Video Streaming Demonstration&/h1&
&img src="{{ url_for('video_feed') }}"&
注:图片地址由大括号内的字典给出,指向app的第二个地址video_feed,在multipart模式下浏览器会将每次请求得到的地址对大括号进行更新。
如果视频流一直存在的话,这个app能输出视频流的的客户端的数量和web worker的数量相同,在debug模式下,这个数量是1,也就是说只有一个浏览器上能够看到视频流输出。
如果要克服这种局限的话,使用基于协同网络服务的框架比如gevent,可以用一个worker线程服务多个客户端。
阅读(...) 评论()没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!}

我要回帖

更多关于 flask 请求参数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信