1

Тема: Відображення HTML файлу на сайті та обробка даних на сервері WSGI

Добрий день. Потрібно вирішити задачу на python використовуючи WSGI сервер. З CGI я зміг розібратись, але з WSGI взагалі не можуть зрозуміти як навіть банально на сервері WSGI висвітлити свій html файл для подальшої обробки форми
У мене є файл HTML:
index.html

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>...</title>
</head>
<body>
        <form action="/cgi-bin/form.py" method = "POST">
        <p> Введите число "x"<input type="text" name="TEXT_1"></p>
        <p> Введите число "y"<input type="text" name="TEXT_2"></p>
        <p> Введите число "r"<input type="text" name="TEXT_3"></p>
        <p> Введите число "z"<input type="text" name="TEXT_4"></p>
        <p><input name="dzen" type="radio" value="rt"> Равнобедренный</p>
        <p><input name="dzen" type="radio" value="pt"> Прямоугольный треугольник</p>
        <p><input name="dzen" type="radio" value="p"> Прямоугольник</p>
        <p><input name="dzen" type="radio" value="k"> Кольцо</p>
        <p><input name="dzen" type="radio" value="e"> Элипс</p>
        <input type="submit">
        </form>
</body>
</html>

form.py (обробка форми)

#!/usr/bin/env python
import sys
import cgi
import random
import requests
import math
 
form = cgi.FieldStorage()
text1 = form.getfirst("TEXT_1", "не задано")
text2 = form.getfirst("TEXT_2", "не задано")
text3 = form.getfirst("TEXT_3", "не задано")
text4 = form.getfirst("TEXT_4", "не задано")
radio = form.getfirst("dzen", "не выбрано")
print("Content-type: text/html\n")
print("""<!DOCTYPE HTML>
        <html>
        <head>
            <meta charset="utf-8">
            <title>Kateryna Bugaychuk</title>
        </head>
        <body>""")
 
print("<h1>Уравнение площадей</h1>")
print("<p>Значение 'x': {}</p>".format(text1))
print("<p>Значение 'y': {}</p>".format(text2))
print("<p>Значение 'r': {}</p>".format(text3))
print("<p>Значение 'z': {}</p>".format(text4))
 
print("""</body>
        </html>""")
if radio == 'rt':
    print('Равнобедренный треугольник - ')
    x = int(text1)
    y = int(text2)
    s = 1/2 * x * y
    float(s)
    print(s)
if radio == 'pt':
    print('Прямоугольный треугольник - ')
    x = int(text1)
    y = int(text2)
    r = int(text3)
    z = int(text4)
    p = (x + y + r) / 2
    s = math.sqrt(p * (p - x) * (p - y) * (p - r))
    float(s)
    print(s)
if radio == 'p':
    print('Прямоугольник - ')
    x = int(text1)
    y = int(text2)
    s = x * y
    float(s)
    print(s)
if radio == 'k':
    print('Кольцо - ')
    x = int(text1)
    y = int(text2)
    s = math.pi * (x * x - y * y)
    float(s)
    print(s)
if radio == 'e':
    print('Элипс - ')
    x = int(text1)
    y = int(text2)
    s = math.pi * x * y
    float(s)
    print(s)

osnova.py (і наче як сам сервер WSGI)

from wsgiref.simple_server import make_server
httpd = make_server('localhost', 8051, application)
httpd.serve_forever()

І ось саме питання з osnova.py і form.py. Як по перше при вводі localhost:8051 зробити так, щоб показувало сам index.html, а потім обробляло form.py? На CGI роняв, а на WSGI не можу

2

Re: Відображення HTML файлу на сайті та обробка даних на сервері WSGI

Вам треба визначити функцію чи клас application. Пара простих прикладів тут: https://www.python.org/dev/peps/pep-333 … ework-side
Ну і повертати доведеться значення, а не виводити print-ом.

Подякували: leofun011

3

Re: Відображення HTML файлу на сайті та обробка даних на сервері WSGI

прошу видалити тему

4

Re: Відображення HTML файлу на сайті та обробка даних на сервері WSGI

вибачаюсь, перепутав іншу тему, яку створив як нову, цю не потрібно видаляти

5

Re: Відображення HTML файлу на сайті та обробка даних на сервері WSGI

я не розумію як саме мені отримати значення різних input і обробити їх, навіть якщо створивши def application

6

Re: Відображення HTML файлу на сайті та обробка даних на сервері WSGI

Приблизно так:

import cgi #для FieldStorage

def application(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers) #починаємо обробку
    if environ['REQUEST_METHOD'] == 'POST':
        form = cgi.FieldStorage( fp=environ['wsgi.input'] ) #читаємо дані не зі стандартного потоку, а з параметру environ
        #тут ваша обробка форми
        #тільки повернути треба iterable, наприклад, масив
    else:
        #а тут - що повертаємо, якщо це не відправка форми. Тобто статична сторінка.