Форум сайта python.su
9
Не мучайтесь, используйте фреймворки.
Вот на скорую руку:
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)
Офлайн
0
alexsis, спасибо за пример, записал себе в коллекцию. Но мне не подходит в данном случае, так как цель обойтись только встроенными методами. А ваш скрипт отлично отрабатывает, я проверил.
py.user.next, все заработало как надо когда я разделил сервер и обработчик на отдельные файлы. С разрешениями проблем нет, сервер от рута пускается на 80 порту и POST данные пишутся в файл.
Есть еще один нюанс по поводу сервера, мне нужно чтобы при запросе любого не существующего файла (404 ошибка), перекидывало на index.html, то есть там где форма. Как сделать ?
Отредактировано Demontager (Авг. 3, 2014 20:35:36)
Офлайн
0
Попробовал несколько вариантов редиректов, ничего не получилось. К примеру такой код, который редиректит на 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()
Отредактировано Demontager (Авг. 9, 2014 22:11:09)
Офлайн