【问题标题】:Simple example of restful web service Python and client basic authenticationRESTful Web 服务 Python 和客户端基本身份验证的简单示例
【发布时间】:2015-07-30 10:39:12
【问题描述】:

出于学习目的,我想知道是否有一个简单的虚拟示例说明如何使用 python 处理具有基本身份验证的 http 请求。 我想遵循我找到并改编的示例中的相同模式,如下所示:

'''webservice.py'''
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.auth
from tornado.web import HTTPError

from tornado.escape import json_encode as dumps
from tornado.escape import json_decode as loads

import db
import settings

class MainHandler(tornado.web.RequestHandler):
    """Main Handler... list all databases"""

    def get(self):
        self.write(dumps(db.list_databases()))

application = tornado.web.Application([
    (r"/", MainHandler),
],
    cookie_secret='PUT_SOME_CODE',
)

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(settings.port)
    tornado.ioloop.IOLoop.instance().start()

当到达http://localhost:8888/ 时会出现一个数据库列表,这是脚本的目的。这可以通过浏览器和测试脚本访问,例如:

'''tester.py'''
from tornado.httpclient import HTTPClient
from tornado.escape import json_decode as loads

url='http://localhost:8888/'

http_client=HTTPClient()
response=http_client.fetch(url)
listResponse=loads(response.body)


print(listResponse)

http_client.close()

【问题讨论】:

标签: python web-services tornado restful-authentication


【解决方案1】:

这是最简单的基本身份验证示例。当然,它可以在很多方面进行改进,这只是一个演示它通常是如何工作的。

import httplib


class MainHandler(tornado.web.RequestHandler):
    """Main Handler... list all databases"""

    def get(self):
        self.check_basic_auth()
        do_stuff()

    def check_basic_auth(self):
        if not self.test_auth_credentials():
            raise HTTPError(httplib.UNAUTHORIZED, 
                            headers={'WWW-Authenticate': 'Basic realm="Auth realm"'})

    def test_auth_credentials(self):
        auth_header = self.request.headers.get('Authorization')

        if auth_header and auth_header.startswith('Basic '):
            method, auth_b64 = auth_header.split(' ')
            try:
                decoded_value = auth_b64.decode('base64')
            except ValueError:
                return False
            given_login, _, given_passwd = decoded_value.partition(':')
            return <YOUR_LOGIN> == given_login and <YOUR_PASSWORD> == given_passwd
        return False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2011-10-27
    • 2014-12-25
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多