我正在Twisted-Klein
用作服务器。这是一个简单的示例:
from klein import Klein
app = Klein()
@app.route('/health', methods=['GET'])
def health_check(request):
return ''
@app.route('/query/<path:expression>', methods=['GET'])
def query(request, expression):
return 'Expression: {0}'.format(expression)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
如何将HTTP Basic Auth添加到query
API端点?使用Flask,这很简单:http : //flask.pocoo.org/snippets/8/
但是我找不到在Twisted-Klein服务器上如何执行此操作的任何示例。
Twisted本身支持HTTP基本(和摘要)身份验证,该身份验证是可以应用于任何其他资源的资源包装器。
您的klein示例并未进行演示,但是klein可以(必须确实)可以从您的应用程序创建资源,以便使用Twisted的Web服务器。
您可以将它们结合起来,例如:
import attr
from zope.interface import implementer
from twisted.cred.portal import IRealm
from twisted.internet.defer import succeed
from twisted.cred.portal import Portal
from twisted.web.resource import IResource
from twisted.web.guard import HTTPAuthSessionWrapper, BasicCredentialFactory
from klein import Klein
app = Klein()
# ... define your klein app
@implementer(IRealm)
@attr.s
class TrivialRealm(object):
resource = attr.ib()
def requestAvatar(self, avatarId, mind, *interfaces):
# You could have some more complicated logic here, but ...
return succeed((IResource, self.resource, lambda: None))
def resource():
realm = TrivialRealm(resource=app.resource())
portal = Portal(realm, [<some credentials checkers>])
credentialFactory = BasicCredentialFactory(b"http auth realm")
return HTTPAuthSessionWrapper(portal, [credentialFactory])
您可以根据klein文档twistd web
运行此命令以使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句