Python 所有路线404

Python 所有路线404,python,flask,Python,Flask,我正试着站起来拿着烧瓶跑。服务器即将启动,但我的两条路线都是404,这是我所有的路线。以下是文件夹结构: project/ -> __init__.py -> app.py -> requirements.txt -> api/ -> __init__.py -> routes.py -> service -> __init__.py ->

我正试着站起来拿着烧瓶跑。服务器即将启动,但我的两条路线都是404,这是我所有的路线。以下是文件夹结构:

project/
    -> __init__.py
    -> app.py
    -> requirements.txt
    -> api/
        -> __init__.py
        -> routes.py
    -> service
        -> __init__.py
        -> service.py
以下是我的
app.py

import os
from flask import Flask

from project.api import api

app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api/v1')

# Environment based Configuration
host = os.getenv('HOST') or '0.0.0.0'
port = os.getenv('PORT') or '8000'
debug = os.getenv('DEV') or False


if __name__ == '__main__':
    app.run(host=host, port=port, debug=debug)
from flask import Blueprint

api = Blueprint('api', __name__)

from project.api import api
from flask import jsonify, request, url_for
from project.service import converter
from project import app


def has_no_empty_params(rule):
    defaults = rule.defaults if rule.defaults is not None else ()
    arguments = rule.arguments if rule.arguments is not None else ()
    return len(defaults) >= len(arguments)


@app.route("/site-map")
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


@app.route('/hello)
def hello():
    return jsonify({"message": "hello"})
from flask import jsonify, request, url_for
from project.service import converter

# from project import app
from project.api import api  # -- HERE --

[..]

# @app.route("/site-map")
@api.route("/site-map")  # -- HERE --
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


# @app.route('/hello')  #  you are missing "'"
@api.route('/hello')  # -- HERE --
def hello():
    return jsonify({"message": "hello"})
在my
api/\uuuuu init\uuuuuuuy.py
中:

import os
from flask import Flask

from project.api import api

app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api/v1')

# Environment based Configuration
host = os.getenv('HOST') or '0.0.0.0'
port = os.getenv('PORT') or '8000'
debug = os.getenv('DEV') or False


if __name__ == '__main__':
    app.run(host=host, port=port, debug=debug)
from flask import Blueprint

api = Blueprint('api', __name__)

from project.api import api
from flask import jsonify, request, url_for
from project.service import converter
from project import app


def has_no_empty_params(rule):
    defaults = rule.defaults if rule.defaults is not None else ()
    arguments = rule.arguments if rule.arguments is not None else ()
    return len(defaults) >= len(arguments)


@app.route("/site-map")
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


@app.route('/hello)
def hello():
    return jsonify({"message": "hello"})
from flask import jsonify, request, url_for
from project.service import converter

# from project import app
from project.api import api  # -- HERE --

[..]

# @app.route("/site-map")
@api.route("/site-map")  # -- HERE --
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


# @app.route('/hello')  #  you are missing "'"
@api.route('/hello')  # -- HERE --
def hello():
    return jsonify({"message": "hello"})
在my
routes.py
中:

import os
from flask import Flask

from project.api import api

app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api/v1')

# Environment based Configuration
host = os.getenv('HOST') or '0.0.0.0'
port = os.getenv('PORT') or '8000'
debug = os.getenv('DEV') or False


if __name__ == '__main__':
    app.run(host=host, port=port, debug=debug)
from flask import Blueprint

api = Blueprint('api', __name__)

from project.api import api
from flask import jsonify, request, url_for
from project.service import converter
from project import app


def has_no_empty_params(rule):
    defaults = rule.defaults if rule.defaults is not None else ()
    arguments = rule.arguments if rule.arguments is not None else ()
    return len(defaults) >= len(arguments)


@app.route("/site-map")
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


@app.route('/hello)
def hello():
    return jsonify({"message": "hello"})
from flask import jsonify, request, url_for
from project.service import converter

# from project import app
from project.api import api  # -- HERE --

[..]

# @app.route("/site-map")
@api.route("/site-map")  # -- HERE --
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


# @app.route('/hello')  #  you are missing "'"
@api.route('/hello')  # -- HERE --
def hello():
    return jsonify({"message": "hello"})
这是我得到的日志:

127.0.0.1 - - [18/Oct/2020 21:04:46] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [18/Oct/2020 21:04:53] "GET /api/v1/hello HTTP/1.1" 404 -
127.0.0.1 - - [18/Oct/2020 21:05:01] "GET /api/v1/site-map HTTP/1.1" 404 -
我做错了什么???

如果您检查,您将看到您的导入缺少一些内容

使用蓝图管线创建蓝图: 你的
路线。py
就是你的蓝图

从flask导入jsonify、请求、url\u
从project.service导入转换器
从烧瓶导入蓝图
api=蓝图('api',名称)
def没有空参数(规则):
默认值=rule.defaults,如果rule.defaults不是None-else()
arguments=rule.arguments,如果rule.arguments不是None-else()
返回len(默认值)>=len(参数)
@api.路线(“/现场地图”)
def site_map():
链接=[]
对于app.url\u map.iter\u rules()中的规则:
如果rule.methods中的“GET”没有空参数(规则):
url=url_for(rule.endpoint,**(rule.defaults或{}))
links.append((url,rule.endpoint))
@api.route('/hello)
def hello():
返回jsonify({“message”:“hello”})
导入蓝图并注册它。
app.py

导入操作系统
从烧瓶进口烧瓶
从project.api.routes导入api
app=烧瓶(名称)
应用程序注册蓝图(api,url前缀='/api/v1')
#基于环境的配置
host=os.getenv(“主机”)或“0.0.0.0”
port=os.getenv('port')或'8000'
debug=os.getenv('DEV')或False
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
运行(主机=主机,端口=端口,调试=调试)

另外,您在
@app.route('/hello)
。。。正确的是
@app.route('/hello')

你似乎在追随米格尔·格林伯格(Miguel Grinberg)在帖子中的做法

api/\uuuuu init\uuuuuu.py中

from flask import Blueprint

api = Blueprint('api', __name__)

# from project.api import api
from project.api import routes  # -- HERE --

在您的
routes.py
中:

import os
from flask import Flask

from project.api import api

app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api/v1')

# Environment based Configuration
host = os.getenv('HOST') or '0.0.0.0'
port = os.getenv('PORT') or '8000'
debug = os.getenv('DEV') or False


if __name__ == '__main__':
    app.run(host=host, port=port, debug=debug)
from flask import Blueprint

api = Blueprint('api', __name__)

from project.api import api
from flask import jsonify, request, url_for
from project.service import converter
from project import app


def has_no_empty_params(rule):
    defaults = rule.defaults if rule.defaults is not None else ()
    arguments = rule.arguments if rule.arguments is not None else ()
    return len(defaults) >= len(arguments)


@app.route("/site-map")
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


@app.route('/hello)
def hello():
    return jsonify({"message": "hello"})
from flask import jsonify, request, url_for
from project.service import converter

# from project import app
from project.api import api  # -- HERE --

[..]

# @app.route("/site-map")
@api.route("/site-map")  # -- HERE --
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))


# @app.route('/hello')  #  you are missing "'"
@api.route('/hello')  # -- HERE --
def hello():
    return jsonify({"message": "hello"})

请在浏览器中共享您试图访问的完整路线。@ChristianH试图访问
http://0.0.0.0:8000/api/v1/site-map
谢谢@mifol68042请查看我答案中的评论。希望它能工作。我收到以下错误-
回溯(最近一次调用):文件“src/app.py”,第3行,from project.api.routes import api ModuleNotFoundError:没有名为“project”的模块。
请从项目根文件夹运行:
python project/app.py
。另外,请尝试从.api.routes导入api
,再次尝试运行。对不起,我的意思是从api.routes导入api
@mifol68042您的python版本是什么?您是否正在使用任何virtualenv?通过上述更改,我面临此错误-
回溯(最近一次调用):文件“src/app.py”,第4行,from project.api import api ModuleNotFoundError:没有名为“project”的模块。