отдельные python flask файлы в несколько файлов - PullRequest
0 голосов
/ 09 апреля 2020

Я уже много читал об этом при переполнении стека, но сейчас я борюсь с проблемой и не знаю, как ее исправить.

Мой main.py выглядит следующим образом:

from flask import Flask, jsonify, request

from flask_pymongo import PyMongo
from bson.objectid import ObjectId
from flask_cors import CORS

app = Flask(__name__)


# connect to LiTags database
app.config["MONGO_URI"] = "mongodb://localhost:27017/LiTags"

mongo = PyMongo(app)

CORS(app)

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

затем я разделил некоторые запросы к базе данных (MongoDB) в другом файле (requests.py). Я знаю, что сейчас это не нужно, потому что сейчас не так много запросов, но после того, как я исправлю эту проблему, их будет больше.

Так что это мой requests.py:

from main import app, mongo
from flask import Flask, jsonify, request, Blueprint
from flask_pymongo import PyMongo
from bson.objectid import ObjectId


@app.route("/", methods=["GET"])
def getProjects():
    result = []
    projects = mongo.db.literature

    for field in projects.find():
        result.append(
            {"_id": str(field["_id"]), "project_name": field["project_name"]})

    return jsonify(result)

обычно это мой внешний интерфейс (ReactJS) для запроса flask:

// get project names from the backend
  getProjects() {
    axios.get(`http://127.0.0.1:5000/`)
      .then(res => {
        this.setState({ projects: res.data });
      })
  }

до того, как я отделил запросы в requests.py от main.py моей программы, работающей, но теперь я получаю ошибку в инструмент проверки в браузере, который говорит:

"GET http://127.0.0.1:5000/ 404 (NOT FOUND)
Error: Request failed with status code 404
    at createError (createError.js:17)
    at settle (settle.js:19)
    at XMLHttpRequest.handleLoad (xhr.js:63)"

1 Ответ

0 голосов
/ 09 апреля 2020

В main.py вам придется импортировать requests.py

from requests import *

, потому что main.py не знает, что у вас есть код в другом файле.

Но может быть проблема с circular imports - main.py приходится импортировать requests.py, но requests.py aready импортирует main.py, и это создает проблему.

Возможно, вам придется разделить main на два файла:

main.py - которому не нужен код из reuqests, поэтому ему не нужно импортировать его

from flask import Flask, jsonify, request

from flask_pymongo import PyMongo
from bson.objectid import ObjectId
from flask_cors import CORS

app = Flask(__name__)

# connect to LiTags database
app.config["MONGO_URI"] = "mongodb://localhost:27017/LiTags"

mongo = PyMongo(app)

CORS(app)

run.py - который нужен код из requests (но requests не импортирует его)

from main import *
#from main import app
from requests import *

#from models import *
#from views import *
#from admin import *    

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

, и теперь вам придется использовать run.py вместо main.py для запуска сервера.

python run.py

Кстати: большинство людей и руководств / документации используют имя views.py вместо requests.py для файла с кодом, который использует @app.route. Раньше я бы использовал имя api.py, потому что эти представления возвращают JSON данные, как во многих API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...