我正在使用flask-restful进行一项宁静的服务,我想在我的项目中利用工厂模式和蓝图.在app/__init__.py我有一个create_app函数来创建一个烧瓶应用程序,并返回给外线来电,所以调用者可以启动应用程序.
def create_app():
app = Flask(__name__)
app.config.from_object('app.appconfig.DevelopmentConfig')
from app.resource import resource
app.register_blueprint(v1, url_prefix='/api')
print app.url_map
return app
Run Code Online (Sandbox Code Playgroud)
在该函数内部,我打算使用前缀url注册指向实现包的蓝图.
在app/resource/__init__.py下面是代码
from flask import current_app, Blueprint, render_template
from flask.ext import restful
resource = Blueprint('resource', __name__, url_prefix='/api')
@resource.route('/')
def index():
api = restful.Api(current_app)
from resource.HelloWorld import HelloWorld
api.add_resource(HelloWorld, '/hello')
Run Code Online (Sandbox Code Playgroud)
我的目标是我可以在url访问HelloWorld休息服务/api/hello,但我知道上面的代码有些错误@resource.route('/') ....我得到了一些错误,如AssertionError: A setup function was called after the first request was handled. This usually indicates a bug in the app ...在 …
我希望将对象实例作为参数传递给Flask-RESTfull资源.
这是我的设置:
# in main.py
from flask import Flask
from flask.ext.restful import Api
from bar import Bar
from foo import views
app = Flask(__name__)
api = Api(app)
my_bar = Bar()
api.add_resource(views.ApiPage, "/api/my/end/point/")
Run Code Online (Sandbox Code Playgroud)
然后在views.py中我将资源设置如下:
# In views.py
from flask.ext.restful import Resource
class ApiPage(Resource):
def get(self):
serialized = str(my_bar)
return serialized
Run Code Online (Sandbox Code Playgroud)
所以我遇到的问题是我需要将我的实例传递给Bar()api资源.有没有办法通过这样的add_resource方法传递它api.add_resource(views.ApiPage, "/api/my/end/point/", instance=bar)?
我在python中编写了一个简单的REST-ful Web服务器flask,本教程中包含以下步骤; 但是我在调用POST请求时遇到了问题.代码是:
@app.route('/todo/api/v1.0/tasks', methods=['POST'])
def create_task():
if not request.json or not 'title' in request.json:
abort(400)
task = {
'id': tasks[-1]['id'] + 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
Run Code Online (Sandbox Code Playgroud)
我POST使用curl上述页面中的示例发送请求:
curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://127.0.0.1:5000/todo/api/v1.0/tasks
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:
HTTP/1.0 400 BAD REQUEST
Content-Type: text/html
Content-Length: 187
Server: Werkzeug/0.11.10 Python/2.7.9
Date: Mon, 30 May 2016 09:05:52 GMT
<!DOCTYPE HTML …Run Code Online (Sandbox Code Playgroud) 我有Python Flask Restful API的问题,数据转到Elasticsearch,当我用Postman发布新数据时,问题是:
TypeError:"Response"类型的对象不是JSON可序列化的
你能帮助我吗?
模型:
from marshmallow import Schema, fields, validate
class Person(object):
def __init__(self,tcno=None,firstname=None,lastname=None,email=None,birthday=None,country=None,gender=None):
self.__tcno = tcno
self.__firstname = firstname
self.__lastname = lastname
self.__email = email
self.__birthday = birthday
self.__country = country
self.__gender = gender
def __repr__(self):
return '<Person(firstname={self.__firstname!r})>'.format(self=self)
class PersonSchema(Schema):
tcno = fields.Str(required=True,validate=[validate.Length(min=11, max=11)])
firstname = fields.Str(required=True)
lastname = fields.Str(required=True)
email = fields.Email(required=True,validate=validate.Email(error="Not a valid email"))
birthday = fields.Date(required=True)
country = fields.Str()
gender = fields.Str()
Run Code Online (Sandbox Code Playgroud)
视图:
from flask import Response, json, request, jsonify, Flask
import requests …Run Code Online (Sandbox Code Playgroud) 我有一个烧瓶应用程序脚本,如下所示:
from flask import Flask
app = Flask(__name__)
@app.route("/<string:job_id>")
def main(job_id):
return "Welcome!. This is Flask Test Part 1"
if __name__ == "__main__":
job_id = 1234
app.run(host= '0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
我有另一个烧瓶应用程序脚本如下:
from flask import Flask
app = Flask(__name__)
@app.route("/<string:ID>")
def main(ID):
return "Welcome!. This is Flask Test Part 2"
if __name__ == "__main__":
ID = 5678
app.run(host= '0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
两个脚本之间的唯一区别是参数名称及其值.现在我的问题是假设我正在执行第一个脚本.所以我会得到类似的东西
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中执行http://127.0.0.1:5000/1234时,我能够看到
"欢迎!这是Flask Test Part 1"
现在这个服务器处于活动状态,我正在执行第二个脚本.所以我再次得到
* Running on http://0.0.0.0:5000/ (Press CTRL+C to …Run Code Online (Sandbox Code Playgroud) 我无法理解蓝图和名称空间在Web应用程序中的作用是什么。我阅读了文档,但无法完全弄清楚。
如果您给出每种情况的示例简单说明,那对我真的很有帮助。
谢谢!
@app.errorhandler(CustomException)
def handle_custom_exception(error):
return redirect('redirect-path', code=301)
Run Code Online (Sandbox Code Playgroud)
当这正常工作DEBUG是True,它隐式地设置PROPAGATE_EXCEPTIONS到True为好.如果DEBUG是False,虽然,PROPAGATE_EXCEPTIONS默认为False和瓶返回500用于抛出的所有错误,忽视了注册errorhandler秒.设置PROPAGATE_EXCEPTIONS以True在这种情况下更正错误处理.
我想知道的是:
PROPAGATE_EXCEPTIONS在生产中启用是否安全?有什么副作用我应该关注吗?
为什么Flask在调试与非调试中具有不同的默认值?
我已经制作了一个简单的Web应用程序,它将在表中显示一些数据,该数据将每周更新一次。
此更新是在后端使用一些python代码完成的,该代码在将数据放入SQLite数据库之前会对其进行抓取和更改。
经过阅读后,我了解到要将数据传送到我的Web应用程序,我应该使用Flask创建一个API,该API可以将该数据以JSON形式传送到我的Web应用程序中的JS,然后可以使用该数据来填充表。但是,我应该使用用户名和pw保护我的API。但是,由于它是从API检索数据的JS前端,因此实际上没有意义,因为用户名和pw必须硬编码到JS中,然后用户才能读取。(我认为)
我应该向所有人公开我的API,还是不是将SQLite数据用作Webapp后端的方法?我可以将API仅保留为GET。
我正在遵循这个教程,并且进展顺利。然后他介绍了reqparse,我也跟着介绍。我尝试测试我的代码,但收到此错误
{'message': "Did not attempt to load JSON data because the request Content-Type was not 'application/json'."}
我不知道我是否遗漏了一些非常明显的东西,但我很确定我准确地复制了他的代码。这是代码:
main.py
from flask import Flask, request
from flask_restful import Api, Resource, reqparse
app = Flask(__name__)
api = Api(app)
#basic get and post
names = {"sai": {"age": 19, "gender": "male"},
"bill": {"age": 23, "gender": "male"}}
class HelloWorld(Resource):
def get(self, name, numb):
return names[name]
def post(self):
return {"data": "Posted"}
api.add_resource(HelloWorld, "/helloworld/<string:name>/<int:numb>")
# getting larger data
pictures = {}
class picture(Resource):
def …Run Code Online (Sandbox Code Playgroud) flask-restful ×10
flask ×9
python ×8
rest ×4
blueprint ×1
javascript ×1
json ×1
oauth ×1
oauth-2.0 ×1
python-3.x ×1
webserver ×1