我正在使用 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) 我有多个具有相同 URL 根的路由。例子:
我可以将abc/def定义为 URL 根吗?(类似于使用 Spring 或 Apache CXF 在 Java 中完成的操作)
谢谢
我正在尝试集成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) 我试图使用烧瓶测试客户端在我的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) 我有一个 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) 我有一个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)
无济于事。
我正在使用Python 3.6在生产模式下的服务器上运行Flask Restful,并命中了需要jwt auth的端点,但是我不断收到“ NoAuthorizationError Missing Authoring Header”错误。
奇怪的是,使用Postman将相同的请求发送到我的Mac上完全相同的Flask应用的本地版本,并且工作正常,没有任何错误。该问题仅在实时服务器上发生,并且所有pip包的版本也完全相同。
更新
我在实时服务器上使用Gunicorn,当我停止应用程序并正常运行时python run.py,错误消失并返回正确的响应。
我为jwt错误设置了以下处理程序,同样,它在我的应用程序的本地版本上被捕获:
出于测试目的,我没有在请求本身中发送令牌。即使我这样做,错误仍然存在。
这是我的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) 我在我的应用程序中使用 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)
我想在获取和发布之前进行方法调用,这样我的代码就不会重复。
我有什么办法可以做到这一点吗?
我正在尝试使用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) 应用程序
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) flask-restful ×10
python ×9
flask ×8
python-3.7 ×2
api ×1
curl ×1
flask-jwt ×1
gunicorn ×1
http-headers ×1
jwt ×1
postman ×1
python-2.7 ×1
python-3.x ×1
query-string ×1
tornado ×1
utf-8 ×1