为了账号安全,请及时绑定邮箱和手机立即绑定

尝试运行 Flask 应用程序时出现错误“函数”对象没有属性“as_view”

尝试运行 Flask 应用程序时出现错误“函数”对象没有属性“as_view”

www说 2023-03-16 15:49:28
一年多以后,我开始编写 Flask 应用程序,我想我忘记了什么。下面的代码会导致错误:from flask import Flaskfrom flask import jsonifyfrom flask_restplus import Resource, Apifrom home_iot.config import readerfrom download_audio.ydla import downloadapp = Flask(__name__)_api = Api(app, catch_all_404s=True, version=0.1,          title="REST HTTP API's Gateway",          descrition="REST API gateway")api_ns = _api.namespace("iot", description="API.")@api_ns.route("/tcpserver", methods=["GET"])def advertise_tcpserver():    ip = reader.get_server_ip()    return jsonify({"tcpserver": ip})if __name__ == "__main__":    app.run(host='127.0.0.1')错误是:$ python 应用程序.pyTraceback (most recent call last):  File "app.py", line 29, in <module>    @api_ns.route("/tcpserver", methods=["GET"])  File "/Users/ciasto/pyenvs/flaskrestplusiot/lib/python2.7/site-packages/flask_restplus/namespace.py", line 98, in wrapper    self.add_resource(cls, *urls, **kwargs)  File "/Users/ciasto/pyenvs/flaskrestplusiot/lib/python2.7/site-packages/flask_restplus/namespace.py", line 87, in add_resource    api.register_resource(self, resource, *ns_urls, **kwargs)  File "/Users/ciasto/pyenvs/flaskrestplusiot/lib/python2.7/site-packages/flask_restplus/api.py", line 264, in register_resource    self._register_view(self.app, resource, namespace, *urls, **kwargs)  File "/Users/ciasto/pyenvs/flaskrestplusiot/lib/python2.7/site-packages/flask_restplus/api.py", line 287, in _register_view    resource_func = self.output(resource.as_view(endpoint, self, *resource_class_args,AttributeError: 'function' object has no attribute 'as_view'
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

希望这可以帮助那些有同样错误但没有找到解决方案的人

要完成@v25给出的答案,您必须通过从 flask_restplus 中的 Ressource 类继承来为您的命名空间提供资源。

以下示例对我有用

环境:

  • Ubuntu 18.04

  • 蟒蛇 3.7.1

蟒蛇要求:

  • 烧瓶==1.1.2

  • flask-restplus==0.13.0

  • 工具==0.16.1

源代码:iot.py

from flask_restplus import Namespace,Resource


api_ns = Namespace("iot", description="API.")


@api_ns.route("/tcpserver")

class AdvertiseTcpserver(Resource):

    def get(self):

        #TODO return the correct ip value

        return {"tcpserver": "ip"}

app.py


from .iot import api_ns

from flask import Flask

from flask_restplus import Api


app = Flask(__name__)


_api = Api(app, catch_all_404s=True, version=0.1,

      title="REST HTTP API's Gateway",

      descrition="REST API gateway")


_api.add_namespace(api_ns, path='/some/prefix')


app.run()

测试命令:


#!/bin/sh

wget localhost:5000/some/prefix/tcpserver

如果这有帮助,请告诉我。


查看完整回答
反对 回复 2023-03-16
?
达令说

TA贡献1821条经验 获得超6个赞

不要认为这是用flask_restplus. 查看缩放文档


您可能正在寻找类似的东西:


iot.py


from flask_restplus import Namespace


api_ns = Namespace("iot", description="API.")


@api_ns.route("/tcpserver", methods=["GET"])

def advertise_tcpserver():

    ip = reader.get_server_ip()

    return jsonify({"tcpserver": ip})

然后在你的主app.py中:


# other imports 


from .iot import api_ns


app = Flask(__name__)


_api = Api(app, catch_all_404s=True, version=0.1,

          title="REST HTTP API's Gateway",

          descrition="REST API gateway")


_api.add_namespace(api_ns, path='/some/prefix')

此外,您似乎正在使用已停产的 Python 2.7。我建议使用虚拟环境或 docker 升级到最新版本,以免弄乱系统的 python。


查看完整回答
反对 回复 2023-03-16
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信