标签: flask-extensions

如何在 python Flask 服务器中处理“413:请求实体太大”

我正在使用Flask-uploads将文件上传到我的 Flask 服务器。允许的最大大小是通过使用设置的flaskext.uploads.patch_request_class(app, 16 * 1024 * 1024)

我的客户端应用程序(一个单元测试)使用请求来发布一个很大的文件。

我可以看到我的服务器返回一个带有 status 的 HTTP 响应413: Request Entity Too Large。但是客户端在请求代码中引发异常

ConnectionError: HTTPConnectionPool(host='api.example.se', port=80): Max retries exceeded with url: /images (Caused by <class 'socket.error'>: [Errno 32] Broken pipe)
Run Code Online (Sandbox Code Playgroud)

我的猜测是服务器断开接收套接字并将响应发送回客户端。但是当客户端收到损坏的发送套接字时,它会引发异常并跳过响应。

问题:

  • 我对 Flask 上传和请求的猜测是否正确?
  • Flask-Uploads 和 request 处理 413 错误是否正确?
  • 当帖子很大时,我应该期望我的客户端代码返回一些 html 吗?

更新

这是一个重现我的问题的简单示例。

服务器.py

from flask import Flask, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 1024

@app.route('/post', methods=('POST',))
def view_post():
    return request.data

app.run(debug=True) …
Run Code Online (Sandbox Code Playgroud)

python sockets flask python-requests flask-extensions

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

将Web请求上下文透明地传递给芹菜任务

我有一个多租户设置,我想将某些客户特定信息,特别是request.host传递给芹菜任务,理想情况下,它应该在全局变量中可用.有没有办法以对应用程序透明的方式设置它?

任务将以相同的方式调用:

my_background_func.delay(foo, bar)
Run Code Online (Sandbox Code Playgroud)

任务的定义方式相同,只是它可以访问名为'request'的全局变量,该变量具有属性'host':

@celery_app.task
def my_background_func(foo, bar):
    print "running the task for host:" + request.host
Run Code Online (Sandbox Code Playgroud)

celery flask celery-task flask-extensions

6
推荐指数
1
解决办法
857
查看次数

Flask-Security中基于令牌的密码重置功能的说明

有人可以告诉我在flask-security的密码重置令牌中发生的事情吗?代码在github上:

https://github.com/mattupstate/flask-security/blob/develop/flask_security/recoverable.py

(目录中可能还有其他部分.)

我对正在发生的事情的理解:

  1. 在forgot_password()定义的路由中,用户提交表单以重置密码
  2. 生成"reset_password_token".这包括用户的ID +用户当前(存储加密)密码的md5()?
  3. 生成包含令牌的重置密码地址的链接.
  4. 此链接通过电子邮件发送到user.email提供的地址
  5. 当用户单击该链接时,它们将转到路径(在视图中定义),即reset_password(令牌).标记值是此路由的参数.
  6. 路由评估令牌是否有效且未过期.
  7. 如果是这样,此路由将呈现一个表单,要求输入新密码ResetPasswordForm().

那是对的吗?

也:

  1. 如果以上是正确的,那么令牌包含当前密码的新md5()是否安全?我知道逆转应该是独一无二且代价高昂的,但仍然如此?
  2. 存储的到期日期在哪里?

我最特别地对generate_password_reset函数感到困惑

data = [str(user.id), md5(user.password)] return _security.reset_serializer.dumps(data)

get_token_status(token, 'reset', 'RESET_PASSWORD') 功能里面 reset_password_token_status(token)

python token password-recovery flask flask-extensions

5
推荐指数
1
解决办法
2795
查看次数

什么`key_prefix`为flask-cache做什么?

比如这样,是否有必要使用key_prefix

@cache.cached(timeout=50, key_prefix='all_comments')
def get_all_comments():
    comments = do_serious_dbio()
    return [x.author for x in comments]

cached_comments = get_all_comments()
Run Code Online (Sandbox Code Playgroud)

文档中,它表示key_prefix默认值是request.path cache_key.:什么cache_key意思,我该如何使用它?怎么key_prefix办?

python caching flask flask-extensions

5
推荐指数
1
解决办法
1828
查看次数

具有“动态”模式的flask-sqlalchemy 跨数据库

我正在尝试使用 Flask 中的“应用程序工厂”模式,但我的模型似乎存在先有鸡还是先有蛋的问题。http://flask.pocoo.org/docs/patterns/appfactories/

我在 create_app 函数中导入我的视图,该函数导入我的模型。所以,当我的模型被定义时,我在应用程序中没有配置。这通常很好,使用绑定键,我可以设置模型以连接到不同的数据库。

但是,在这种情况下,我有两组模型,一组来自默认数据库,另一组来自另一个数据库连接 - 我想跨数据库连接。我知道通常的方法是添加

__table_args__ = { 'schema' : 'other_db_name' }
Run Code Online (Sandbox Code Playgroud)

到我的“其他数据库”模型。

但是...根据配置,'other_db_name' 可能会有所不同。

所以,现在我定义了需要来自配置的架构名称的模型,但没有来自配置的架构放入类定义中。我也可能只是在烧瓶中遗漏了一些我不知道的东西。

(旁注 - 一个简单的解决方法是将 Sqlalchemy 配置为始终在查询中输出架构名称,无论如何 - 但我似乎无法为此找到设置。)

如果有人对此有任何意见,我将非常感激。谢谢!

python sqlalchemy flask flask-sqlalchemy flask-extensions

5
推荐指数
1
解决办法
1084
查看次数

ImportError:尝试安装flask.ext.storage时无法导入名称'urlencode'

我正在使用Python 3.5.1/Window 8.1

>> pip install -e git://github.com/kvesteri/flask-storage.git#egg=Flask-Storage

这是结果:

Obtaining Flask-Storage from git+git://github.com/kvesteri/flask-storage.git#egg=Flask-Storage
  Updating c:\users\rodolfo\desktop\dumppython\flask\venv\src\flask-storage clone
Requirement already satisfied: Flask>=0.7 in c:\users\rodolfo\desktop\dumppython\flask\venv\lib\site-packages (from Flask-Storage)
Requirement already satisfied: boto>=2.5.2 in c:\users\rodolfo\desktop\dumppython\flask\venv\lib\site-packages (from Flask-Storage)
Collecting python-cloudfiles>=1.7.10 (from Flask-Storage)
  Using cached python-cloudfiles-1.7.11.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Rodolfo\AppData\Local\Temp\pip-build-t2cefnr2\python-cloudfiles\setup.py", line 6, in <module>
        from cloudfiles.consts import __version__
      File "C:\Users\Rodolfo\AppData\Local\Temp\pip-build-t2cefnr2\python-cloudfiles\cloudfiles\__init__.py", line 82, in <module>
        from cloudfiles.connection     import Connection, ConnectionPool
      File "C:\Users\Rodolfo\AppData\Local\Temp\pip-build-t2cefnr2\python-cloudfiles\cloudfiles\connection.py", …
Run Code Online (Sandbox Code Playgroud)

pip urlencode python-3.x flask-extensions

5
推荐指数
1
解决办法
5550
查看次数

python组/用户管理包

我正在寻找python用户/组管理包.(创建用户组并添加/删除该组的成员)我发现了flask_dashed.

     https://github.com/jeanphix/Flask-Dashed/ 
Run Code Online (Sandbox Code Playgroud)

它或多或少是我想要的.但它只支持一个用户添加/删除组.有没有人知道python-flask世界中可用的其他类似包装是什么?

python flask flask-extensions

4
推荐指数
1
解决办法
3485
查看次数

Flask-Admin ModelView没有正确处理外键(空白下拉列表)

烧瓶初学者在这里.我有一个使用以下型号的Flask应用程序:

class Question(db.Model):
    __tablename__ = 'questions'
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String, nullable=False)

class Answer(db.Model):
    __tablename__ = 'answers'
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String, nullable=False)

    question_id = db.Column(db.Integer, db.ForeignKey('questions.id'))
    question = db.relationship("Question", backref="answers")
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中使用以下行启动管理员:

admin = Admin(app)
admin.add_view(ModelView(Question, db.session))
admin.add_view(ModelView(Answer, db.session))
Run Code Online (Sandbox Code Playgroud)

现在在答案模型的创建表单中,我有一个问题的下拉框,但它没有正确填充:

使用Flask-Admin回答创建表单

快速入门指南不包括与外键关系模型,虽然有一些可能的实现方式的例子,它们不是在所有的记录.我很难弄清楚这里真正需要什么以及它是如何工作的.

flask flask-extensions flask-admin

4
推荐指数
1
解决办法
2466
查看次数

我的flask sqlite数据库中应该为图像使用什么数据类型?

所以我在Flask的sqlite数据库中有这个db.model。看起来像这样:

class Drink(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), index = True)
    kind = db.Column(db.String(64), index = True)
    image = db.Column(db.LargeBinary)

    def __init__(self, name, kind, image):
        self.name = name
        self.kind = kind
        self.image = image

    def __repr__(self):
        return '<Drink %r>' % self.name
Run Code Online (Sandbox Code Playgroud)

所以,这个问题是我有此列image,这是一张实际的图片,但是我不知道在烧瓶代码中使用哪种数据类型。

这是烧瓶代码: Flask

class DrinkAPI(Resource):
    def __init__(self):
        self.reqparse = reqparse.RequestParser()
        self.reqparse.add_argument('name', type = str, required = True, help = 'No name title provided', location = 'json')
        self.reqparse.add_argument('type', type = str, required = True, help='No type …
Run Code Online (Sandbox Code Playgroud)

python sqlite types flask-extensions

4
推荐指数
1
解决办法
5669
查看次数

为什么我使用Flask-Autodoc获得"没有名为'flask.ext'的模块"?

setup.py我需要Flask和Flask-Autodoc.我运行setup.py install并确认已安装两个发行版.

按照指示,我导入了Flask-Autodoc:

from flask.ext.autodoc import Autodoc
Run Code Online (Sandbox Code Playgroud)

但我明白了ModuleNotFoundError: No module named 'flask.ext'.我在Conda Python 3.6环境中,当我创建一个新的虚拟环境并重新安装包含依赖项的包时,会发生同样的事情.

我认为Flask扩展应该从flask.ext模块导入,但这似乎不起作用.我也试过如下:from flask.autodoc import Autodoc,from autodoc import Autodoc,from FlaskAutodoc import Autodoc.

python python-import flask flask-extensions

3
推荐指数
1
解决办法
2399
查看次数