pycharm 404错误

0kjbasz6  于 2023-10-20  发布在  PyCharm
关注(0)|答案(1)|浏览(150)

我从Flask的Blueprints应用程序中获得404错误。这是在Windows 10上运行最新的PyCharm和python 3.11。
我已经看到了几个,通常是多年前,这个问题的版本。我有一个Flask应用程序,它并不完整,但在早期开发中“工作”。我被安排了一系列其他项目,现在又回到了Flask应用程序上。我更新了Python、Flask及其依赖项。
当我在PyCharm调试器中启动应用程序时,它会运行并显示预期的启动信息:

  1. FLASK_APP = my_app/my_app.py
  2. FLASK_ENV = development
  3. FLASK_DEBUG = 0
  4. In folder C:/Users/ME/PycharmProjects/Project_folder
  5. import sys; print('Python %s on %s' % (sys.version, sys.platform))
  6. C:\Users\ME\PycharmProjects\Project_folder\venv\Scripts\python.exe C:/JetBrains/PyCharm-2023.2.1/plugins/python/helpers/pydev/pydevd.py --module --multiprocess --qt-support=auto --client 127.0.0.1 --port 50785 --file flask run
  7. Connected to pydev debugger (build 232.9559.58)
  8. [2023-09-29 14:31:12,134] INFO in my_app: STARTING APP
  9. * Serving Flask app 'my_app/my_app.py'
  10. * Debug mode: on
  11. WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
  12. * Running on http://127.0.0.1:5000
  13. Press CTRL+C to quit

我的项目布局--为了简洁而编辑

  1. :.
  2. | my_app.py
  3. | CONFIG.ini
  4. | requirements.txt
  5. +---app
  6. | | local_settings.py
  7. | | settings.py
  8. | | __init__.py
  9. | +---models
  10. | +---static
  11. | +---templates
  12. | +---views
  13. | | | admin.py
  14. | | | API.py
  15. | | | main.py
  16. | | | utilities.py
  17. | | | __init__.py

我在以下方面定义蓝图:admin.pyAPI.pymain.py。admin和API部分目前只是存根。
my_app.py看起来像:

  1. from app import create_app
  2. my_app = None
  3. try:
  4. my_app = create_app()
  5. my_app.logger.info(f'STARTING APP')
  6. except Exception as e:
  7. msg = repr(e)
  8. if my_app:
  9. my_app.logger.error(f'{repr(msg)}')
  10. print(repr(msg))

aoo/__init__.py看起来像这样。注意create_app()中的register_blueprints(app)调用;下面是app/utilities.py。它正在注册蓝图,因为我可以在函数调用之后放置一个断点,并在app对象中沿着规则。

  1. import os
  2. from dotenv import load_dotenv
  3. from flask import Flask
  4. from flask_mail import Mail
  5. from flask_migrate import Migrate
  6. from flask_sqlalchemy import SQLAlchemy
  7. from flask_user import UserManager
  8. from flask_wtf.csrf import CSRFProtect
  9. from app.models.user import User, UserRegisterForm, UserProfileForm, UserLoginForm
  10. from app.views.utilities import register_api, register_blueprints
  11. # Instantiate Flask
  12. app = Flask(__name__)
  13. csrf_protect = CSRFProtect()
  14. mail = Mail()
  15. db = SQLAlchemy()
  16. migrate = Migrate()
  17. user_manager = None
  18. def create_app():
  19. try:
  20. load_dotenv()
  21. app.config.from_object("app.settings")
  22. app.config.from_object("app.local_settings")
  23. # Set up an error-logger to send emails to app.config.ADMINS
  24. init_file_error_handler(app)
  25. init_email_error_handler(app)
  26. csrf_protect.init_app(app)
  27. mail.init_app(app)
  28. db.init_app(app)
  29. migrate.init_app(app, db)
  30. # Setup Flask-User
  31. global user_manager
  32. user_manager = UserManager(app, db, User)
  33. user_manager.RegisterFormClass = UserRegisterForm
  34. user_manager.EditUserProfileFormClass = UserProfileForm
  35. user_manager.LoginFormClass = UserLoginForm
  36. register_blueprints(app)
  37. return app
  38. except Exception as e:
  39. print(repr(e))
  40. raise e
  41. @app.context_processor
  42. def context_processor():
  43. return dict(user_manager=user_manager)
  44. def init_file_error_handler(my_app):
  45. ...
  46. def init_email_error_handler(my_app):
  47. ...

utilities.py

  1. from app.views.API import API_blueprint
  2. from app.views.admin import admin_blueprint
  3. from app.views.main import main_blueprint
  4. def register_blueprints(my_app):
  5. try:
  6. my_app.register_blueprint(main_blueprint)
  7. my_app.register_blueprint(admin_blueprint)
  8. my_app.register_blueprint(API_blueprint)
  9. except Exception as e:
  10. raise
  11. def register_api(my_app, view, endpoint, url, pk="id", pk_type="uuid"):
  12. ...

main.py有基本的主页和其他东西:

  1. import os
  2. import random
  3. from datetime import timedelta
  4. from flask import redirect, render_template, session
  5. from flask import request, url_for, Blueprint
  6. from flask_user import current_user, login_required
  7. main_blueprint = Blueprint("main", __name__, template_folder="templates")
  8. # The Home page is accessible to anyone
  9. @main_blueprint.route("/")
  10. def home_page():
  11. from app import app
  12. ...
  13. return render_template("main/home_page.html")

PyCharm调试器启动;我可以在my_app.py中中断create_app()调用;跳过创建步骤并检查my_app对象,据我所知,它似乎被正确填充,而不是这方面的Maven。
点击PyCharm调试窗口中的URL会弹出一个浏览器,但会报告404错误。据我所知,没有其他错误被抛出。
有什么想法?

次要编辑FLASK_DEBUG应设置为0以上。
更新我刚刚了解了flask routes命令。在调试器中,我可以看到蓝图已经添加,但当我运行routs命令时,我几乎什么也没有得到:

  1. > flask --app .\my_app\app routes
  2. Endpoint Methods Rule
  3. -------- ------- -----------------------
  4. static GET /static/<path:filename>
brqmpdu1

brqmpdu11#

所以,它又是路由。我正在运行Python 3.11.6,最新的Flask和Flask-Login。我很想说我知道答案,但我偶然发现Werkzberg在2.3和3.0版本之间贬低了它的一些内部结构。在3.0中,贬值的东西被删除了--这打破了Flaks-Login。将Werkzberg回滚到2.3似乎有所帮助。FYI

相关问题