标签: flask-restful

如何将用户名:密码发送到unittest的app.get()请求?

这是我在Flask-RESTful中进行单元测试的一部分.

self.app = application.app.test_client()
rv = self.app.get('api/v1.0/{0}'.format(ios_sync_timestamp))
eq_(rv.status_code,200)
Run Code Online (Sandbox Code Playgroud)

在命令行中,我可以使用curl将用户名:密码发送到服务:

curl -d username:password http://localhost:5000/api/v1.0/1234567
Run Code Online (Sandbox Code Playgroud)

如何在单元测试的get()中实现相同的功能?

由于我的get/put/post需要身份验证,否则测试将失败.

python unit-testing basic-authentication flask flask-restful

10
推荐指数
1
解决办法
6782
查看次数

在模板中显示存储为二进制blob的图像

我有一个模型,图像存储为二进制blob.我想在模板中显示此图像以及有关该对象的其他数据.由于图像不是单独的文件,我无法弄清楚如何显示它.我已尝试设置标题,或使用send_filerender_template,但我要么不获取图像,要么获取图像而不是模板的其余部分.如何在模板中将二进制blob显示为图像?

class A(ndb.Model):
    id= ndb.IntegerProperty()
    x= ndb.StringProperty()
    y= ndb.StringProperty()
    image = ndb.BlobProperty()
Run Code Online (Sandbox Code Playgroud)

python google-app-engine jinja2 flask flask-restful

10
推荐指数
1
解决办法
5859
查看次数

flask-sqlalchemy:AttributeError:type object没有属性'query',在ipython中工作

我正在创建一个新的烧瓶应用程序使用flask-sqlalchemy和flask-restful with Python 3.4.我已经定义了我的用户模型:

from mytvpy import db
from sqlalchemy.ext.declarative import declared_attr


class BaseModel(db.Model):
    __abstract__ = True

    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.TIMESTAMP, server_default=db.func.now())
    last_updated = db.Column(db.TIMESTAMP, server_default=db.func.now(), onupdate=db.func.current_timestamp())

    @declared_attr
    def __tablename__(cls):
        return cls.__name__


class User(BaseModel):

    username = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    email = db.Column(db.String(255), unique=True)

    def __init__(self, username, password, email):
        super(User, self).__init__()
        self.username = username
        self.password = password
        self.email = email
Run Code Online (Sandbox Code Playgroud)

如果我尝试在ipython中查询,它可以工作:

In [15]: from mytvpy.models.base import User

In [16]: User.query.all()
Out[16]: [<mytvpy.models.base.User at 0x7fac65b1c6a0>]
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试从端点点击它:

class …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-restful

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

sqlalchemy的Flask应用程序上下文

我正在研究烧瓶中的小休息api.Api具有注册请求并生成单独线程以在后台运行的路由.这是代码:

def dostuff(scriptname):
    new_thread = threading.Thread(target=executescript,args=(scriptname,))
    new_thread.start()
Run Code Online (Sandbox Code Playgroud)

线程启动但是当我尝试从executioncript函数插入db时它会出错.它抱怨db对象没有在应用程序中注册.

我正在动态创建我的应用程序(使用api作为Blueprint).

这是应用程序的结构

-run.py ## runner script
-config
   -development.py
   -prod.py
-app
  -__init__.py
  - auth.py
  - api_v1
     - __init__.py
     - routes.py
     - models.py
Run Code Online (Sandbox Code Playgroud)

这是我的跑步者脚本run.py:

from app import create_app, db

if __name__ == '__main__':
    app = create_app(os.environ.get('FLASK_CONFIG', 'development'))
    with app.app_context():
        db.create_all()
    app.run()
Run Code Online (Sandbox Code Playgroud)

以下是app/__init__.py创建应用程序的代码:

from flask import Flask, jsonify, g
from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app(config_name):
    """Create an application instance."""
    app = Flask(__name__)

    # apply configuration
    cfg = os.path.join(os.getcwd(), …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-restful

10
推荐指数
1
解决办法
4477
查看次数

在flask-restful add_resource()中接受多个参数

我想在Flask REST API中处理GET请求.请求将包含多个参数,您可以期望这是一个典型的GET请求: https:// localhost:5000/item/analysis = true&class = A&class = B

因此,GET请求包括:

  1. 一个叫做"分析"的布尔变量
  2. 一个名为"类"的列表

我想在add_resource()中接受这个,如下所示:

add_resource(Item, '/item/<whatever-comes-here>')

我对如何在add_resource()中接受多个参数(其中一个是列表)一无所知.我如何在add_resource()函数中接受它们,如何在get()函数中解压缩它们?

我花时间对此进行逆向工程,但我还没有成功.难道我做错了什么?

(我知道可能有更好的方法来发送带有REST API GET请求的列表,所以我很感激任何有关它的指示!)真诚地感谢提前!

python flask flask-restful

10
推荐指数
1
解决办法
7332
查看次数

是否可以将 Flask RestX 与 Flask 的 2.0+ 异步等待一起使用?

Flask 2.0 中介绍了 async/await 的用法。(https://flask.palletsprojects.com/en/2.0.x/async-await/

我正在使用 Flask-RestX,那么是否可以在 RestX 请求处理程序中使用async/ ?await

就像是:

@api.route('/try-async')
class MyResource(Resource):
    @api.expect(some_schema)
    async def get(self):
        result = await async_function()
        return result
Run Code Online (Sandbox Code Playgroud)

不起作用,当我尝试到达此端点时,出现错误:

TypeError: Object of type coroutine is not JSON serializable

有这方面的信息吗?

封装版本:

flask==2.0.1
flask-restx==0.4.0
Run Code Online (Sandbox Code Playgroud)

我也flask[async]按照文档的建议安装了。

python flask flask-restful python-asyncio

10
推荐指数
1
解决办法
1387
查看次数

由于Flask-WTF的CSRF保护,Flask-Restful POST失败

我正在使用普通烧瓶网+烧瓶 - 安静.所以我需要针对Web的CSRF保护,而不是REST.

那一刻我让CsrfProtect(app)flask-wtf,我所有的职位单元测试flask-restful返回400.

有没有办法为REST服务禁用CSRF保护,因为它们来自移动手机,无论如何都没有会话处理,因此CSRF没有多大意义.

这是我测试它的方式:

rv = self.client.post('api/v1.0/verify-email', environ_base={'REMOTE_ADDR': '127.0.0.1'}, headers={'Content-Type':'application/json'}, data=json.dumps(data))
self.check_content_type(rv.headers)
eq_(rv.status_code, 412)
Run Code Online (Sandbox Code Playgroud)

python rest flask flask-wtforms flask-restful

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

使用Flask-Restful引发自定义错误

全部,我正在尝试使用Flask-Restful,按照文档提出自定义错误.出于测试目的,我已经在文档中定义并注册了错误词典中的链接:api = flask_restful.Api(app, errors=errors).

但是,当我想abort(409)在资源模块中使用(例如)引发自定义错误时,firebug会报告:

{"message":"冲突","状态":409}

这似乎是标准的409错误,没有定制; 从文档中,我希望自定义错误消息 - "具有该用户名的用户已存在".

我想我错过了引发错误本身的一些事情.我应该以任何方式使用字典密钥吗?尽管我尝试过,但检查Flask-Restful源代码并没有帮助.

flask flask-restful

9
推荐指数
1
解决办法
6994
查看次数

python-requests发布了unicode文件名

我已经在SO上阅读了几个相关的问题,但没有设法找到一个有效的解决方案.

我有一个带有这个简化代码的Flask服务器:

app = Flask(__name__)
api = Api(app)


class SendMailAPI(Resource):
    def post(self):
        print request.files
        return Response(status=200)

api.add_resource(SendMailAPI, '/')

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

然后在客户端:

# coding:utf-8

import requests

eng_file_name = 'a.txt'
heb_file_name = u'?.txt'

requests.post('http://localhost:5000/', files={'file0': open(eng_file_name, 'rb')})
requests.post('http://localhost:5000/', files={'file0': open(heb_file_name, 'rb')})
Run Code Online (Sandbox Code Playgroud)

当发送带有非utf-8文件名的第一个请求时,服务器接收带有文件的请求并打印ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)]),但是当发送带有utf-8文件名的文件时,服务器似乎在打印时没有收到该文件ImmutableMultiDict([]).

我正在使用请求,2.3.0但问题并没有解决最新版本(2.8.1),Flask版本0.10.1和Flask-RESTful版本0.3.4.

我已经完成了一些requests代码挖掘并且请求似乎已发送正常(即使用该文件),并且我在发送之前打印了请求,并且看到文件名确实编码为RFC2231:

--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt
Run Code Online (Sandbox Code Playgroud)

总结一下,我不完全确定问题是否在于requests没有正确地将文件附加到请求,或者是否Flask存在拾取具有根据RFC2231编码的文件名的文件的问题.

更新:requestsGitHub中遇到过这个问题:https://github.com/kennethreitz/requests/issues/2505

python unicode flask python-requests flask-restful

9
推荐指数
1
解决办法
2119
查看次数

Python - 如何从同一客户机运行多个烧瓶应用程序

我有一个烧瓶应用程序脚本,如下所示:

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)

python flask python-3.x flask-restful

9
推荐指数
1
解决办法
8417
查看次数