Python. Обработка HTML-форм

CGI (Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Интерфейс разработан так, чтобы можно было использовать язык программирования, который может работать со стандартными устройствами ввода-вывода. Программы, как правило, помещают в каталог cgi (или cgi-bin) сервера, однако при помощи файла настроек httpd.conf или с помощью файла .htaccess можно изменить этот каталог.

1. Простейший веб-сервер

Создадим файл server1.php, папку cgi-bin, в которую поместим файл index.py. Приверду содержимое этих файлов

server1.php

from http.server import HTTPServer, CGIHTTPRequestHandler


server_address = ("", 80)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()

index.py

print("Content-type: text/html\n\n")
print()
print("<b>Привет, мир!</b>")

Замечание. Здесь 80 — номер порта,  для HTTP чаще всего еще используются порты 8000 и 8080.

Далее не запускаем программу. Не останавливая ее зарускаем браузер, в адресной строке которого набираем localhost (или 127.0.0.1). Если все в порядке, то будет выведен список файлов вашей папки.

Для запуска файла index.py необходимо в адресной строке набрать localhost:80/cgi-bin/index.py

2. Фреймворк Flask

В нвстоящее время наиболее популярными фреймворками для создания веб-приложений на Python являются Django и Flask.  В данной статье рассмотрим работу с Flask как с болле простой. Первоначально надо его установить привычной командой

pip install flask

Теперь создадим файл server2.py

from flask import Flask

app = Flask(__name__)
#папка cgi-bin идет в комплекте с этим файлом

@app.route('/')
def index():
    return "Привет, мир!"

@app.route('/index')
def index1():
    return "Привет, студент!"

if __name__ == '__main__':
    app.run(port=8080, host='127.0.0.1')

Теперь если в браузере наберете http://localhost:8080/index, то получите сообщение «Привет, студент». Если набрать http://localhost:8080 то получим «Привет, мир». Для этих двух адресов можно задать одну функцию следующим образом:

@app.route('/')
@app.route('/index')
def index():
    return "Привет, мир!"

3. Передача параметров в адресной строке

Напишем программу, которая имя для приветствия берет из адресной строки. Для этого необходимо добавить код

@app.route('/greet/<username>')
def greet(username):
    return '''<!doctype html>
                <html>
                  <head>
                    <title>Привет, {}</title>
                  </head>
                  <body>
                    <h1>Привет, {}!</h1>
                  </body>
                </html>'''.format(username, username)

Замечание. Если после greet не добавить значение, то выскочит ошибка.

4. Обработка форм

Приведем пример, запрашивающий адрес электронной почты и пароль, а затем выводящий введенные данные. Обращаю внимание на изменение первой строки.

from flask import Flask, request

app = Flask(__name__)


@app.route('/form', methods=['POST', 'GET'])
def form():
    if request.method == 'GET':
        return '''<!doctype html>
                        <html>
                          <head>
                             <title>Пример формы</title>
                          </head>
                          <body>
                            <h1>Форма для регистрации</h1>
                            <div>
                                <form method="post">
                                    <input type="email" placeholder="Введите адрес почты" name="email"><br/>
                                    <input type="password" placeholder="Введите пароль" name="password"><br/>
                                    <button type="submit" >Записаться</button>
                                </form>
                            </div>
                          </body>
                        </html>'''
    elif request.method == 'POST':
        print(request.form['email'])
        print(request.form['password'])
        return "Форма отправлена"
    
if __name__ == '__main__':
    app.run(port=8080, host='127.0.0.1')

В данном примере организван просто вывод. Ьакже можно подключить в этом месте базу данных и все записать в нее.

Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • StumbleUpon
  • Technorati
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.