Flask approute не найден

#python #flask

#python #flask

Вопрос:

я попытался определить @approute в flask, но когда я перехожу к 127.0.0.1: 5000 / home, я получаю, что запрошенный URL 404 не найден.

Мой код выглядит так:

 from flask import Flask, render_template, request
from flaskext.mysql import MySQL

app = Flask(__name__)
app.run()
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'password'
app.config['MYSQL_DATABASE_DB'] = 'dbname'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)


@app.route('/')
def index():
    return "index page"

@app.route('/home')
def home():
    return render_template("home.html")
  

И в flaskproject/templates/home.html у меня есть только:

 <h1>Home</h1>
  

Спасибо за любые предложения

Комментарии:

1. ваше приложение работает на порту 5000? Из того, что вы показываете, похоже, что это должно сработать. Пожалуйста, попробуйте сузить проблему и предоставить больше информации.

2. Возможно несколько вещей (например, вызов app.run() перед `@app.route), но нам нужно будет увидеть больше кода, чтобы помочь вам.

3. Да, мое приложение работает на 5000, я даже вижу трафик в консоли, когда пытаюсь получить доступ к маршруту, и я запускаю приложение flask с помощью команды «flask run —host 0.0.0.0».

4. Переместите строку app.run() в конец файла. Или, что еще лучше, вы можете полностью удалить его, если используете CLI flask.

Ответ №1:

 app.run()
  

Является блокирующим вызовом. Все инструкции, написанные ниже, которые не будут выполнены. Я не знаю, как flask / python обрабатывает методы, определенные ниже. Но наиболее вероятная ошибка заключается в том, что после app.run() того, как был вызван, больше ничего не будет выполнено. Так что попробуйте это так:

 from flask import Flask, render_template, request
from flaskext.mysql import MySQL

app = Flask(__name__)

mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'password'
app.config['MYSQL_DATABASE_DB'] = 'dbname'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)


@app.route('/')
def index:
    return "index page"


@app.route('/home')
def home:
    return render_template("home.html")


if __name__ == '__main__':
    app.run()
  

Комментарии:

1. Одна небольшая проблема. Вам необходимо определить app , прежде чем вы сможете использовать @app.route

2. Да, я допустил ошибку при первой публикации, просто отредактировал ее сразу после. Посмотрите еще раз.