将输入从html传递给python并返回

时间:2017-04-28 10:06:19

标签: python html python-3.x flask cgi

我需要为作业创建一个网页,它不必上传到网络,我只是使用本地.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 个答案:

答案 0 :(得分:3)

您是否有像这样运行的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示例。

from yattag import Doc

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

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

print(doc.getvalue())

<强>更新

如果您没有本地Web服务器设置,另一种方法是使用Flask作为您的Web服务器。 您需要构建项目,如:

    /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 __name__ == '__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 希望这有助于您走上正轨,祝您好运。

答案 1 :(得分:0)

在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>')`

答案 2 :(得分:0)

我对HTML和Python还是陌生的,但据我所知,不必缩进HTML。这意味着您可以在一个python打印中传递许多HTML代码。 实际上,您可以在一行中打印整个HTML代码。

我正在使用for循环将列表打印到html表中。 HTML代码不是很好,但是可以正常工作。 我想你像我一样只需要它们是临时的。

干杯!

答案 3 :(得分:0)

首先检查浏览器网址,如下所示: 文件:/// C:/xampp/htdocs/cgi_python/form.html

这意味着您的代码正确无误  但输出显示为python脚本代码 因为“代码在控制台中无法在浏览器中工作”

即是指  您可以直接在htdocs文件夹中打开文件 然后单击filename.html并执行,然后以文本格式输出 用于打开浏览器

解决方案是

  1. 在url中打开浏览器类型
  2. 本地主机/文件路径 例如。 http://localhost/cgi_python/form.html 然后得到答案