【发布时间】:2022-10-24 04:35:07
【问题描述】:
我遇到了一个问题,在我的 Flask-Restful 应用程序中,当我尝试导航时,所有路线都显示 404 not found。例如http://localhost:5000/api/v1/auth/login。
在我的应用程序中,所有路线都定义得很好,但由于某些不清楚的原因,所有路线都显示 404。 在寻找这个问题的答案时,我遇到了这个问题Flask-Restful powered API returning 404 errors,但它对我的问题没有答案。我不知道为什么会这样
这是我配置所有内容的方式。 入口文件 app.py
from api import create_app, db, jwt
from flask_script import Manager
from flask_migrate import MigrateCommand
app = create_app()
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
db.create_all(app=create_app())
app.run()
__init__.py in auth folder
from .resources import UserLogin, LogoutAccess, TokenRefresh, LogoutRefresh, RegisterUser
def auth_routes(api):
api.add_resource(UserLogin, '/auth/login')
api.add_resource(RegisterUser, '/auth/register')
api.add_resource(LogoutAccess, '/auth/logout')
api.add_resource(TokenRefresh, '/auth/refresh')
api.add_resource(LogoutRefresh, '/auth/logout/refresh')
__init__.py in api folder
from sqlalchemy import MetaData
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_restful import Api
from flask_jwt_extended import JWTManager
from flask_marshmallow import Marshmallow
from .config import env_config
from flask_migrate import Migrate
from flask_cors import CORS
import logging
convention = {
"ix": 'ix_%(column_0_label)s',
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s"
}
metadata = MetaData(naming_convention=convention)
db = SQLAlchemy(metadata=metadata)
migrate = Migrate()
ma = Marshmallow()
api = Api()
jwt = JWTManager()
cors = CORS()
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
def create_app(config_name='testing'):
app = Flask(__name__)
app.config.from_object(env_config[config_name])
db.init_app(app)
migrate.init_app(app, db)
ma.init_app(app)
api.init_app(app)
jwt.init_app(app)
cors.init_app(app)
api.prefix = '/api/v1'
from .errors.handlers import errors
app.register_blueprint(errors)
from models import RevokedToken
@jwt.token_in_blacklist_loader
def check_if_token_in_blacklist(decrypted_token):
jti = decrypted_token['jti']
return RevokedToken.is_jti_blacklisted(jti)
@jwt.user_claims_loader
def add_claims_to_access_token(identity):
return {
'id': identity.id,
'role': identity.role
}
@jwt.user_identity_loader
def user_identity_lookup(user):
return user.id
from .auth import auth_routes
from .parcels import parcel_routes
auth_routes(api)
parcel_routes(api)
return app
我正在使用 python 3.9、Flask 1.12、Flask-RestFul 0.3.8
【问题讨论】:
-
我可以想象 api.prefix = '/api/v1' 实际上不起作用,您是否尝试在不带前缀的情况下调用 /api/auth/login 并检查是否得到响应?
-
你应该看看blueprints。您通常创建一个带有前缀的蓝图,而不是
api.prefix,并在该蓝图中注册路由,而不是直接在api上注册。最后,在api中注册蓝图。 -
@c8999c3f964f64 我去掉了前缀,还是一样
标签: python flask flask-restful