日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WSGI小程序

發(fā)布時間:2025/4/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WSGI小程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模擬openstack中的WSGI,先看一下運行過程中的調(diào)用順序:

[root@jeguan-ctrl-01 WSGI]# python wsgi.py Router app_factory Router __init__ Router __call__ Router _dispatch Router match = {'action': u'getMessage', 'controller': <wsgi.Controller object at 0x17965d0>, 'user_id': u'123'} Controller __call__ Controller action = getMessage Controller params = {} Controller method = <bound method Controller.getMessage of <wsgi.Controller object at 0x17965d0>> Controller getMessage Controller result = {'Message': 'TestMessage'}
WSGI server 創(chuàng)建文件:wsgi.py

import logging import osimport webob.dec import webob.exc from paste.deploy import loadapp from wsgiref.simple_server import make_serverimport routes.middleware # Environment variable used to pass the request context CONTEXT_ENV = 'openstack.context'# Environment variable used to pass the request params PARAMS_ENV = 'openstack.params'LOG = logging.getLogger(__name__)class Controller(object):@webob.dec.wsgifydef __call__(self, req):print "Controller __call__"arg_dict = req.environ['wsgiorg.routing_args'][1]action = arg_dict.pop('action')print "Controller action = %s" % actiondel arg_dict['controller']context = req.environ.get(CONTEXT_ENV, {})context['query_string'] = dict(req.params.iteritems())context['headers'] = dict(req.headers.iteritems())context['path'] = req.environ['PATH_INFO']params = req.environ.get(PARAMS_ENV, {})print "Controller params = %s" % paramsfor name in ['REMOTE_USER', 'AUTH_TYPE']:try:context[name] = req.environ[name]except KeyError:try:del context[name]except KeyError:passparams.update(arg_dict)# TODO(termie): do some basic normalization on methods method = getattr(self, action)print "Controller method = %s" % methodresult = method(context, **params)print "Controller result = %s" % resultreturn webob.Response('OK')def getMessage(self,context, user_id):print "Controller getMessage"return {'Message': 'TestMessage'}passclass Router(object):def __init__(self):print "Router __init__"self._mapper = routes.Mapper()self._mapper.connect('/test/{user_id}',controller=Controller(),action='getMessage',conditions={'method': ['GET']})self._router = routes.middleware.RoutesMiddleware(self._dispatch, self._mapper)@webob.dec.wsgifydef __call__(self, req):print "Router __call__"return self._router@staticmethod@webob.dec.wsgifydef _dispatch(req):print "Router _dispatch"match = req.environ['wsgiorg.routing_args'][1]print "Router match = %s" % matchif not match:return webob.exc.HTTPNotFound()app = match['controller']return app@classmethoddef app_factory(cls, global_config, **local_config):print "Router app_factory"return cls()if __name__ == '__main__':"""Openstack WSGI interface:create a "Controller" and "Router" class with webob,pastedeploy,routes.Test case for Openstack WSGI."""configfile='testpaste.ini'appname="main"wsgi_app = loadapp("config:%s" % os.path.abspath(configfile), appname)
paste deploy文件:testpaste.ini

[DEFAULT] name=guan[composite:main] use=egg:Paste#urlmap /=show[pipeline:show] pipeline = root[app:root] paste.app_factory = wsgi:Router.app_factory


程序入口:

從testpaste.init可以看出,程序的入口處:

wsgi:Router.app_factory

轉(zhuǎn)載于:https://www.cnblogs.com/double12gzh/p/10166119.html

總結(jié)

以上是生活随笔為你收集整理的WSGI小程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。