web-dev-qa-db-fra.com

Passer l'entrée de html à python et retour

J'ai besoin de créer une page Web pour une mission, elle n'a pas besoin d'être téléchargée sur le Web, j'utilise simplement un fichier .html local. J'ai fait quelques lectures et j'ai trouvé le code HTML et python suivant:

<!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>")

Cependant, cela donne simplement les impressions sous forme de texte et non pas en tant que fichier html approprié avec la ligne 1 que je veux.

4
RnRoger

Avez-vous un serveur Web comme la configuration Apache sur lequel cela fonctionne? Si vous ne le faites pas, je ne suis pas sûr que cela fonctionnera, vous voudrez peut-être jeter un œil à Mamp Pour lui permettre d'exécuter votre script python vous aurez également besoin de modifier le httpd.conf fichier

De:

<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>

Alternativement

Si vous voulez simplement créer un fichier HTML réel sans configurer de serveur, une façon très simple mais grossière de le faire serait de tout simplement écrire dans un fichier HTML que vous créez comme:

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()

Ce qui va créer un document HTML appelé yourfile.html dans le même répertoire que votre projet python.

Je ne recommande pas de faire cela, mais je me rends compte que comme c'est une tâche, vous n'avez peut-être pas le choix d'utiliser des bibliothèques. Dans le cas où vous, une manière plus élégante serait d'utiliser quelque chose comme yattag qui le rendra beaucoup plus facile à maintenir.

Pour copier l'exemple Hello World de leur site Web.

from yattag import Doc

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

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

print(doc.getvalue())

Mise à jour:

Une autre alternative si vous n'avez pas de configuration de serveur Web local est d'utiliser Flask comme serveur Web. Vous devrez structurer votre projet comme:

    /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 (Si vous voulez styliser votre formulaire?)

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

Faites un exemple de base basé sur votre question ici J'espère que cela vous aidera à vous mettre sur la bonne voie, bonne chance.

3
Kai

vérifiez d'abord l'URL du navigateur comme ça ressemble à un fichier: /// C: /xampp/htdocs/cgi_python/form.html

cela signifie que votre code est correct et sans erreur, mais la sortie s'affiche sous la forme d'un code de script python parce que "le code fonctionne dans la console et non dans le navigateur"

c'est-à-dire que vous ouvrez directement un fichier dans le dossier htdocs et cliquez sur filename.html et exécutez puis sortez au format texte Pour ouvrir un navigateur

La solution est

  1. ouvrir le type de navigateur dans l'URL
  2. localhost/filepath par exemple. http: //localhost/cgi_python/form.html puis obtenez la réponse
0
Lalit Thaware

Modifiez ce qui suit dans le fichier 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>

sinon exécutez le formulaire html en utilisant également python: (pas besoin de changer au-dessus du fichier 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

Je suis nouveau à la fois en HTML et en Python, mais pour autant que je sache, le HTML ne doit pas être mis en retrait. Cela signifie que vous pouvez passer beaucoup de code HTML en une seule python impression. Vous pouvez réellement imprimer un code HTML entier sur une seule ligne.

J'imprime des listes dans des tables html avec des boucles for. Le code HTML n'est pas sympa, mais ça marche. je suppose que vous avez seulement besoin qu'ils soient temporaires, comme moi.

À votre santé!

0
Tamás Novák