Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 2, 2014 17:21:19

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Простая POST форма

Не мучайтесь, используйте фреймворки.

Вот на скорую руку:

from bottle import route, run, template, post, request
@route('/')
def index():
	return template('''
		<form name="form1" method="post" action="/write"> 
		Enter password: <input type="text" name="pass"><br>
		<input type="submit" name="Submit" value="Sign Up"> </form>
		''')
@post('/write')
def write():
	file_pass = open('password.txt', 'a')
	file_pass.write(request.forms.get('pass') + '\n')
	file_pass.close()
	return 'ok'
run(host='localhost', port=8080)

Отредактировано alexsis (Авг. 2, 2014 17:27:22)

Офлайн

#2 Авг. 3, 2014 20:14:52

Demontager
Зарегистрирован: 2014-05-16
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Простая POST форма

alexsis, спасибо за пример, записал себе в коллекцию. Но мне не подходит в данном случае, так как цель обойтись только встроенными методами. А ваш скрипт отлично отрабатывает, я проверил.
py.user.next, все заработало как надо когда я разделил сервер и обработчик на отдельные файлы. С разрешениями проблем нет, сервер от рута пускается на 80 порту и POST данные пишутся в файл.
Есть еще один нюанс по поводу сервера, мне нужно чтобы при запросе любого не существующего файла (404 ошибка), перекидывало на index.html, то есть там где форма. Как сделать ?

Отредактировано Demontager (Авг. 3, 2014 20:35:36)

Офлайн

#3 Авг. 9, 2014 22:09:20

Demontager
Зарегистрирован: 2014-05-16
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Простая POST форма

Попробовал несколько вариантов редиректов, ничего не получилось. К примеру такой код, который редиректит на index.html, если не / запрашивается.

#!/usr/bin/env python3
import http.server
from http.server import CGIHTTPRequestHandler
port = 80
addr = '192.168.150.1'
addrport = (addr, port)
class myHandler(CGIHTTPRequestHandler):
    def do_GET(self):
        if not self.path == '/':
            self.send_response(302)
            self.send_header('Location','/index.html')
            self.end_headers()
try:
    serv = http.server.HTTPServer(
        addrport,
        myHandler
    )
    serv.serve_forever()
except KeyboardInterrupt:
    print ('Shutting down the web server')
    serv.socket.close()
Браузер пишет “Firefox has detected that the server is redirecting the request for this address in a way that will never complete.”

Отредактировано Demontager (Авг. 9, 2014 22:11:09)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version