如何使用Django shell与正在运行的服务器进行交互?
如何使用Django shell与正在运行的服务器进行交互?
在我一个应用的apps.py
中,我为一些模型设置了一些类变量,这些变量在初始化时无法设置,因为它们依赖于其他应用和其中的模型。这样做很好,类变量被设置了,但是我想要做的是测试这些类,看它们是否按照预期工作。我的问题是当我运行开发服务器时,类变量被设置了,但是我也想能够创建这些模型的新实例进行测试。我意识到可以通过构建与生产中的模型交互的前端来实现这一点,但对于简单的测试来说,这似乎过于繁琐。
是否有办法在当前运行的服务器上使用Django的shell,或者我必须通过导入和运行manage.py
通常自动处理的所有内容来完成?
如果我写的不清楚,这里有一个相关文件的示例:
# example.models.py from django.db.models import * class ExampleModel(Model): class_var = None . . .
# apps.py from django.apps import AppConfig class ExampleConfig(AppConfig): name = 'example' def ready(self): from example.models import ExampleModel ExampleModel.class_var = 'something'
从上述内容中我们可以得出以下结论:
问题的原因:
作者之前在PyCharm中尝试在debug模式下运行服务器(python manage.py runserver
),然后在另一个终端窗口中启动交互式shell(python manage.py shell
),希望在shell中运行一个命令时能够触发断点。但是作者意识到,这实际上是启动了两个不同的服务器进程,而且类中设置的变量将会引用不同的内容,它们在代码级别上是完全独立的。因此,断点永远不会被触发。
解决方法:
作者发现,只需直接在PyCharm中对shell进行调试即可(python manage.py shell
),这样一切都能正常工作!但需要注意的是,调试器在每次出现错误后会退出。
要在Django shell中与正在运行的服务器进行交互,可以直接在PyCharm中对shell进行调试,而不是同时运行服务器和shell。这样可以确保运行的是同一个进程,从而正确触发断点。
在使用Django开发过程中,有时候我们需要与正在运行的服务器进行交互。下面的内容提供了一种解决方法。
如果你使用的是PyCharm或其他具有调试配置功能的IDE,可以通过创建一个配置文件来与正在运行的Django服务器进行交互。具体步骤如下:
1. 在顶部菜单中选择"Run"。
2. 在弹出的菜单中选择"Edit Configuration",进入"Run/Debug Configurations"菜单。
3. 在这里,你可以选择创建一个新的配置文件,或者编辑现有的Django服务器运行配置文件。
4. 确保勾选"Run Browser"选项。
5. 其他配置项如"Add Content Roots"和"Add Source Roots"可以保持默认设置,不需要修改。
6. 如果你遇到了有关应用程序或模型未加载的错误,可以尝试将"django_settings_module=mysite.settings"添加到环境变量中。
通过以上步骤,你就可以在PyCharm中与正在运行的Django服务器进行交互了。这种方法可以让你在运行过程中设置断点,以便测试和交互需要的变量。
参考链接:[How to run Debug server for Django project in PyCharm Community Edition?](https://stackoverflow.com/questions/27269574/28256637#28256637)
如何使用Django shell与正在运行的服务器进行交互?
当你运行python manage.py shell
时,很多与运行runserver
时相同的设置都会发生。特别是,你的AppConfig
中的所有ready
方法都会被调用。
因此,没有必要让你的服务器在运行时进行你想要的测试。
你甚至可以测试这个。只需添加print("This happens")
并运行python manage.py shell
。你应该会看到如下结果:
(env)your-current-location % python manage.py shell This happens <---- Here you see it is printed Python 3.8.6 (default, Oct 8 2020, 14:06:32) [Clang 12.0.0 (clang-1200.0.32.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>
值得一提的是,你可以同时打开一个shell,并同时运行你的服务器。但是,它们将是不同的进程,设置在类上的变量将指向不同的东西。它们在代码层面上将是完全独立的。
是的,我不想在网站的两个实例上工作。最后发现真正的错误是其他的,但如果没有这个,我就不会注意到,所以谢谢!
是否可能在运行服务器的同时进行交互会话?有时候我需要能够在Python控制台中查看和交互创建的变量,这将是理想的。
找到了答案:使用在运行配置中启动服务器的Pycharm调试器,您应该能够在点击网站时交互地测试Django变量。在这种情况下,设置适当的断点是必要的。 stackoverflow.com/questions/27269574/…