-1

我有以下html代码

<html>

<head>
<script type="text/javascript">
function processdata()
{
var un=document.getElementById('uname1');
alert("hI " + un.value);
}
</script>
</head>

<body>
Username: <input type="text" name="uname" value=" " id="uname1">
<input type="button" name="sub" onclick="processdata();" value="Submit">

</body>

</html>

这个 html 页面在 python/flask 中被调用,如下所示-

@app.route('/')
def getusername():
  return render_template('appHTML.html')

现在我想在 python 变量中获取字段“uname”中的值。

请告诉我该怎么做。我没有使用 CGI。我用烧瓶代替。

4

2 回答 2

1

您的问题是您没有表单标签 - 因此默认情况下浏览器不会将任何内容提交回您的服务器。

让浏览器将表单提交到您的服务器的方法是将您的输入(文本和提交)包装在一个<form>标签中,该标签具有action指向您将接受响应的 URL 的属性。

所以你的代码看起来像这样(省略了包装代码):

<form action="/process-form" method="post">
Username: <input type="text" name="uname" value=" " id="uname1">
<input type="button" name="sub" value="Submit">
</form>

如果您愿意,您可以使用method="get"而不是method="post",但 POST 通常是您正在寻找的。然后,您将设置您的应用程序以在您的端点处理发布请求:

from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("your_form_template.html")

@app.route("/process-form", methods=["POST"])
def process():
    username = request.form["uname"]
    return "Hello {}!".format(username)

如果您希望能够将值异步发送回服务器(因此整个页面不会重新加载),那么您可以使用 Ajax 仅将值提交给服务器。您的页面将看起来相同 - 只需使用 JavaScript 阻止表单提交,然后使用 POST 方法将 XHR 请求提交回服务器。(如果这一切都非常令人困惑,您可能需要考虑选择一个库来帮助您抽象出浏览器之间的一些差异 - jQuery 现在很流行......如果有点过度推荐的话。)

于 2012-06-23T03:19:58.077 回答
-2

这里有一些解析器的例子

from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Start tag:", tag
        for attr in attrs:
            print "     attr:", attr
    def handle_endtag(self, tag):
        print "End tag  :", tag
    def handle_data(self, data):
        print "Data     :", data
    def handle_comment(self, data):
        print "Comment  :", data
    def handle_entityref(self, name):
        c = unichr(name2codepoint[name])
        print "Named ent:", c
    def handle_charref(self, name):
        if name.startswith('x'):
            c = unichr(int(name[1:], 16))
        else:
            c = unichr(int(name))
        print "Num ent  :", c
    def handle_decl(self, data):
        print "Decl     :", data

parser = MyHTMLParser()


parser.feed('<h1>Python</h1>')
Start tag: h1
Data     : Python
End tag  : h1
于 2012-06-22T11:49:25.560 回答