不能在Flask websocket中使用Jsonify

Dep*_*ado 5 python websocket flask python-3.x

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

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

RuntimeError: working outside of application context
Run Code Online (Sandbox Code Playgroud)

我申请的骨架如下:

app/
??? forms
??? static
?   ??? css
?   ??? img
?   ?   ??? DefaultIcon
?   ?       ??? eps
?   ?       ??? png
?   ??? js
??? templates
??? ups
??? views
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

gunicorn -k flask_sockets.worker app:app
Run Code Online (Sandbox Code Playgroud)

这是我__init__.py的app /文件夹:

# -*- 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
Run Code Online (Sandbox Code Playgroud)

为什么不jsonify工作,我可以使用什么?

Sye*_*b M 9

在烧瓶中

jsonify是一个响应,它以json格式发送数据响应.

你可以这样做:

import json
Run Code Online (Sandbox Code Playgroud)

然后将ws.send更改为:

ws.send(json.dumps(dict(cpu=cpu, ram=ram, disk=disk)))
Run Code Online (Sandbox Code Playgroud)