server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf ·...

30
Server Side Scripting 1 a simple Web Calculator the web interface html form and Python script 2 A Login Form the web interface html form and Python script 3 Passing Text and Code textarea element running given Python code MCS 275 Lecture 22 Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools (MCS 275) server side scripting L-22 1 March 2017 1 / 30

Transcript of server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf ·...

Page 1: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

MCS 275 Lecture 22

Programming Tools and File Management

Jan Verschelde, 1 March 2017

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 1 / 30

Page 2: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server-Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 2 / 30

Page 3: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

The Web Interfacefor a simple calculator

1 two input elements for two operands

2 select element for the operator

3 checkbox for converting operands to float

4 submit and reset buttons

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 3 / 30

Page 4: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Result of the Calculationoutput of Python script

Python script writes result inside an h1 header.

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 4 / 30

Page 5: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server-Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 5 / 30

Page 6: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

html form for calculator

<html>

<head>

<title> MCS 275 : a calculator </title>

</head>

<body>

<form method="post"

action="http://localhost/cgi-bin/calculate.py">

<table width = "100%" border = "3">

<tr>

<th> 1st operand </th>

<th> operator </th>

<th> 2nd operand </th>

</tr>

...

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 6 / 30

Page 7: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

html form continued

the table continued:

<tr>

<td><input type = "text"

name = "operand1" size="45%"></td>

<td><select name = "operator">

<option value = "+">+

<option value = "-">-

<option value = "*">*<option value = "/">/

</td>

<td><input type = "text"

name = "operand2" size="45%"></td>

</table>

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 7 / 30

Page 8: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

a Checkbox – html form continued

<p>

&nbsp; &nbsp;

<input name = "convert" type = checkbox

value = True>

convert operands to floats

&nbsp; &nbsp; <input type="submit"

value = "submit calculation">

&nbsp; &nbsp; <input type="reset"

value = "reset the form">

</p>

</form>

</body>

</html>

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 8 / 30

Page 9: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Python script calculate.py

#!/usr/bin/python

import cgi

FORM = cgi.FieldStorage()

print("Content-Type: text/html\n")

ERROR = False

try:

XVAL = FORM[’operand1’].value

except KeyError:

print("please enter first operand")

ERROR = True

try:

YVAL = FORM[’operand2’].value

except KeyError:

print("please enter second operand")

ERROR = True

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 9 / 30

Page 10: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

the script continued

if not ERROR:

try:

CONV = eval(FORM[’convert’].value)

except:

CONV = False

OPER = FORM[’operator’].value

if not CONV:

EXPR = XVAL + ’ ’ + OPER + ’ ’ + YVAL

else:

EXPR = str(float(XVAL)) + ’ ’ + OPER \

+ ’ ’ + str(float(YVAL))

RESULT = EXPR + ’ = ’ + str(eval(EXPR))

print("<html><body>")

print("<h1>%s</h1>" % RESULT)

print("</body></html>")

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 10 / 30

Page 11: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server-Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 11 / 30

Page 12: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

The Web Interface

1 two input elements for name and password2 radio button for new or returning user

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 12 / 30

Page 13: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Result of the Submitaction by Python script login_form.py

Python script checks whether new or returning user

and confirms the name.

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 13 / 30

Page 14: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server-Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 14 / 30

Page 15: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

html form in the file login_form.html

<html>

<head>

<title> MCS 275 : login form </title>

</head>

<body>

<h1> please register </h1>

<form

action="http://localhost/cgi-bin/login_form.py">

<p>

enter your name:

<input type="text" name="login" size ="20">

</p>

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 15 / 30

Page 16: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

a radio button – html continued

<input type="radio" name="new"

value = True checked> new user

<input type="radio" name="new"

value = False> returning user

<p> enter your password:

<input type="password"

name="password" size ="16">

</p>

<p> <input type="submit">

<input type="reset">

</p>

</body>

</html>

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 16 / 30

Page 17: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

the Python script in the file login_form.py

#!/usr/bin/python

"""

Gets login name and password.

"""

from ast import literal_eval

import cgi

FORM = cgi.FieldStorage()

print("Content-Type: text/plain\n")

ERROR = False

try:

NAME = FORM[’login’].value

except KeyError:

print("please enter your name")

ERROR = True

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 17 / 30

Page 18: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

script continued

try:

WORD = FORM[’password’].value

except KeyError:

print("please enter a password")

ERROR = True

if not ERROR:

if literal_eval(FORM[’new’].value):

print(’welcome new user ’ + NAME)

else:

print(’welcome back ’ + NAME)

For new user, check if name does not already exist.

If okay, add to name and password file.

For returning user, check if name already exists on file.

If okay, check if password matches.

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 18 / 30

Page 19: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server-Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 19 / 30

Page 20: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

The Web Interfacefor submitting a text paragraph

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 20 / 30

Page 21: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Result of the Submitoutput of Python script

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 21 / 30

Page 22: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

the element textarea in give_words.html

<html>

<head>

<title> MCS 275 : enter some text </title>

</head>

<body>

<h1> write a paragraph </h1>

<form method="post"

action="http://localhost/cgi-bin/give_words.py">

<p>

<textarea name = "sometext"

rows = 4 cols = 20></textarea>

</p>

<p>

<input type="submit"> <input type="reset">

</p>

</form>

</body>

</html>

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 22 / 30

Page 23: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

getting the textarea in give_words.py

#!/usr/bin/python

"""

Illustration of processing a textarea.

"""

import cgi

FORM = cgi.FieldStorage()

print("Content-Type: text/plain\n")

try:

TEXT = FORM[’sometext’].value

print("your paragraph is \n" + TEXT)

except KeyError:

print("please enter some words")

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 23 / 30

Page 24: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Server-Side Scripting

1 a simple Web Calculator

the web interface

html form and Python script

2 A Login Form

the web interface

html form and Python script

3 Passing Text and Code

textarea element

running given Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 24 / 30

Page 25: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

The Web Interfacefor submitting Python code

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 25 / 30

Page 26: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Result of the Submitoutput of Python script

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 26 / 30

Page 27: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

accepting Python code in run_python.html

<html>

<head>

<title> MCS 275 : run python </title>

</head>

<body>

<h1> run python </h1>

<form method="post"

action="http://localhost/cgi-bin/run_python.py">

give some Python code below:

<p>

<textarea name = "code"

rows = 4 cols = 20></textarea>

</p>

<p> <input type="submit"> <input type="reset">

</p>

</form> </body> </html>

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 27 / 30

Page 28: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

getting the Python code in run_python.py

#!/usr/bin/python

"""

Takes the textarea from run_python.html

and runs the code in that element.

"""

import cgi

from os import system

FORM = cgi.FieldStorage()

print("Content-Type: text/plain\n")

ERROR = False

try:

CODE = FORM[’code’].value

print("your code is \n\n" + CODE)

except KeyError:

print("please enter code")

ERROR = True

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 28 / 30

Page 29: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

running the Python code – script continued

if not ERROR:

FILE = open(’/tmp/code.py’, ’w’)

FILE.write(CODE)

FILE.close()

print("\n... running the code ...\n")

CMD = ’python /tmp/code.py > /tmp/out’

RETVAL = system(CMD)

if RETVAL != 0:

print("the code has an error")

else:

FILE = open(’/tmp/out’, ’r’)

OUTP = FILE.readlines()

print("the output is \n\n", OUTP[0])

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 29 / 30

Page 30: server side scripting - homepages.math.uic.eduhomepages.math.uic.edu/~jan/mcs275/servscript.pdf · Programming Tools and File Management Jan Verschelde, 1 March 2017 Programming Tools

Summary and Exercises

Because of security issues, keep working offline.

1 Modify the script give_words.py so it writes the words typed in

the textarea in reverse order.

2 Replace the radio buttons in login_form.html by one

CheckBox "new user".

3 Add to login_form.html a select element offering the options:

instructor, student, and staff.

4 Extend the script login_form.py so it maintains a password

file. For every user there is one line: two strings (name and

password) separated by a colon.

Programming Tools (MCS 275) server side scripting L-22 1 March 2017 30 / 30