标签: flask-restful

为什么在 Flask 中调用第一个请求后阻止任何设置方法?

我正在使用 Flask 和 Flask-Restful 进行一个项目,尝试根据用户在我的 Restful API 中的输入获取动态 url。我创建了一个带有 get 方法的类,该类将响应请求,当用户调用另一个资源时,它会激活新资源并创建一个 url。

当我尝试向我的 api 添加新资源时出现问题,该资源调用 Flask 中的函数 setupmethod 来检查应用程序是否处于调试状态以及是否已经发出第一个请求。

 if self.debug and self._got_first_request:
     raise AssertionError('A setup function was called after the '
     'first request was handled. This usually indicates a bug '
     'in the application where a module was not imported '
     'and decorators or other functionality was called too late.\n'
     'To fix this make sure to import all your view modules, '
     'database models and everything related at a …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restful

2
推荐指数
1
解决办法
3550
查看次数

使用 Flask 定义 URL 根

我有多个具有相同 URL 根的路由。例子:

  • abc/def/上传
  • abc/def/列表
  • abc/def/page/{page_id}

我可以将abc/def定义为 URL 根吗?(类似于使用 Spring 或 Apache CXF 在 Java 中完成的操作)

谢谢

python flask flask-restful

2
推荐指数
1
解决办法
1万
查看次数

为什么我无法使用add_argument()将HTTP标头发送到Flask-RESTful reqparse模块?

我正在尝试集成Flask-RESTful的请求解析接口,在我的后端reqparse来请求来自客户端的HTTP头.目前,我希望使用它来验证用户并希望传入'secret_key'HTTP标头.

我用于此任务的add_argument()功能是函数.我请求标题的代码如下:

reqparse = reqparse.RequestParser()
reqparse.add_argument('secret_key', type=str, location='headers', required=True)
Run Code Online (Sandbox Code Playgroud)

但是,在发送以下cURL请求时:

curl -H "Content-Type: application/json" -H "{secret_key: SECRET}" -X POST -d '{}' http://localhost:5000/authUser
Run Code Online (Sandbox Code Playgroud)

我在Pycharm社区版编辑器上收到以下400错误:

127.0.0.1 - - [02/Aug/2016 18:48:59] "POST /authUser HTTP/1.1" 400 -
Run Code Online (Sandbox Code Playgroud)

以及我的cURL终端上的以下消息:

{
  "message": {
    "secret_key": "Missing required parameter in the HTTP headers"
  }
}
Run Code Online (Sandbox Code Playgroud)

要在Pycharm上重现此错误(并希望所有其他编译器也是如此),请使用下面编写的文件,如下所示:

Folder - Sample_App
    - __init__.py
    - run.py
    - views.py
Run Code Online (Sandbox Code Playgroud)

__init__.py

from flask import Flask
from flask_restful import Api
from views import AuthUser

app = Flask(__name__)

api …
Run Code Online (Sandbox Code Playgroud)

python api curl http-headers flask-restful

2
推荐指数
1
解决办法
1369
查看次数

Flask使用自定义标头测试put请求

我试图使用烧瓶测试客户端在我的Flask应用程序中测试PUT请求.一切看起来都不错,但我一直得到400 BAD请求.

我使用POSTMAN尝试了相同的请求,然后我得到了回复.

这是代码

 from flask import Flask 
 app = Flask(__name__) 
 data = {"filename": "/Users/resources/rovi_source_mock.csv"}
 headers = {'content-type': 'application/json'}
 api = "http://localhost:5000/ingest"
 with app.test_client() as client:
    api_response = client.put(api, data=data, headers=headers)
 print(api_response)
Run Code Online (Sandbox Code Playgroud)

产量

Response streamed [400 BAD REQUEST]
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 flask-restful flask-testing

2
推荐指数
2
解决办法
4233
查看次数

Flask/Flask_restful 自定义 404 错误信息

我有一个 flash/flask_result 应用程序设置如下。如何向整个应用程序添加自定义全局 404 错误消息?我应该用龙卷风还是烧瓶来做?

from flask import Flask
from flask_cors import CORS
from flask_restful import Api
from flask_env import MetaFlaskEnv
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.wsgi import WSGIContainer

...

#setup api app
app = Flask(__name__)
app.config.from_object(Configuration)
API = Api(app)

# allow cross site request
CORS = CORS(app, resources={r"/api/*": {"origins": "*"}})

# system endpoints
API.add_resource(Version, '/api/version')
...

if __name__ == '__main__':
    # start server
    HTTP_SERVER = HTTPServer(WSGIContainer(app))
    HTTP_SERVER.listen(port=app.config["PORT"])
    IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

python tornado flask python-3.x flask-restful

2
推荐指数
1
解决办法
2167
查看次数

使用Flask-RESTful检索查询参数

我有一个flask-RESTful端点,定义为:

class SearchEvents(Resource):
    def get(self, name, start_date, end_date):
         #do stuff

api.add_resource(endpoints.SearchEvents, '/events/<string:name>/<string:start_date>/<string:end_date>')
Run Code Online (Sandbox Code Playgroud)

我正在用邮递员手动测试它。我想传递start_date和end_date的空值。然而:

邮递员界面的屏幕截图 我尝试将网址修改为:

http://127.0.0.1:5000/events/test/ /  #<--Spaces
Run Code Online (Sandbox Code Playgroud)

http://127.0.0.1:5000/events/test/""/""
Run Code Online (Sandbox Code Playgroud)

无济于事。

query-string flask flask-restful postman

2
推荐指数
1
解决办法
2882
查看次数

Flask Restful NoAuthorizationError缺少授权标头

我正在使用Python 3.6在生产模式下的服务器上运行Flask Restful,并命中了需要jwt auth的端点,但是我不断收到“ NoAuthorizationError Missing Authoring Header”错误。

奇怪的是,使用Postman将相同的请求发送到我的Mac上完全相同的Flask应用的本地版本,并且工作正常,没有任何错误。该问题仅在实时服务器上发生,并且所有pip包的版本也完全相同。

更新 我在实时服务器上使用Gunicorn,当我停止应用程序并正常运行时python run.py,错误消失并返回正确的响应。

我为jwt错误设置了以下处理程序,同样,它在我的应用程序的本地版本上被捕获:

  • jwt.token_in_blacklist_loader
  • jwt.expired_token_loader
  • jwt.invalid_token_loader
  • jwt.revoked_token_loader
  • jwt.needs_fresh_token_loader
  • jwt.unauthorized_loader
  • jwt.claims_verification_failed_loader

出于测试目的,我没有在请求本身中发送令牌。即使我这样做,错误仍然存​​在。

这是我的Mac上本地响应:

{
    "errors": {
        "application": "Missing Authorization Header",
        "validation": null
    },
    "http_status": 401,
    "message": "There was a problem authenticating your token.",
    "status": 0,
    "time": 20
}
Run Code Online (Sandbox Code Playgroud)

这是实时服务器上的响应:

Aug 29 17:15:15 [5168]: return self.dispatch_request(*args, **kwargs)
Aug 29 17:15:15 [5168]: File "/home/domain.com/apps/core-api/env/lib/python3.6/site-packages/flask_restful/__init__.py", line 595, in dispatch_request
Aug 29 17:15:15 [5168]: resp = meth(*args, **kwargs)
Aug 29 17:15:15 [5168]: File …
Run Code Online (Sandbox Code Playgroud)

python flask jwt gunicorn flask-restful

2
推荐指数
2
解决办法
1444
查看次数

Flask-RESTful 我们可以在资源中 get 和 post 之前调用一个方法吗?

我在我的应用程序中使用 Flask-RESTful。

我想在每个资源发布之前调用一个方法并获取,这样我的代码就不会重复。

所以基本上这就是我所拥有的:

class SomeClass(Resource):
    def __init__():
        # Some stuff

    def get(self, **kwargs):
        # some code

    def post(self, **kwargs):
        # the same code as in get method
Run Code Online (Sandbox Code Playgroud)

我想在获取和发布之前进行方法调用,这样我的代码就不会重复。

我有什么办法可以做到这一点吗?

python flask flask-restful

2
推荐指数
1
解决办法
1484
查看次数

我的烧瓶应用程序没有正确返回非 ascii 字符

我正在尝试使用flask-restful api,作为返回值,代码应该返回一个json数据列表。但是,当 json 中的内容是非 ascii 字符(如 (èòsèèò))时,返回值

这是一个示例代码:

#! /usr/bin/env python
# coding: utf-8

from flask import Flask, Response
from flask_restful import Resource, Api
import json

app = Flask(__name__)
# Create the API
API = Api(app)



@app.route('/')
def hello_world():
    return Response('Here, with Response it works well: höne')

class APICLASS(Resource):
    """

    """
    def get(self, id):
        return [
        {
        "hey": 11,
        "test": "höne"
        }], 200


API.add_resource(APICLASS, '/<string:id>')

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

但是当我在 localhost 上检查结果时,我看到以下输出:

[
        {
        "hey": 11,
        "test": "h\u00f6ne"
        }]
Run Code Online (Sandbox Code Playgroud)

python utf-8 non-ascii-characters flask-restful python-3.7

2
推荐指数
1
解决办法
912
查看次数

类型错误:wrapper() 在使用 @jwt_required 时得到了意外的关键字参数“nam”

应用程序

from flask import Flask,request
from flask_restful import Api , Resource
from flask_jwt import JWT ,jwt_required , current_identity
from security import auntheticate , identity

app = Flask(__name__)
app.secret_key = "sangam"
api = Api(app)
jwt = JWT(app,auntheticate,identity)

items = []

class Item(Resource):   
    @jwt_required
    def get(self,nam):
        item = next(filter(lambda x:x['name'] == nam, items), None)
        return {'item':item} ,200 if item else 404

    def post(self,nam):
        if next(filter(lambda x:x['name'] == nam,items),None):
            return{'message':"an item with name '{}' already exist." .format(nam)}
        data = request.get_json()
        item = {'name':nam, …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restful flask-jwt python-3.7

2
推荐指数
1
解决办法
1178
查看次数