【问题标题】:Why Blueprint in Python Flask is not working although is seems so easy?为什么 Python Flask 中的蓝图无法正常工作,尽管看起来很简单?
【发布时间】:2019-06-09 22:01:25
【问题描述】:

我正在做一个项目。现在我决定用蓝图把它分成小部分。根据输出,我的变量 modapi 无法访问 app.py。输出显示在帖子的最后。

C:.
│   app.py
│   appaux.py
│   db.yaml
│
├───.vscode
│       settings.json
│
├───blue
│   │   __init__.py
│   │
│   ├───api
│   │   │   forms.py
│   │   │   routes.py
│   │   │   utils.py
│   │   │   __init__.py

app.py

from blue import create_app,create_MySQL_connection
from flask import Flask, render_template, url_for, redirect, jsonify

app = create_app()

mysql = create_MySQL_connection(app)

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

blue/init.py

from flask import Flask
from flask_mysqldb import MySQL
import yaml
from flask_cors import CORS

def create_app():
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_object(__name__)

    db = yaml.load(open('db.yaml'))
    app.config['MYSQL_HOST'] = db['mysql_host']
    app.config['MYSQL_USER'] = db['mysql_user']
    app.config['MYSQL_PASSWORD'] = db['mysql_password']
    app.config['MYSQL_DB'] = db['mysql_db']

    #mysql = MySQL(app)
    CORS(app)

    from blue.api.routes import modapi
    # from blue.site.routes import mod

    # app.register_blueprint(site.routes.mod)
    app.register_blueprint(modapi, url_prefix='/api')

    from blue.api import routes
    app.register_blueprint(routes)

    return app

def create_MySQL_connection(app):
    return MySQL(app)

blue/routes.py

from app import Flask, render_template, url_for, redirect, jsonify

#from flask import Flask, render_template, url_for, redirect, jsonify
from Flask import Blueprint
#from blue import create_app

from flask_mysqldb import MySQL
from flask import request, Response
import json
import yaml
from  flask_cors import CORS
from app import mysql
from blue.api.utils import extract_tables
from blue.api.forms import *

# IMPORTES NECESSARIOS PARA A COMPARACAO ATRAVES DE DATASET DOS COMANDOS DE SQL
import sqlparse
import MySQLdb._mysql
import pandas
import datacompy
from mysql.connector import Error


modapi = Blueprint('api', __name__)

@modapi.route('/v1.0/alunos/', methods=['POST', 'GET'])
def alunos():
   ...

C:\Users\joaog\Documents\tryflask\blue__init__.py:10: YAMLLoadWarning: 不推荐在没有 Loader=... 的情况下调用 yaml.load(),因为默认的 Loader 是不安全的。请阅读https://msg.pyyaml.org/load 了解详细信息。 db = yaml.load(open('db.yaml')) 回溯(最近一次通话最后): 文件“app.py”,第 4 行,在 应用程序 = 创建应用程序() 文件“C:\Users\joaog\Documents\tryflask\blue__init__.py”,第 19 行,在 create_app 从 blue.api.routes 导入 modapi 文件“C:\Users\joaog\Documents\tryflask\blue\api\routes.py”,第 1 行,在 从应用导入 Flask、render_template、url_for、redirect、jsonify 文件“C:\Users\joaog\Documents\tryflask\app.py”,第 4 行,在 应用程序 = 创建应用程序() 文件“C:\Users\joaog\Documents\tryflask\blue__init__.py”,第 19 行,在 create_app 从 blue.api.routes 导入 modapi

ImportError: cannot import name 'modapi' from 'blue.api.routes' (C:\Users\joaog\Documents\tryflask\blue\api\routes.py)

【问题讨论】:

  • 我在这里看到的唯一问题是“在 Python Flask 中易于学习蓝图吗?”,由于主要基于意见,因此偏离主题。您想问的实际问题是什么?
  • @jwodder 标题已更改。为什么我的问题被写下来了?

标签: python python-3.x flask


【解决方案1】:

我认为你在导入路线时错了......

请看一下

蓝色/初始化.py

from flask import Flask

app = Flask(__name__)
app.config['SECRET_KEY'] = 'qqwer%t&'

from blue.api.routes import modapi

app.register_blueprint(modapi, url_prefix='/api')

blue/api/routes.py

from flask import Blueprint

modapi = Blueprint('api', __name__)

@modapi.route('/')
def alunos():
    return 'Hello World alunos'

应该可以了

【讨论】:

  • 嗨,@flakavir 首先感谢您查看此错误。其次,它与我写的非常相似,除了 app.config['SECRET_KEY'] = 'something'
  • 只需删除 from blue.api import routes 就可以了
猜你喜欢
  • 2016-12-26
  • 2015-10-27
  • 1970-01-01
  • 2021-12-23
  • 2014-03-20
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多