Как обработать запрос вызванный из html файла при помощи Flask
Код "сервера", если конечно можно так выразиться...
from flask import Flask
app = Flask(__name__)
# Подключаю вёрстку, я не знаю других методов поэтому пользуюсь этим
html = ""
with open('verstka.html', 'r') as f:
html = f.read()
@app.route('/', methods=['GET'])
def index(text1, text2):
# Хочу дозаписать в файл данные полученные из формы
with open('somefile', 'a') as f:
string = text1 + ': ' + text2
f.write(string)
return html
if __name__ == "__main__":
app.run()
содержимое самого файла с вёрсткой
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<form action="" method="GET">
<input type="text" name="text1">
<input type="text" name="text2">
<button type="submit">Нажми на меня</button>
</form>
</body>
</html>
Когда запускаю в командной строке всё работает нормально, но стоит мне зайти на сам сайт, то получаю вот это:
[2020-12-13 14:00:08,590] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "D:\Python\Python391\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "D:\Python\Python391\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "D:\Python\Python391\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "D:\Python\Python391\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "D:\Python\Python391\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "D:\Python\Python391\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
TypeError: index() missing 2 required positional arguments: 'text1' and 'text2'
127.0.0.1 - - [13/Dec/2020 14:00:10] "GET / HTTP/1.1" 500 -
Я так понял что ошибка в том что он не видит аргументы text1 и text2, вообще без понятия как это по другому сделать, помогите пожалуйста, буквально час назад Flask сел изучать...
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
q1218064.py
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return render_template('index.html'), 200
@app.route('/handle_data', methods=['POST'])
def handle_data():
print('form text1', request.form['text1'])
print('form text2', request.form['text2'])
with open('blabla.txt', 'a') as f:
string = request.form['text1'] + ': ' + request.form['text2']
f.write(string)
f.close()
return 'ok', 200
if __name__ == "__main__":
app.run(host='10.10.10.2', port=5000, debug=True)
Добавьте обработчик для отправленных данных, которые находятся в request.form под тем же ключом, что и ввод name.
templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<form action="{{ url_for('handle_data') }}" method="POST" enctype="multipart/form-data">
<input type="text" name="text1">
<input type="text" name="text2">
<button type="submit">Нажми на меня</button>
</form>
</body>
</html>
action: URL-адрес, на который отправляются данные формы при отправке. Создайте его с помощьюurl_for. Его можно не указывать, если тот же URL обрабатывает форму и обрабатывает данныеmethod="post": Отправляет данные как данные формы с помощью метода POST. Если не указан или явно установлен get, данные передаются в строке запроса (request.args) с помощью метода GETenctype="multipart/form-data": Когда форма содержит входные данные файла, она должна иметь эту кодировку, иначе файлы не будут выгружены и Flask их не увидит- для
inputнужен параметрname