python - 连接python服务器和html

标签 python html post get

我使用 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 -

Edit (how to handle request)

To access the individual fields present in the query string you can override the SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET() method and parse the query like this:

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。另外,看看CGIHTTPServercgi 结合使用模块,甚至是第三方 Web 框架,例如 bottle , flask ,甚至django根据您的要求。这些框架使实现您想要的那种服务器变得更加容易。

关于python - 连接python服务器和html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839157/

相关文章:

php - jQuery.post 没有收到来自 php 脚本的错误

python - 类型错误 : only integer scalar arrays can be converted to a scalar index with 1D numpy indices array

python - 将 pytest 工作目录更改为测试用例目录

python - 从 Django 模型返回多个字段

php - 单击任何一个链接时要禁用的一组链接

post - 如何通过 SSL 将文件直接上传到 S3?

python - XGBoost:在训练和测试中分割数据

javascript - 在 JavaScript 中格式化动态表格

javascript - reactjs组件中if(x)和if(x==true)的区别

c# - .net core 2.1 "POST"一个使用 Postman 的 IFormFile - 应用程序在未读取整个请求正文的情况下完成