连接 python 服务器和 html

connect python server and html

我使用 python 创建了一个服务器:

    import sys
    import BaseHTTPServer
    from SimpleHTTPServer import SimpleHTTPRequestHandler

    HandlerClass = SimpleHTTPRequestHandler
    ServerClass = BaseHTTPServer.HTTPServer

    Protocol = "HTTP/1.0"
    if sys.argv[1:]:
        port = int(sys.argv[1])
    else:
        port = 8008
    server_address = ('127.0.0.1', port)
    HandlerClass.protocol_version = Protocol
    httpd = ServerClass(server_address, HandlerClass)
    sa = httpd.socket.getsockname()
    print "Serving HTTP on", sa[0], "port", sa[1], "..."
    httpd.serve_forever()

然后创建一个简单的 HTML 表单:

    <form action="" method="GET">
      User Name :
      <input type="text"id="username" placeholder="Enter User Name">
      Password  :
      <input type="password" id="password" placeholder="Enter Password">
      <button type="submit" id="submit">Sign in</button>
    </form>

使用此代码,我想将数据从 HTML 表单传输到 Python,然后打印。 我尝试了很多但没有一个线程帮助我,否则我无法理解所以请给我一些建议如何使用上面的服务器代码在控制台中打印 usernamepassword 框值。

一方面,您需要将名称属性添加到表单上的 <input> 字段。如果没有这些,则不会在 GET 查询字符串中发送任何数据。

<form action="" method="GET">
    User Name :
    <input type="text" name="username" id="username" placeholder="Enter User Name">
    Password  :
    <input type="password" name="password" id="password" placeholder="Enter Password">
    <button type="submit" id="submit">Sign in</button>
</form>

然后您应该会看到转储到控制台的用户名和密码表单字段:

Serving HTTP on 127.0.0.1 port 8008 ...
127.0.0.1 - - [08/Jan/2015 23:56:38] "GET /x.html HTTP/1.1" 200 -
127.0.0.1 - - [08/Jan/2015 23:56:43] "GET /x.html?username=someone&password=secretstuff HTTP/1.1" 200 -

编辑(如何处理请求)

要访问查询字符串中存在的各个字段,您可以覆盖 SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET() 方法并像这样解析查询:

from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
from urlparse import urlparse, parse_qs

class CustomHTTPRequestHandler(SimpleHTTPRequestHandler):
    def do_GET(self):
        query_string = urlparse(self.path).query
        fields = parse_qs(query_string) if query_string else {}
        if fields:
            print "username = {}, password = {}".format(fields.get('username')[0], fields.get('password')[0])
        return SimpleHTTPRequestHandler.do_GET(self)

if __name__ == '__main__':
    BaseHTTPServer.HTTPServer(('', 8008), CustomHTTPRequestHandler).serve_forever()

请注意,出于安全原因,您应该在 HTML 表单和 https 中使用 POST。另外,根据您的要求查看 CGIHTTPServer in combination with the cgi module, or even 3rd party web frameworks such as bottle, flask, or even django 。这些框架使您更容易实现您想要的那种服务器。