Не меняется страница при смене request.uri, сервер на python
Имеется код:
class MyTCPHandler(StreamRequestHandler):
MAIN = open('main.html', 'rb')
REGISTRATION = open('reg.html', 'rb')
SIGN_IN = open('sign.html', 'rb')
CONTENT = open('content.html', 'rb')
def handle(self):
request = Request(self.rfile)
response = Response(self.wfile)
to_json = ToJson()
response.add_header('Content-Type', 'text/html')
response.add_header('Connection', 'close')
if request.uri == '/':
response.set_file_body(self.MAIN)
elif request.uri == '/registration':
response.set_file_body(self.REGISTRATION)
to_json.is_file()
if request.method == 'POST':
req_body = parse_qs(request.body.decode())
if self.usr_check(req_body['login'], req_body['password'], 1, to_json.usr_list):
response.body += '<h3>User already exists!</h3>'.encode()
print(response.body)
else:
to_json.usr_list.append(req_body)
to_json.write_file()
request.uri = '/sign-in'
elif request.uri == '/sign-in' :
response.set_file_body(self.SIGN_IN)
to_json.is_file()
if request.method == 'POST':
req_body = parse_qs(request.body.decode())
for row in to_json.usr_list:
if row == req_body:
request.uri = '/content'
return True
else:
response.body += '<p>Wrong login or password!</p>'.encode()
print(request.uri)
response.send()
def usr_check(self, login, password, state, ls):
for row in ls:
match state:
case 1:
if login == row['login']:
return True
case 2:
if login == row['login'] and password == row['password']:
return True
Не могу понять(может я логику основную не так составил), почему после submit'a на странице '/registration', в браузере не меняется страница и урл остается таким же, хотя request.uri меняется, если выводить через консоль? Кто-нибудь может помочь разобраться с этим?
Ответы (1 шт):
Автор решения: Виталий
→ Ссылка
Пропущен метод response.send()внутри блока if request.method.
Вот как должно быть:
to_json.usr_list.append(req_body)
to_json.write_file()
request.uri = '/sign-in'
response.send()
Вот полный код:
class MyTCPHandler(StreamRequestHandler):
MAIN = open('main.html', 'rb')
REGISTRATION = open('reg.html', 'rb')
SIGN_IN = open('sign.html', 'rb')
CONTENT = open('content.html', 'rb')
def handle(self):
request = Request(self.rfile)
response = Response(self.wfile)
to_json = ToJson()
response.add_header('Content-Type', 'text/html')
response.add_header('Connection', 'close')
if request.uri == '/':
response.set_file_body(self.MAIN)
elif request.uri == '/registration':
response.set_file_body(self.REGISTRATION)
to_json.is_file()
if request.method == 'POST':
req_body = parse_qs(request.body.decode())
if self.usr_check(req_body['login'], req_body['password'], 1, to_json.usr_list):
response.body += '<h3>User already exists!</h3>'.encode()
print(response.body)
else:
to_json.usr_list.append(req_body)
to_json.write_file()
request.uri = '/sign-in'
response.send()
elif request.uri == '/sign-in':
response.set_file_body(self.SIGN_IN)
to_json.is_file()
if request.method == 'POST':
req_body = parse_qs(request.body.decode())
for row in to_json.usr_list:
if row == req_body:
request.uri = '/content'
return True
else:
response.body += '<p>Wrong login or password!</p>'.encode()
print(request.uri)
response.send()
def usr_check(self, login, password, state, ls):
for row in ls:
match state:
case 1:
if login == row['login']:
return True
case 2:
if login == row['login'] and password == row['password']:
return True
Проверьте, пожалуйста, должно работать.