-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

問題は、フォーム タグがないことです。そのため、ブラウザはデフォルトでサーバーに何も送信しません。

ブラウザにフォームをサーバーに送信させる方法は、入力 (テキストと送信の両方)を、応答を受け入れる URL を指す属性を持つ<form>タグでラップするだけです。action

したがって、コードは次のようになります (ラッピング コードは省きます)。

<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 に答える