底部的 Python 模块导入好吗?

Kyl*_*ell 5 python flask

pylint的是在我大喊大叫把一个from .views import *结束我的__init__.py说法进口应放置在模块的顶部。

如果我把它放在顶部,__init__.py那么 Flask 就找不到我的路线(视图),所以这不起作用。页面无法加载,404 错误。最后导入路由时加载良好。

几个问题:

  • Pylint 是否错误地假设模块应该始终位于顶部并且有时在最后导入是可以接受的(例如在这种情况下)?
  • 还是有另一种方式我应该导入我的路线?

供参考,以防万一:

.
??? README.md
??? my_app
?   ??? __init__.py
?   ??? forms.py
?   ??? models.py
?   ??? static
?   ??? templates
?   ?   ??? index.html
?   ?   ??? loggedin.html
?   ??? views.py
??? config.py
??? instance
?   ??? config.py
??? requirements.txt
??? run.py
Run Code Online (Sandbox Code Playgroud)

内容示例 __init__.py

from flask import Flask, render_template
from authlib.integrations.flask_client import OAuth


app = Flask(__name__, instance_relative_config=True)
app.config.from_object('config')
app.config.from_pyfile('config.py')

oauth = OAuth(app)

APP_CALLBACK_URL = app.config['APP_CALLBACK_URL']
APP_CLIENT_ID = app.config['APP_CLIENT_ID']
APP_CLIENT_SECRET = app.config['APP_CLIENT_SECRET']
APP_DOMAIN = app.config['APP_DOMAIN']
APP_BASE_URL = 'https://' + APP_DOMAIN

my_app = oauth.register(
    'MY_APP',
    client_id=APP_CLIENT_ID,
    client_secret=APP_CLIENT_SECRET,
    api_base_url=APP_BASE_URL,
    access_token_url=APP_BASE_URL + '/oauth/token',
    authorize_url=APP_BASE_URL + '/authorize',
)


from .views import *
Run Code Online (Sandbox Code Playgroud)

Tri*_*eAC 5

一般来说,导入应该排在最前面,但 Flask 文档谈到了这种情况,并鼓励你照你做的去做。摘自https://flask.palletsprojects.com/en/1.1.x/patterns/packages/

  1. Flask 应用程序对象创建必须在__init__.py文件中。这样每个模块都可以安全地导入它,并且__name__变量将解析为正确的包。

  2. 所有视图函数(route()顶部带有装饰器的函数)都必须导入到__init__.py文件中。不是对象本身,而是它所在的模块。在创建应用程序对象后导入视图模块。

顺便说一句,不要这样做from .views import *。做import .views代替。