Passing input from html to python and back Passing input from html to python and back flask flask

Passing input from html to python and back


Do you have a web server like apache setup this is running on? If you don't I'm not sure this will work so you may want to have a look at Mamp To allow it to execute your python script you will also need to edit the httpd.conf file

From:

<Directory />Options Indexes FollowSymLinksAllowOverride None</Directory>

To:

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

Alternatively

If you simply want to make an actual HTML file without setting up a server a very basic but crude way of doing this would be to simply write everything to a HTML file you create like:

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

Which will create a HTML document called yourfile.html in the same directory as your python project.

I don't recommend doing this, but I realise since it's an assignment you may not have the choice to use libraries. In case you, are a more elegant way would be to use something like yattag which will make it much more maintainable.

To copy the Hello World example from their website.

from yattag import Docdoc, tag, text = Doc().tagtext()with tag('h1'):    text('Hello world!')print(doc.getvalue())

Update:

Another alternative if you don't have a local web server setup is to use Flask as your web server.You'll need to structure your project like:

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

Python:

__author__ = 'kai'from flask import Flask, render_template, requestapp = 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 (If you want to style your form?)

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

Made a basic example based on your question hereHopefully this helps get you on the right track, good luck.


Change the below in apache/conf/httpd.conf file:

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

To:

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

otherwise run html form also using python script:(No need to change above http.conf file)

#!C:\Users\DELL\AppData\Local\Programs\Python\Python36\Python.exeprint("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>')`


I'm new to both HTML and Python, but as far as I know HTML doesn't have to be indented. This means that you can pass a lot of HTML code in one python print.You can actually print a whole HTML code in one line.

I'm printing lists into html tables with for loops. The HTML code is not nice, but it's working.I guess you only need them to be temporary, as I do.

Cheers!