Почему маршруты «/войти» и «/зарегистрироваться» не работают?

#flask #routes

Вопрос:

Мое приложение Flask не распознает/не использует два определенных маршрута auth.py , как так получилось?


Структура файла

структура файла

Ошибка Msg:
Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

Маршруты

 http://127.0.0.1:5000/home (WORKS)
http://127.0.0.1:5000/profile (WORKS)
http://127.0.0.1:5000/login (DOES NOT WORK)
http://127.0.0.1:5000/register (DOES NOT WORK)
 

app.py

 from flask import Flask, render_template

app = Flask(__name__)

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

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

auth.py

 from flask import current_app as app, render_template

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

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

 

Ответ №1:

Вы не можете зарегистрировать маршруты current_app , вместо этого вам нужно использовать класс, называемый Blueprint , который создан именно для этой цели (разделение приложения на несколько файлов).

app.py

 from flask import Flask, render_template
from auth import auth_bp

app = Flask(__name__)

# Register the blueprint
app.register_blueprint(auth_bp)

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

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

auth.py

 from flask import Blueprint, render_template

# Initialize the blueprint
auth_bp = Blueprint('auth', __name__)

@auth_bp.route("/login")
def login():
    return render_template("login.html")

@auth_bp.route("/register")
def register():
    return render_template("register.html")
 

Видишь https://flask.palletsprojects.com/en/2.0.x/blueprints/ для получения дополнительной информации.

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

1. Спасибо вам за этот ответ. Я потерял 4 дня, задаваясь вопросом, почему мои маршруты не регистрируются. Пока код хорош. БОЖЕ мой! Ты заслуживаешь пива или двух. Ура!

Ответ №2:

Похоже, у вас есть по крайней мере два файла, в которых есть эти маршруты. В вашем app.py файл у вас есть /home и /профиль, они оба работают. Они работают, потому что вы инициализировали приложение Flask вон там.

Flask предлагает чертежи для разделения вашего приложения. Например, вы можете создать схему под названием auth.

Существует также специальный учебник по этому предмету.

Я предлагаю перенести инициализацию переменной приложения в __init__.py файл и создать метод create_app (), который возвращает приложение. С помощью этого метода вы также можете зарегистрировать свои чертежи.

Этот метод будет выглядеть следующим образом:

 def create_app():
    app = Flask(__name__)
    
    from . import app as application, auth
    app.register_blueprint(auth.bp)
    app.register_blueprint(application.bp)
    
    return app
 

Ваш auth.py файл, например, будет выглядеть так:

 from flask import Blueprint, render_template

bp = Blueprint('auth', __name__)

@bp.route("/login")
def login():
    return render_template("login.html")

@bp.route("/register")
def register():
    return render_template("register.html")