Ошибка 405 Метод не разрешен, перенаправление (url_for ('index'))

В настоящее время я использую pythonanywhere для школьного проекта. Ниже приведен фрагмент кода, с которым у меня возникли проблемы.

#When at www.example.com/ load "log_in.html" file
@app.route("/", methods=["GET"])
def index():
    if request.method == "GET":
        return render_template("log_in.html")

#When at www.example.com/create_account/
@app.route("/create_account", methods=["GET", "POST"])
def create_account():
   if request.method == "GET":
        return render_template("create_account.html", username = username, password = password)

return redirect(url_for('index'))

Я хочу, чтобы пользователь нажал кнопку и отправил свои данные для создания учетной записи. После того, как данные записаны, они перенаправляются обратно на страницу входа в систему, которая находится в разделе «индекс».

После тестирования кода все работало до тех пор, пока часть перенаправления не дала мне ошибку 405, метод не разрешен.

Сайт находится по адресу http://fishypower.pythonanywhere.com/create_account. Нажав кнопку "Создать учетную запись", кнопка выдаст ошибку 405

Ниже приведен код для http://fishypower.pythonanywhere.com/create_account.

<html>
    <head>
        <title>ElderMinder: Create Account</title>
    </head>
    <body>
        <div>
            <form action="." method="POST">
                <center><textarea name="username" placeholder="Enter your username"></textarea></center>
                <div></div>
                <center><textarea name="password" placeholder="Enter your password"></textarea></center>
                <div></div>
                <center><input type="submit" value="Create Account"></center>
            </form>
        </div>
    </body>
</html>

person FishyPower    schedule 15.02.2018    source источник


Ответы (1)


Вы используете <form action="." method="POST">. Почему вы решили использовать точку в качестве цели действия?

Действие должно быть либо пустым, либо просто не указывать его, чтобы отправить его по текущему URL-адресу, или <form action="{{ url_for('create_account') }}" method="post">, чтобы быть явным.

Итак, короче говоря, вы получаете сообщение об ошибке, потому что отправка вашей формы будет /, а это представление принимает только запросы GET.

person Doobeh    schedule 15.02.2018
comment
Вышеупомянутое совершенно правильно, но просто немного подробнее: если вы находитесь на странице fishypower.pythonanywhere. com/create_account, то action="." отправит запрос на fishypower.pythonanywhere.com. Но если вы находитесь на странице fishypower.pythonanywhere.com/create_account (обратите внимание на косую черту в конце) затем action="." отправит на fishypower.pythonanywhere.com/create_account файл . означает то же, что и в пути к файлу Unix - текущий каталог. - person Giles Thomas; 16.02.2018
comment
Спасибо вам за помощь. Поскольку я только начал заниматься этим недавно, мой код все еще в значительной степени редактирует сэмплы в соответствии со своими потребностями. Я намерен отправить данные в базу данных для хранения. Должен ли я что-то делать с кодом для этого? - person FishyPower; 16.02.2018