如何使用Django shell与正在运行的服务器进行交互?

16 浏览
0 Comments

如何使用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'

0
0 Comments

从上述内容中我们可以得出以下结论:

问题的原因:

作者之前在PyCharm中尝试在debug模式下运行服务器(python manage.py runserver),然后在另一个终端窗口中启动交互式shell(python manage.py shell),希望在shell中运行一个命令时能够触发断点。但是作者意识到,这实际上是启动了两个不同的服务器进程,而且类中设置的变量将会引用不同的内容,它们在代码级别上是完全独立的。因此,断点永远不会被触发。

解决方法:

作者发现,只需直接在PyCharm中对shell进行调试即可(python manage.py shell),这样一切都能正常工作!但需要注意的是,调试器在每次出现错误后会退出。

要在Django shell中与正在运行的服务器进行交互,可以直接在PyCharm中对shell进行调试,而不是同时运行服务器和shell。这样可以确保运行的是同一个进程,从而正确触发断点。

0
0 Comments

在使用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)

0
0 Comments

如何使用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/…

0