在django放这个班的地方?

时间:2016-07-19 06:09:03

标签: python django

我有一个数据输入类,需要用户输入很多。我用它来半自动化将数据放入db中的过程。

我的直觉是将它放在我的模型类中,并在其上编写测试,但这将是一项疯狂的工作,我有很多raw_input()函数和逻辑循环,我不会#39 ; t知道如何测试或如何处理。

我应该将此模块分开,还是尝试将其包含在模型类中?

def define(self, word=False, word_pk=False):
    '''Defining a word, there may be language specific elements to edit in here'''
    try:
        if word_pk:
            word = Word.objects.get(id=word_pk)
        else:
            word = Word.objects.get(language__name=self.language_ISO, name=word)
    except:
        return "Word lookup failed for word=%s word_pk=%s\n" % (word, word_pk)

    print "\n\tThe Word is: '%s'...\n" % (word) 
    wiktionary_list = word.wiktionary_lookup(self.wiktionary_prefix, self.driver)
    wn_tuple = word.wn_lookup()
    while choice("Would you like to add a/another definition for '%s'?: " % word):
        #Ask the user if they want to use the wn output for definitions, make them select which ones
        if choice("Would you like to choose a wordnet definition?: "):
            chosen_defs = ask_input("Which ones? (choose all that apply with a space between numbers): ")
            chosen_defs = [int(i) for i in (chosen_defs.split())]
            #Wornet only gives part of speech and definition information so I need to split that here. 
            for i in chosen_defs:
                #Print_n_save function will return False if it exits successfully, so there is an option to repeat this loop if the user makes a mistake somewhere 
                repeat = True
                while repeat:
                    tup = wn_tuple[i]
                    print "\n(%s) - %s\n" % (tup[0], tup[1])
                    audio_tup = self.add_audio(word)
                    picture_tup = self.add_picture(word)

                    new_definition = Definition()
                    new_definition.word=word
                    new_definition.part_speech= tup[0]
                    new_definition.definition=tup[1]
                    new_definition.def_source="Wordnet"
                    new_definition.add_pronunciation()
                    new_definition.word_audio=audio_tup[0]
                    new_definition.audio_source=audio_tup[1]
                    new_definition.picture=picture_tup[0]
                    new_definition.pic_source=picture_tup[1]

                    repeat = self.print_n_save(new_definition)

        elif choice("Would you like to choose a wiktionary definition?: "):

            choose_defs = ask_input("Which ones would you like to choose? (Numbers separated by spaces): ")
            chosen_defs = [int(i) for i in choose_defs.split()]

            for i in chosen_defs:
                #Print_n_save function will return False if it exits successfully, so there is an option to repeat this loop if the user makes a mistake somewhere
                repeat = True
                while repeat:
                    print "\n%s\n" % (wiktionary_list[i])
                    audio_tup = self.add_audio(word)
                    picture_tup = self.add_picture(word)

                    new_definition = Definition()
                    new_definition.word=word
                    new_definition.get_pos()
                    new_definition.definition=wiktionary_list[i]
                    new_definition.def_source="Wiktionary"
                    new_definition.add_pronunciation()
                    new_definition.word_audio=audio_tup[0]
                    new_definition.audio_source=audio_tup[1]
                    new_definition.picture=picture_tup[0]
                    new_definition.pic_source=picture_tup[1]

                    repeat = self.print_n_save(new_definition)

        else:
            #Print_n_save function will return False if it exits successfully, so there is an option to repeat this loop if the user makes a mistake somewhere
            repeat = True
            while repeat:
                #Asking for definition, inputting raw from some internet source
                definition = ask_input("What is the definition?: ")
                definition_source = ask_input("What is the source of the definition?: ")
                audio_tup = self.add_audio(word)
                picture_tup = self.add_picture(word)

                new_definition = Definition()
                new_definition.word=word
                new_definition.get_pos()
                new_definition.definition=definition
                new_definition.def_source=definition_source
                new_definition.add_pronunciation()
                new_definition.word_audio=audio_tup[0]
                new_definition.audio_source=audio_tup[1]
                new_definition.picture=picture_tup[0]
                new_definition.pic_source=picture_tup[1]

                repeat = self.print_n_save(new_definition)

2 个答案:

答案 0 :(得分:2)

不要试图将原始python函数强制放入单个框中。

你应该做什么( 很长时间之前),将它分成单独的函数,这样就可以更容易地测试和解决问题。< / p>

由于您要求用户输入,网站通过表单执行此操作,因此您将需要表单 - 或表单向导/设置/等等。

该表单至少需要一个视图来处理它,因此您可能还需要编写它,或使用通用视图。

谁知道,模型甚至可能需要在处理后做一些事情(我没有真正阅读过代码)

答案 1 :(得分:2)

我会把它放进management/commands。只需将您的函数包装到BaseCommand类中,就可以了。这是how to make testing