【问题标题】:Test out small snippets of Django code测试一小段 Django 代码
【发布时间】:2010-11-25 18:20:35
【问题描述】:

我仍处于 Django 应用程序的开发阶段。甚至在编写我的views.py 之前,我都会对它们进行测试以查看我的模型是否正确定义。我通过调用

在终端中执行此操作

python manage.py shell

但是,我经常犯一些语法错误,提示我中止 shell ctrl-D 并重新输入所有内容。这个过程是永远的。如果我可以将所有这些写在某个文件中只是为了我的试验,如果一切顺利的话,将它复制到views.py 会更好。

这个过程是什么?是否像在我的应用程序目录中创建trial.py 一样简单。我不需要导入 Django 环境吗?最好的方法是什么?

【问题讨论】:

  • 你是在告诉我,在将代码实际放入应用程序之前,你会在 Python 解释器中编写每一段代码?
  • 运行 python manage.py sql app_name
  • “重新输入所有内容”?您听说过使用“文件”来包含您的源吗? Django 教程展示了一个很好的方法来做到这一点。你为什么不关注 Django 教程?

标签: python django django-models django-views django-testing


【解决方案1】:

编写单元测试怎么样?您可以使用一个命令轻松执行它们。您可能可以通过阅读django manual chapter on testing

开始

【讨论】:

  • 单元测试与在 shell 中尝试函数不同 - 想象一下,你知道你的函数是错误的,但是要检测错误,你必须看到结果,那么,你将如何使用单元测试来做到这一点?
  • 如果一个测试失败并没有告诉你什么在你的函数中不起作用,那么它就不是一个足够精确的测试。
【解决方案2】:

为了简单的实验,一定要创建一个trial.py,然后在做之后

python manage.py shell

你可以的

>>> import trial

然后直接从提示符中调用试验中的代码,例如

trial.myfunc()

如果您需要更改内容,只需保存更改后的 trial.py 并执行

reload(trial)

当然,您可能需要在交互式会话中重新创建任何现有对象才能使用您的更改。

这应该被视为对编写单元测试的补充(根据 Jani 的回答),但我确实发现这种方法对于使用迭代细化进行尝试很有用。

【讨论】:

  • 重新加载模型不能像这样工作:stackoverflow.com/questions/890924/….
  • @Tomasz:同意,当我提到重新创建对象时,我想到的是普通的 Python 对象......您的链接答案填补了缺失的部分。
【解决方案3】:

在 Django 项目目录中创建你的测试文件并将你的项目路径添加到环境变量:

import sys
sys.path.append(os.path.realpath(os.path.dirname(__file__)))

之后,您将能够从项目中导入任何模块(例如,models.py 中的模型或仅 views.py 中的函数)并使用您最喜欢的 IDE 及其编辑器和 shell。

【讨论】:

    【解决方案4】:

    对于更简单的情况,您可以使用包含shell_plus 管理命令的django-extensions 附加组件,该命令类似于标准shell 命令,但预加载所有模型。

    【讨论】:

      【解决方案5】:

      【讨论】:

        【解决方案6】:

        我之前也遇到过这个问题,

        也许你可以安装 ipython,它有一个神奇的函数,如下所示:

        %保存。

        这会将您输入的内容保存到文件中。

        而且ipython是一个非常迷人的工具,它可以完美地代替标准python提示符。它还有其他奇妙的东西!

        而在 django 中,如果你已经安装了 ipython,当你输入 python manage.py shell 时,

        它会直接调用 ipython。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-26
          • 1970-01-01
          • 1970-01-01
          • 2010-12-07
          • 2018-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多