📜  python中的服务器(1)

📅  最后修改于: 2023-12-03 15:04:36.679000             🧑  作者: Mango

Python中的服务器

Python是一种广泛使用的编程语言,它有着强大的开发资源和生态系统。在Python中,可以使用多种方式搭建服务器,例如Flask、Django、Tornado等框架,也可以使用Python自带的http.server模块快速地启动一个简单的Web服务器。

http.server模块

Python自带了一个http.server模块,它可以帮助我们快速地创建一个HTTP服务器。该模块提供了多个类和方法,可以用于自定义HTTP服务器的属性和功能。

快速启动HTTP服务器

以下是启动一个简单的Web服务器的示例代码:

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("Server started at localhost:", PORT)
    httpd.serve_forever()

该代码会创建并启动一个 HTTP 服务器,绑定在本地的 8000 端口。使用Python 3.x运行该代码,即可在浏览器中访问http://localhost:8000 ,以查看服务器的根目录。

高级选项

http.server模块还提供了多种高级选项,例如自定义请求处理类、设置访问权限、设置默认文档等。以下是一个更高级的示例,它会设置一个带有访问权限、默认文档和自定义请求处理程序的服务器:

import http.server
import socketserver

PORT = 8000


class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/admin':
            self.send_response(401)
            self.send_header('WWW-Authenticate', 'Basic realm="My Server"')
            self.end_headers()
        else:
            return http.server.SimpleHTTPRequestHandler.do_GET(self)


Handler = MyHttpRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("Server started at localhost:", PORT)
    httpd.serve_forever()

在该代码中,我们自定义了一个请求处理类 MyHttpRequestHandler,并重写了其中的 do_GET() 方法。当访问路径为 /admin 时,http.server模块将会发送一个401响应,请求用户进行身份验证。此外,我们还指定了默认文档,以及访问服务器所需的用户名和密码。

Flask框架

Flask是一个轻量级的Web应用程序框架,如果你需要搭建一个更具实用性、更易于扩展的Web服务器,Flask是一个不错的选择。

以下是一个简单的Flask代码示例:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)

在该代码中,我们首先安装了 Flask 模块,然后创建了一个 Flask 应用程序实例app。接下来,我们通过 @app.route 装饰器将函数 index() 注册为网站的根目录的处理程序。最后,我们使用 app.run() 方法启动服务器,该方法包含多个参数用于定制服务器的行为。

Django框架

Django是一个Web应用程序框架,它提供了诸如ORM、表单处理、管理界面、认证系统等高级功能。如果你需要构建一套复杂的Web应用程序,Django是一个很好的选择。

以下是一个使用Django搭建服务器的示例:

from django.http import HttpResponse
from django.urls import path
from django.views.generic import TemplateView
from django.core.wsgi import get_wsgi_application

def index(request):
    return HttpResponse("Hello World!")

urlpatterns = [
    path('', TemplateView.as_view(template_name="home.html"), name="home"),
    path('index/', index, name="index"),
]

application = get_wsgi_application()

在该示例代码中,我们首先安装 Django 模块,并定义了一个处理函数 index()。它会在访问 http://localhost:8000/index/ 时返回一个简单的“Hello World!”文本。接下来,我们使用多个路由,将其映射到不同的URL路径上,从而实现了服务器的基本功能。最后,我们使用 get_wsgi_application() 方法返回一个 WSGI 应用程序,以便服务器能够正常工作。

Tornado框架

Tornado是一个强大的Python Web应用程序框架,它具有出色的性能和扩展性。如果你需要构建一个高并发的Web服务器,Tornado是一种非常不错的选择。

以下是Tornado框架的一个简单示例:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    print("Server started at localhost: 8888")
    tornado.ioloop.IOLoop.current().start()

在该示例代码中,我们使用了Tornado框架,定义了一个类 MainHandler。当访问 http://localhost:8000/ 时,它将返回一个“Hello, world”文本。接下来,我们使用 make_app() 方法创建一个 Tornado 应用程序的实例,将路由映射到了 / 路径上,并使用 app.listen() 方法将服务器绑定到本地端口 8888。最后,我们调用了 IOLoop.current().start() 方法来启动服务器。