PUT и POST только определенных полей без получения ошибки Serializer в django

Здесь я хотел разместить мои данные с сервера thingspeak в модели Django и я импортировал их, вызывая функции из файла DjangoApp.Thingspeak. Но, в этом коде GET и DELETE метод работает отлично, но, POST и PUT генерирует исключение ошибки, однако, это также занимает некоторое время для POST и PUT метода тоже. Но как только я повторно запускаю свой сервер. Он сразу же ловит значение. Может ли кто-нибудь помочь мне отладить это...

Вот мой код для views.py

import json
from django.views.decorators.csrf import csrf_exempt
from django.http.response import JsonResponse
from rest_framework.parsers import JSONParser
from DjangoApp.serializers import PatientSerializer
from DjangoApp.models import Patient
from DjangoApp.Thingspeak import tempValue,humValue,bodyTempValue
# Create your views here.


@csrf_exempt

def PatientAPI(request,id=0):
    if request.method == 'GET':
        patients = Patient.objects.all()
        patients_serializer = PatientSerializer(patients,many=True)
        return JsonResponse(patients_serializer.data,safe=False)
    elif request.method == 'POST':
        patient_data = JSONParser().parse(request)
        patient = Patient.objects.create(PatientId=patient_data['PatientId'],PatientName=patient_data['PatientName'],RoomTemp=tempValue(),Humidity=humValue(),BodyTemp=bodyTempValue())
        patient_data = json.parse(patient)
        patients_serializer = PatientSerializer(data=patient_data)
        if patients_serializer.is_valid():
            patients_serializer.save()
            return JsonResponse("Added Successfully", safe=False)
        return JsonResponse("Failed to add", safe=False)
    elif request.method == 'PUT':
        patient_data = JSONParser().parse(request)
        if patients_Serializer.is_valid():
            
patient=Patient.objects.filter(PatientId=patient_data['PatientId']).update(RoomTemp=tempValue(),Humidity=humValue(),BodyTemp=bodyTempValue())
            patient = json.parse(patient)
            patients_Serializer = PatientSerializer(patient, data=patient_data)
            return JsonResponse("Updated Successfully", safe=False)
        return JsonResponse("Failed to Update")
    elif request.method == 'DELETE':
        patient = Patient.objects.get(PatientId=id)
        patient.delete()
        return JsonResponse("Deleted Successfully", safe=False)

и код Thingspeak.py

import re
import urllib.request

with urllib.request.urlopen("https://api.thingspeak.com/channels/1633090/feeds/last.json?api_key=C15DPT91QNH37GY6&status=true") as url:

    s = repr(url.read())


    def tempValue():
        temp = re.search('field1":"(.+?)",',s)
        if temp:
            return(temp.group(1))
    
    def humValue():
       hum = re.search('field2":"(.+?)",',s)
       if hum:
        return(hum.group(1))   
    
    def bodyTempValue():
       bodyTemp = re.search('field3":"(.+?)",',s)
       if bodyTemp:
         return(bodyTemp.group(1))   
 

Пожалуйста, не разбирайте JSON с помощью регексов: JSON - это рекурсивный язык, который не может быть разобран (правильно) с помощью регулярного выражения, поскольку JSON не является регулярным языком.

Но даже если вы разбираете только подчасти регексов, которые могут быть регулярным языком, язык намного сложнее, чем кажется на первый взгляд: существуют правила экранирования строк и т.д., поэтому даже если вам удастся захватить данные через регекс, будет сложно правильно их обработать.

Вы можете интерпретировать его как объект JSON, а затем получить доступ к значениям, связанным с ключом:

import requests

url = 'https://api.thingspeak.com/channels/1633090/feeds/last.json?api_key=C15DPT91QNH37GY6&status=true'

response = requests.get(url).json()
temp_value = response['field1']
hum_value = response['field2']
body_temp_value = response['field3']
Вернуться на верх