Reputation: 41
I'm building an API in using Flkas, but when I try place endpoints at multiple files importing with "import" to organize my api, only works one file route.
My first file teste.py:
from flask import Flask, jsonify, request
app = Flask(__name__)
import teste2
livros = [
{
'id': 1,
'título': 'O Senhor dos Anéis - A Sociedade do Anel',
'autor': 'J.R.R Tolkien'
},
{
'id': 2,
'título': 'Harry Potter e a Pedra Filosofal',
'autor': 'J.K Howling'
},
{
'id': 3,
'título': 'James Clear',
'autor': 'Hábitos Atômicos'
},
]
# Consultar(todos)
@app.route('/livros',methods=['GET'])
def obter_livros():
return jsonify(livros)
# Consultar(id)
@app.route('/livros/<int:id>',methods=['GET'])
def obter_livro_por_id(id):
for livro in livros:
if livro.get('id') == id:
return jsonify(livro)
# Editar
@app.route('/livros/<int:id>',methods=['PUT'])
def editar_livro_por_id(id):
livro_alterado = request.get_json()
for indice,livro in enumerate(livros):
if livro.get('id') == id:
livros[indice].update(livro_alterado)
return jsonify(livros[indice])
# Criar
@app.route('/livros',methods=['POST'])
def incluir_novo_livro():
novo_livro = request.get_json()
livros.append(novo_livro)
return jsonify(livros)
# Excluir
@app.route('/livros/<int:id>',methods=['DELETE'])
def excluir_livro(id):
for indice, livro in enumerate(livros):
if livro.get('id') == id:
del livros[indice]
return jsonify(livros)
app.run(port=5000,host='localhost',debug=True)
My second file teste2.py:
from flask import Flask, jsonify, request
app = Flask(__name__)
livros2 = [
{
'id': 1,
'título': 'only a teste',
'autor': 'J.R.R Tolkien'
},
]
# Consultar(todos)
@app.route('/livross',methods=['GET'])
def obter_livros():
return jsonify(livros2)
app.run(port=5000,host='localhost',debug=True)
When I run teste.py
, only teste2.py's endpoints works... How can I make all endpoints work without putting everything in one file?
Upvotes: 0
Views: 862
Reputation: 69675
In order to have view functions in different files, Flask's documentation recommends using blueprints.
In your case, you can try something like:
teste.py
from flask import Flask, jsonify, request, Blueprint
first_blueprint = Blueprint('first_blueprint', __name__)
# notice the change in the route
@first_blueprint.route('/',methods=['GET'])
def obter_livros():
...
# notice change in the path
@first_blueprint.route('/<int:id>',methods=['GET'])
def obter_livro_por_id(id):
...
# do the same for the other view functions in the file
# in the other file also create a blueprint
In the file where you are creating your Flask app:
from flask import App
from teste import first_blueprint
app = Flask(__name__)
app.register_blueprint(first_blueprint, url_prefix='/livros')
# register the other blueprint
Upvotes: 2