首页 > 解决方案 > Python3中MVC设计模式的实现

问题描述

我正在尝试使用 Python3.8 实现 MVC。我已使用此https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_model_view_controller.htm Python2 的示例进行练习。但是,我收到以下错误:

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我的代码如下:model.py

import json

class Person:
    def __init__(self, first = None, last = None):
        self.first = first
        self.last = last

    def name(self):
        return ('%s %s' %(self.first, self.last))

    @classmethod
    def getAll(self):
        database = open('data.txt', 'r')
        result = []
        jsonList = json.loads(database.read())
        for item in jsonList:
            item = json.loads(item)
            person = Person(item['first'], item['last'])
            result.append(person)
        return result

视图.py

from model import Person
def showAllView(list):
    print ('In our db we have %i users. Here they are:' % len(list))
    for item in list:
        print (item.name())

def startView():
    print ('MVC - the simplest example')
    print ('Do you want to see everyone in my db?[y/n]')

def endView():
    print ('Goodbye!')

控制器.py

from model import Person
import view

def showAll():
    #gets list of all Person objects
    people_in_db = Person.getAll()
    return view.showAllView(people_in_db)

def start():
    view.startView()
    answer = input('Enter y or n')
    if answer == 'y':
        return showAll()
    else:
        return view.endView()

if __name__ == "__main__":
    start()

数据.txt

[{
    "first": "abc",
    "last": "xyz"
}]

请指导我并帮助我找到错误。提前致谢。

标签: python-3.xmodel-view-controllerdesign-patternspython-3.8

解决方案


我自己解决了这个问题。主要问题是在 model.py 中两次加载 JSON 元素,如下所示:

        jsonList = json.loads(database.read())
        for item in jsonList:
            item = json.loads(item)

现在我已经通过删除来解决它item = json.loads(item)


推荐阅读