json.dumps дает мне AttributeError: у объекта 'str' нет атрибута 'get' - PullRequest
0 голосов
/ 16 ноября 2018

Я получаю это сообщение об ошибке:

AttributeError: 'str' object has no attribute 'get'

Я знаю, что именно мой json.dumps вызывает ошибку.Вот мой код:

from django.http import HttpResponse
import os
import datetime
import json

SUNDAY = 6
SATURDAY = 5

weekdayBookingTimes = ["10:00","10:30","11:00","11:30","12:00", "12:30", "13:00","13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00"]

def sendBookingForDate(request):
    dateToFetchBookings = request.GET.get('date','')
    #Check if date is SUNDAY
    if checkDayOfWeek(dateToFetchBookings) == SUNDAY:
        pass

    #Check if day is Saturday
    elif checkDayOfWeek(dateToFetchBookings) == SATURDAY:
        if os.path.isfile((dateToFetchBookings+".txt")):
            pass #tbt
        else:
            createBookingsForSaturday(dateToFetchBookings)
    #Check if day is normal day
    else:
        if os.path.isfile(dateToFetchBookings+'.txt'):
            pass
        else:
            createBookingsForNormalDays(dateToFetchBookings)

    with open('/home/MScissorss/mysite/mysite/'+dateToFetchBookings+'.txt') as f:
        bookingsToSend = json.load(f)
    #return HttpResponse(dateToFetchBookings)
    return json.dumps(bookingsToSend)


def checkDayOfWeek(date):
    tempDateStorage = date.split('-')

    year = int(tempDateStorage[0])
    month = int(tempDateStorage[1])
    day = int(tempDateStorage[2])

    return datetime.datetime(year,month,day).weekday()


def createBookingsForSaturday(date):

    normalBookings = {}

    for x in range(0,11):
        normalBookings[x] = {"bookingTime":weekdayBookingTimes[x], "booked":"false", "bookieName":"", "bookieNumber":""}

    with open('/home/MScissorss/mysite/mysite/'+date+'.txt', "w") as file:
        file.write(json.dumps(normalBookings))

def createBookingsForNormalDays(date):
    #Test data

    bookings = {}

    for x in range(0,17):
        bookings[x] = {"bookingTime":weekdayBookingTimes[x], "booked":"false", "bookieName":"", "bookieNumber":""}

    with open('/home/MScissorss/mysite/mysite/'+date+'.txt', "w") as file:
        file.write(json.dumps(bookings))

Проверьте конец первой функции.Вот где я делаю возвращение.Я также подумал, что мой словарь был неправильно отформатирован, но я проверил, и он выглядит хорошо:

{
"0": {"bookingTime": "10:00", "booked": "false", "bookieName": "", "bookieNumber": ""},
"1": {"bookingTime": "10:30", "booked": "false", "bookieName": "", "bookieNumber": ""}, 
"2": {"bookingTime": "11:00", "booked": "false", "bookieName": "", "bookieNumber": ""}, 
"3": {"bookingTime": "11:30", "booked": "false", "bookieName": "", "bookieNumber": ""}
}

Возвращение, которое прокомментировано выше json.dumps, работает хорошо.Я не получаю ошибок при запуске этого.Любые идеи о том, в чем может быть проблема?

ОБНОВЛЕНИЕ - добавлен полный возврат

2018-11-15 23:53:05,718: Internal Server Error: /getBookings/
Traceback (most recent call last):
  File "/home/MScissorss/.virtualenvs/django2/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/MScissorss/.virtualenvs/django2/lib/python3.7/site-packages/django/utils/deprecation.py", line 93, in __call__
    response = self.process_response(request, response)
  File "/home/MScissorss/.virtualenvs/django2/lib/python3.7/site-packages/django/middleware/clickjacking.py", line 26, in process_response
    if response.get('X-Frame-Options') is not None:
AttributeError: 'str' object has no attribute 'get'

1 Ответ

0 голосов
/ 19 ноября 2018

Как отметил @Barmar в комментариях. Все, что мне нужно было сделать, это изменить свое возвращение с return json.dumps(bookingsToSend) на return JsonResponse(bookingsToSend)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...