Почему приложение Flask не вводит метод GET, а вводит методы POST? - PullRequest
0 голосов
/ 30 апреля 2019

Я прошу прощения, это должно быть дубликатом, но я не нашел ничего, что помогло, так что я думаю, что это проблема импорта или синтаксиса? Кроме того, я нахожусь на уровнях ускоренного курса Python и HTML здесь, и это финальная неделя, так что терпите меня.

Я работаю над домашним заданием, в котором указывается, что HTML-страница должна использовать форму с методом GET и отправлять свои данные обратно в исходное местоположение "assignment10.html". Приложение никогда не входит в функцию, которая использует форму, отправляемую с помощью GET, просто перезагружает страницу после отправки (URL имеет строку запроса). Приложение войдет в функцию, если я использую POST в качестве метода в параметре формы и функции и использую request.form.get (). Если это вообще имеет значение, я использую виртуальную машину с 64-битной Ubuntu

Я искал вокруг, но большинство ответов касаются json или ajax или какого-либо другого программного обеспечения, но поскольку это задание, я ограничен файлом python и папкой с шаблонами для flask.

Я немного поэкспериментировал с объектом запроса, используя request.form.get () и request.args.get (), но, насколько я могу судить, это не является препятствием. Я застрял в этой точке, и мне нужно знать, в чем моя ошибка.

# assignment10.py
from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/assignment10.html')
def start():
    return render_template('Start.html')

@app.route('/assignment10.html', methods=['GET']) #Enters if 'POST' instead
def next():
    return "Entered next()"  # just to test function is entered
    fname = request.args.get('fname') #change to .form.get()
    lname = request.args.get('lname') # "                 "
    # render next template
<!-- Start.html -->
<!DOCTYPE html>
<html>
<head>
<title> Assignment 10 </title>
<script>
    function validate(){
        <!-- if fname && lname are not blank return true else false -->
     }
</script>
</head>

<body>
<!-- switch to method="POST" works -->
<form action = "assignment10.html" method="GET" onsubmit="return validate()">
    Your first name:
    <input type="text" name="fname" id="fname" value="First"><br>
    Your last name:
    <input type="text" name="lname" id="lname" value="Last"><br>

    <input type="submit" value="Submit">
</form>
<div id="msg"></div>
</body>
</html>

1 Ответ

3 голосов
/ 30 апреля 2019
@app.route('/assignment10.html')
def start():
    fname = request.args.get('fname') #change to .form.get()
    lname = request.args.get('lname') # "                 "
    print(fname, lname)
    return render_template('./Start.html')

Вам нужен только один маршрут для вашего требования.
Первый запрос fname и lname равен None

почему «GET» не работает?:
@app.route('/assignment10.html', methods=['GET'])
@app.route('/assignment10.html')

Два маршрута равны.
Из-за @app.route методов по умолчанию ['GET']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...