首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未将Django数据插入postgresql

未将Django数据插入postgresql
EN

Stack Overflow用户
提问于 2020-09-03 13:07:15
回答 1查看 67关注 0票数 0

此代码使用flask获取系统性能读数,并使用每秒刷新的Chart将其绘制在Django网页上。我正在尝试将数据存储到postgresql中,但它不起作用。没有数据插入到在数据库中创建的表中。

views.py

代码语言:javascript
复制
from django.shortcuts import render
import requests
from django.http import HttpResponse, request
from .models import Usage


def monitor(request):
    url = "http://127.0.0.1:5000/stats"
    data = requests.get(url)
    print(data.text)
    data2 = data.text
    return render(request, "home.html", {'alldata': data2})


def cpu_monitor(request):
    url = "http://127.0.0.1:5000/cpu"
    cpu_data = requests.get(url)
    cpu_data2 = cpu_data.json()

    for key in cpu_data2:
        cpu = cpu_data2['CPU']
        time = cpu_data2['Time']
        print(cpu)
        print(time)
        val = key

    return render(request, "chart.html", {'data': val})


def cp(request):
    url = "http://127.0.0.1:5000/cpu"
    cpu_data = requests.get(url)
    cpu_data2 = cpu_data.json()

    for key in cpu_data2:
        cpu = cpu_data2['CPU']
        time = cpu_data2['Time']
        print(cpu)
        print(time)
        val = [cpu]

    return HttpResponse(val)


def mm(request):
    url = "http://127.0.0.1:5000/memory"
    memory_data = requests.get(url)
    memory_data2 = memory_data.json()

    for key in memory_data2:
        memory = memory_data2['Memory Percentage']
        time = memory_data2['Time']
        print(memory)
        print(time)
        mem = [memory]

    return HttpResponse(mem)


def dk(request):
    url = "http://127.0.0.1:5000/disk"
    disk_data = requests.get(url)
    disk_data2 = disk_data.json()

    for key in disk_data2:
        disk = disk_data2['Used Partition']
        time = disk_data2['Time']
        print(disk)
        print(time)
        dsk = [disk]

    return HttpResponse(dsk)


def dkf(request):
    url = "http://127.0.0.1:5000/diskfree"
    free_disk_data = requests.get(url)
    free_disk_data2 = free_disk_data.json()

    for key in free_disk_data2:
        free_disk = free_disk_data2['Free Partition']
        time = free_disk_data2['Time']
        print(free_disk)
        print(time)
        dskf = [free_disk]

    return HttpResponse(dskf)


def ib(request):
    url = "http://127.0.0.1:5000/inb"
    ib_data = requests.get(url)
    ib_data2 = ib_data.json()

    for key in ib_data2:
        ibn = ib_data2['Received Bytes']
        time = ib_data2['Time']
        print(ibn)
        print(time)
        ibd = [ibn]

    return HttpResponse(ibd)


def ob(request):
    url = "http://127.0.0.1:5000/oub"
    ob_data = requests.get(url)
    ob_data2 = ob_data.json()

    for key in ob_data2:
        obn = ob_data2['Received Bytes']
        time = ob_data2['Time']
        print(obn)
        print(time)
        obd = [obn]

    return HttpResponse(obd)


def insert():
    sysMon = Usage
    sysMon.cpu = cp(request)
    sysMon.memory = mm(request)
    sysMon.freeDisk = dk(request)
    sysMon.usedDisk = dkf(request)
    sysMon.inbound = ib(request)
    sysMon.outbound = ob(request)
    sysMon.save()

models.py

代码语言:javascript
复制
from django.db import models


class Usage(models.Model):

    cpu = models.CharField(max_length=200, null=True)
    memory = models.CharField(max_length=200, null=True)
    freeDisk = models.CharField(max_length=200, null=True)
    usedDisk = models.CharField(max_length=200, null=True)
    inbound = models.CharField(max_length=200, null=True)
    outbound = models.CharField(max_length=200, null=True)

任何帮助都将受到高度的感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-04 08:55:55

弄清楚每个函数的数据类型。视图函数返回HttpResponse类型的数据。您应该更改数据函数,以便每个函数都返回所需类型的数据,而不是返回HttpResponse。例如,mm函数应该返回内存数据,它在您的模型中是一个CharField (它是文本,限制为200个字符)。确保它返回文本,而不是Python列表,不是json,也不是HttpResponse。

然后调用一个视图函数,该函数将(从所有数据函数中)收集并保存数据,然后返回其HttpResponse。例如:

代码语言:javascript
复制
#Data function. Returns the disk free data itself, not a HttpResponse
def dkf():
    url = "http://127.0.0.1:5000/diskfree"
    free_disk_data = requests.get(url).json()
    #other disk processing to be written by you. dskf is a variable with Character (text) data.  How to get it is left to you
    return dskf

#Data function. Returns the memory data itself, not a HttpResponse
def mm():
    url = "http://127.0.0.1:5000/memory"
    memory_data = requests.get(url).json()
    #other memory processing to be written by you.  mem is a variable with Character (text) data.  How to get it is left to you
    return mem


#View function.  Call in the browser as /insert
def insert(request):
    sysMon = Usage
    sysMon.memory = mm()     #calls mm function which returns memory data
    sysMon.freeDisk = dkf()  #calls dkf function which returns disk free data
    #call the other ones here
    sysMon.save()

    return HttpResponse("Usage data saved")

还要注意,对于数据收集和保存到数据库,您不必使用视图(这需要浏览器和人工来加载页面)。您可以创建一个Python脚本来加载Django模块,并从后端执行数据收集,例如定期从cron (在Linux上)或Windows Task Scheduler调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63717187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档