无法在Flask WebSocket中使用Jsonify

5

Jsonify似乎无法在应用程序上下文之外工作,有什么解决方法吗?

我正在使用websocket替换一些ajax请求,因为需要提高性能和解决网络问题。我在我的env中使用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个回答

9

在Flask中,jsonify是一种以JSON格式发送响应数据的方式。

您可以像这样完成:

import json

然后将ws.send更改为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接