我的 Flask 应用程序路由文件有什么问题?我的路线可能未注册或存在其他问题

Cha*_*ode 2 python mongodb flask

我无法理解为什么我的烧瓶应用程序会出现此错误:我已经尝试对其进行调试和研究。看起来我的蓝图应该很好。当我通过 wsgi.py 运行 init_app() 时,似乎在注册我的 auth_blueprint 时遇到问题,我不确定为什么。

错误

Traceback (most recent call last):
  File "F:\PROGRAMMING\pycharm_projects\home_inspection_website\Home_Inspection_Website\wsgi.py", line 4, in <module>
    app = init_app()
  File "F:\PROGRAMMING\pycharm_projects\home_inspection_website\Home_Inspection_Website\home_inspection_website_application\__init__.py", line 34, in init_app
    app.register_blueprint(auth_blueprint)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\app.py", line 98, in wrapper_func
    return f(self, *args, **kwargs)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\app.py", line 1168, in register_blueprint
    blueprint.register(self, options, first_registration)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\blueprints.py", line 256, in register
    deferred(state)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\blueprints.py", line 294, in <lambda>
    self.record(lambda s: s.add_url_rule(rule, endpoint, view_func, **options))
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\blueprints.py", line 81, in add_url_rule
    self.app.add_url_rule(
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\app.py", line 98, in wrapper_func
    return f(self, *args, **kwargs)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\flask\app.py", line 1278, in add_url_rule
    self.url_map.add(rule)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\werkzeug\routing.py", line 1482, in add
    rule.bind(self)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\werkzeug\routing.py", line 767, in bind
    self.compile()
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\werkzeug\routing.py", line 836, in compile
    _build_regex(self.rule if self.is_leaf else self.rule.rstrip("/"))
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\werkzeug\routing.py", line 825, in _build_regex
    convobj = self.get_converter(variable, converter, c_args, c_kwargs)
  File "C:\Users\cbbgo\.virtualenvs\Home_Inspection_Website-gpy8md-i\lib\site-packages\werkzeug\routing.py", line 775, in get_converter
    raise LookupError("the converter %r does not exist" % converter_name)
LookupError: the converter 'str' does not exist

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

初始化.py

from flask import Flask
from extensions import asset, mongo, login_manager, csrf, bcr
from sessions.mongo_sessions import MongoSessionInterface


def init_app():
    """Initialize the core application."""
    app = Flask(__name__, instance_relative_config=False)
    app.config.from_object('config.DevConfig')
    # app.config.from_object('config.ProdConfig')

    # Initialize Plugins
    asset.init_app(app)
    bcr.init_app(app)
    mongo.init_app(app)
    login_manager.init_app(app)
    csrf.init_app(app)

    with app.app_context():
        from assets import compile_static_assets
        # Include our Routes
        from auth import auth_blueprint
        from errors import errors_blueprint
        from inspection_home import inspection_home_blueprint
        from main import main_blueprint

        app.session_interface = MongoSessionInterface(db='home_inspection')

        # Register Blueprints
        app.register_blueprint(main_blueprint, url_prefix="/main")
        app.register_blueprint(inspection_home_blueprint, url_prefix="/inspection_home")
        app.register_blueprint(auth_blueprint)
        app.register_blueprint(errors_blueprint)

        # Create static asset bundles
        compile_static_assets(app)

        return app
Run Code Online (Sandbox Code Playgroud)

授权蓝图

from flask import Blueprint, redirect, render_template, flash, request, url_for
from flask_login import login_required, logout_user, current_user, login_user
from forms import LoginForm
from models import User
from extensions import login_manager, mongo
import models.errors as user_errors

# Blueprint Configuration
auth_blueprint = Blueprint(
    'auth',
    __name__,
    template_folder='views',
    static_folder='static'
)


@auth_blueprint.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('inspection_home.dashboard'))
    form = LoginForm()
    if form.validate_on_submit():
        try:
            if User.login_valid(email=form.email.data, password=form.password.data):
                login_user(User)
                next_page = request.args.get('next')
                return redirect(next_page or url_for('auth.login_successful'))
        except user_errors.UserError as e:
            return e.message
        return redirect(url_for('auth.login'))
    return render_template(
        'auth.login',
        form=form,
        title='Log in',
        template='login-page',
        body='Log in with your User account.'
    )


@login_manager.user_loader
def load_user(_id):
    """Check if user is logged-in on every page load."""
    u = mongo.db.Users.find_one({"_id": _id})
    if not u:
        return None
    return User(name=u['Name'],
                email=u['Email'],
                password=u['Password']
                )


@login_manager.unauthorized_handler
def unauthorized():
    """Redirect unauthorized users to Login page."""
    flash('You must be logged in to view that page.')
    return redirect(url_for('auth.login'))


@auth_blueprint.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('main.home'))


@auth_blueprint.route('/login_successful/<str:name>')
def login_successful(name):
    return render_template('login_navigation/auth/login_successful.html')
Run Code Online (Sandbox Code Playgroud)

小智 5

\n
@auth_blueprint.route('/login_successful/<str:name>')\ndef login_successful(name):\n    return render_template('login_navigation/auth/login_successful.html')\n
Run Code Online (Sandbox Code Playgroud)\n

Flask\xe2\x80\x99s 字符串的内置 URL 转换器是string, 不是str

\n