web-dev-qa-db-ja.com

入力をhtmlからpythonに渡し、戻す

課題のウェブページを作成する必要があります。ウェブにアップロードする必要はありません。ローカルの.htmlファイルを使用しているだけです。私はいくつか読んで、次のhtmlとpythonを思いつきました:

<!DOCTYPE html>
<html>
    <head>
        <title>
            CV - Rogier
        </title>
    </head
    <body>
        <h3>
            Study
        </h3>
        <p>
            At my study we learn Python.<br>
            This is a sall example:<br>
            <form action="/cgi-bin/cvpython.py" method="get">
                First Name: <input type="text" name="first_name">  <br />
                Last Name: <input type="text" name="last_name" />
                <input type="submit" value="Submit" />
            </form>
        </p>
    </body>
</html>

Python:

import cgi
import cgitb #found this but isn't used?

form = cgi.FieldStorage()

first_name = form.getvalue('first_name').capitalize()
last_name  = form.getvalue('last_name').capitalize()

print ("Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Hello - Second CGI Program</title>")
print ("</head>")
print ("<body>")
print ("<h2>Your name is {}. {} {}</h2>".format(last_name, first_name, last_name))
print ("</body>")
print ("</html>")

ただし、これは印刷をテキストとして提供するだけで、必要な1行の適切なhtmlファイルとしては提供しません。

4
RnRoger

これが実行されているApacheセットアップのようなWebサーバーはありますか?わからない場合はこれが機能するかどうかわからないので、 Mamp を確認することをお勧めしますpythonスクリプトの実行を許可するにはhttpd.confファイルを編集する必要がある

から:

<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>

に:

  <Directory "/var/www/cgi-bin">
  Options +ExecCGI
  AddHandler cgi-script .cgi .py
  Order allow,vdeny
  Allow from all
  </Directory>

または

サーバーを設定せずに実際のHTMLファイルを作成したいだけの場合は、次のように作成したHTMLファイルにすべてを書き込むだけで、非常に基本的ですが大雑把な方法です。

fo.write("Content-type:text/html\r\n\r\n")
fo.write("<html>")
fo.write("<head>")
fo.write("<title>Hello - Second CGI Program</title>")
fo.write("</head>")
fo.write("<body>")
fo.write("<h2>Your name is {}. {} {}</h2>".format("last_name", "first_name", "last_name"))

fo.write("</body>")
fo.write("</html>")

fo.close()

pythonプロジェクトと同じディレクトリにyourfile.htmlというHTMLドキュメントを作成します。

私はこれを行うことをお勧めしませんが、これは割り当てであるため、ライブラリを使用する選択肢がない可能性があることを理解しています。あなたがよりエレガントな方法は、 yattag のようなものを使用することです。

Hello Worldの例をWebサイトからコピーします。

from yattag import Doc

doc, tag, text = Doc().tagtext()

with tag('h1'):
    text('Hello world!')

print(doc.getvalue())

更新:

ローカルWebサーバーが設定されていない場合の別の方法は、Webサーバーとして Flask を使用することです。次のようにプロジェクトを構成する必要があります。

    /yourapp  
    basic_example.py  
    /static/  
        /test.css
    /templates/  
        /test.html  

Python:

__author__ = 'kai'

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('test.html')

@app.route('/hello', methods=['POST'])
def hello():
    first_name = request.form['first_name']
    last_name = request.form['last_name']
    return 'Hello %s %s have fun learning python <br/> <a href="/">Back Home</a>' % (first_name, last_name)

if __== '__main__':
    app.run(Host = '0.0.0.0', port = 3000)

HTML:

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="static/test.css">
        <title>
            CV - Rogier
        </title>
    </head>
    <body>
        <h3>
            Study
        </h3>
        <p>
            At my study we learn Python.<br>
            This is a sall example:<br>
            <form action="/hello" method="post">
                First Name: <input type="text" name="first_name">  <br />
                Last Name: <input type="text" name="last_name" />
                <input type="submit" name= "form" value="Submit" />
            </form>
        </p>
    </body>
</html>

CSS(フォームにスタイルを設定する場合は?)

p {
    font-family: verdana;
    font-size: 20px;
}
h2 {
    color: navy;
    margin-left: 20px;
    text-align: center;
}

あなたの質問に基づいて基本的な例を作成しました here うまくいけば、これで正しい軌道に乗ることができます。

3
Kai

最初にfile:/// C:/xampp/htdocs/cgi_python/form.htmlのように見えるブラウザのURLを確認します

つまり、コードは正しく、エラーはありませんが、「コードはブラウザではなくコンソールで機能する」ため、出力はpythonスクリプトコードとして表示されます。

つまり、htdocsフォルダー内のファイルを直接開き、filename.htmlをクリックして実行し、テキスト形式で出力します。ブラウザーを開くには

解決策は

  1. uRLでブラウザタイプを開く
  2. localhost/filepath例 http://localhost/cgi_python/form.html 次に、回答を取得します
0
Lalit Thaware

Apache/conf/httpd.confファイルで以下を変更します。

<Directory "C:/xampp/cgi-bin"> 
    AllowOverride All
    Options None
    Require all granted
</Directory>

に:

  <Directory "C:/xampp/cgi-bin">
  Options ExecCGI
  AddHandler cgi-script .cgi .py
  Order allow,deny
  Allow from all
  </Directory>

それ以外の場合は、pythonスクリプトを使用してhtmlフォームを実行します。(http.confファイルの上で変更する必要はありません)

#!C:\Users\Dell\AppData\Local\Programs\Python\Python36\Python.exe

print("Content-type:text/html \r\n\r\n")
print('<html>')
print('<body>')
print('<form action="/cgi-bin/hello_get.py">')
print('First Name:<input type = "text" name = "first_name"><br/>')
print('Last Name:<input type = "text" name = "last_name" />')
print('<input type = "submit" value = "submit">')
print('</form>')
print('</body>')
print('</html>')`
0
Nani Chintha

私はHTMLとPythonの両方に不慣れですが、私の知る限り、HTMLをインデントする必要はありません。これは、1つのpython printで多くのHTMLコードを渡すことができることを意味します。実際には、HTMLコード全体を1行で印刷できます。

Forループを使用してリストをhtmlテーブルに出力しています。 HTMLコードはナイスではありませんが、機能しています。 私がそうであるように、あなたはそれらが一時的である必要があるだけだと思います。

乾杯!

0
Tamás Novák