【问题标题】:How is the python interactive shell connected to Django?python交互式shell如何连接到Django?
【发布时间】:2023-03-22 04:58:02
【问题描述】:

各位程序员大家好!

我正在阅读有关通过运行 ...python manage.py shell 实现的交互式 shell 的功能。这是我以前做过很多次的事情,但是我不太确定实际的 shell 是如何与 Django 连接的。在问这个问题之前,我确实试图通过官方文档以及该网站上的其他帖子找到我的方式。这个问题似乎没有像我这样的初学者可以理解的答案。

我读到manage.py shell-command '为我们提供了一个交互式 shell,其中 Python 路径为 Django 正确设置。'。我知道它可以用来与 Django 项目交互,以及查询配置的数据库和模型——但是在幕后会发生什么?

比如写ModelName.objects.all()的时候——.objects.all()的出处是什么,因为好像不是纯python语法? Django 是如何理解这个的?

shell 是否是 Django 提供的特殊 python 版本,并添加了一些 Django 可以理解的语法?因为那是有道理的。

谢谢你来自瑞典!

【问题讨论】:

  • .objects() 更多是元类等的结果。
  • 我不明白你的问题。 objectsall 在您的服务器代码中的工作与它们在 shell 中的工作一样好。无论如何,它们只是标准属性。为什么你认为这与外壳有关?
  • 这是我的猜测,因为它不是纯 Python 语法。我的猜测是它是 django 数据库 API,这是我听过几次的东西。那是对的吗?如果是,那是什么意思?
  • 这是完全正常的 Python 语法,所以我还是不明白你的意思。 Model 类定义了一个objects 属性,它是一个Manager,它有一个方法.all()。这没什么特别的。
  • 我可能用了错误的词来描述我想说的话,对此深表歉意。我的意思是我从未在 Django 上下文之外看到过 '.objects' 等,并不是说语法不正确。我现在明白它们是从 Model 类继承的,这很有意义。 Django 数据库 API 到底是什么?你能帮我在 shell 和我读过这么多的 API 之间建立联系吗?非常感谢,w

标签: python django shell


【解决方案1】:

据我所知,objects 来自拥有经理的模型。 From the docs:

管理器是向 Django 模型提供数据库查询操作的接口。 Django 应用程序中的每个模型都至少存在一个 Manager。

管理器存在于 django 中。因此,当您运行 shell 时,您只是在安装了 django 的环境中执行 python 代码。您可能注意到您必须运行 from .models import myModel,这意味着拥有模型(即 django 代码)不会继承到 shell,您需要手动导入它。

shell 只是一种执行代码的交互方式。从manage.py 运行它的唯一特别之处是它将在其 PYTHONPATH 中包含 django 和您的其余包。

【讨论】:

  • 有人能证实我在最后一句中所说的话吗...?
猜你喜欢
  • 2011-03-12
  • 1970-01-01
  • 2017-07-15
  • 2011-09-01
  • 2016-05-29
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2016-09-22
相关资源
最近更新 更多