不能在Flask websocket中使用Jsonify

时间:2014-01-08 12:47:58

标签: python python-3.x websocket flask

Jsonify似乎不适用于应用程序上下文,是否有解决方法?

我正在用websockets替换一些ajax请求,因为它是性能和网络问题所必需的。我在我的环境中安装了带有pip的Flask-WebSocket。现在我收到一个错误:

RuntimeError: working outside of application context

我申请的骨架如下:

app/
├── forms
├── static
│   ├── css
│   ├── img
│   │   └── DefaultIcon
│   │       ├── eps
│   │       └── png
│   └── js
├── templates
├── ups
└── views

websockets python文件位于views / ajax.py:

# -*- coding: utf-8 -*-

# OS Imports
import time

# Flask Imports
from flask import jsonify
from .. import sockets
from app.functions import get_cpu_load, get_disk_usage, get_vmem

# Local Imports
from app import app
from app.views.constants import info, globalsettings

@sockets.route('/_system')
def _system(ws):
    """
    Returns the system informations, JSON Format
    CPU, RAM, and Disk Usage
    """
    while True:
        message = ws.receive()
        if message == "update":
            cpu = round(get_cpu_load())
            ram = round(get_vmem())
            disk = round(get_disk_usage())
            ws.send(jsonify(cpu=cpu, ram=ram, disk=disk)

我使用此命令启动我的应用程序:

gunicorn -k flask_sockets.worker app:app

以下是app /文件夹中的__init__.py

# -*- coding: utf-8 -*-
from flask import Flask
from flask_sockets import Sockets

app = Flask(__name__)
sockets = Sockets(app)
app.config.from_object('config')
from app import views as application

为什么jsonify没有工作,我可以使用什么呢?

1 个答案:

答案 0 :(得分:8)

在烧瓶中

jsonify是一个响应,它以json格式发送带有数据的响应。

你可以这样做:

import json

然后将ws.send更改为:

ws.send(json.dumps(dict(cpu=cpu, ram=ram, disk=disk)))