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