【问题标题】:connect python server and html连接python服务器和html
【发布时间】:2015-01-08 11:33:22
【问题描述】:

我使用 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 框值。

【问题讨论】:

    标签: python html post get


    【解决方案1】:

    一方面,您需要在表单的&lt;input&gt; 字段中添加名称属性。如果没有这些,将不会在 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>
    

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

    在 127.0.0.1 端口 8008 上提供 HTTP ... 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。此外,根据您的要求,结合cgi 模块查看CGIHTTPServer,甚至是bottleflask 甚至django 等第3 方Web 框架。这些框架使您可以更轻松地实现您想要的那种服务器。

    【讨论】:

    • 请注意,使用带有 GET 的登录表单是危险的,因为用户和密码将被记录在浏览器的历史记录中。
    • 谢谢@mhawke。正如您在控制台上所说,两者都是显示,但我希望本地 python 变量中的两个值用户名 snd 密码,因为我想存储在数据库中,那么我该怎么办
    • @Virbhadrasinh - 请参阅更新的答案以了解如何捕获输入字段值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2015-06-28
    • 2016-12-27
    • 2015-04-29
    • 2021-08-13
    • 2015-10-02
    相关资源
    最近更新 更多