在介绍flask中的request之前,先简单介绍下python中的ThreadLocal对象。ThreadLocal,故名思义,就是线程中的全局变量,最近才接触这个概念,之前在C++和C#中还没遇到过这个东西。首先看下下面的代码:
import threading
localobj=threading.local()
def threadfunc(name):
localobj.name=name
print 'localobj.name is %s' %name
if __name__=='__main__':
t1=threading.Thread(target=threadfunc,args=('Hyman',))
t2=threading.Thread(target=threadfunc,args=('liuzhihui',))
t1.start()
t2.start()
t1.join()
t2.join()
localobj就是一个Threadlocal对象,他对于每个线程来说是全局的,但是对于不同线程之间又可以保持不同。而flask中的请求对象request就由是这类对象。在多线程服务器中客户端每建立一个链接,服务器就创建一个线程,每个线程中就会有一个request来表示客户端的链接请求信息。
from flask import Flask
from flask import request
app=Flask(__name__)
@app.route('/')
def index():
user_agent=request.headers.get('User_Agent')
return 'user_agent is %s' %user_agent
if __name__=='__main__':
app.run()
启动浏览器时,输入 localhost:5000:
Github位置:
https://github.com/HymanLiuTS/flaskTs
克隆本项目:
git clone Git@github.com:HymanLiuTS/flaskTs.git
获取本文源代码:
git checkout FL02