【问题标题】:Use only some parts of Django?只使用 Django 的某些部分?
【发布时间】:2010-09-23 02:12:08
【问题描述】:

我喜欢 Django,但对于一个特定的应用程序,我只想使用它的一部分,但我对 Django 内部的工作方式还不够熟悉,所以也许有人可以为我指出正确的方向我得去看看。

具体来说,我想用

  • 模型和数据库抽象
  • caching API,虽然我想通过缓存而不是 HTML 生成来避免数据库查找,而且由于 Django 中的缓存框架是为后者设计的,我还不确定这是否真的合适。

我会不使用

  • 模板化
  • urlconfigs

或者,更准确地说,我既没有使用 HTTP 也没有使用 HTML。所以基本上,我的输入/输出链与平时不同。

这行得通吗?

我在 Django 中的个人杀手级功能是我可以对模型进行对象/数据库映射,所以如果有另一种技术(不一定是 Python,我正处于设计阶段,我非常不可知论)关于语言和平台)给我同样的能力,那也很棒。

【问题讨论】:

  • 你可以看看 peewee:github.com/coleifer/peewee——它只是一个 ORM,轻量级,Django 用户应该熟悉
  • 这里不要侮辱 coleifer,但要注意 peewee 的文档远没有 Django 详细,如果您不熟悉某些概念,这可能会带来挑战。

标签: python django


【解决方案1】:

我自己使用 Django 进行它的对象/数据库映射,而不使用它的 urlconfigs。只需创建一个名为 djangosettings.py 的文件并插入必要的配置,例如:

DATABASE_ENGINE   = 'oracle'
DATABASE_HOST     = 'localhost'
DATABASE_NAME     = 'ORCL'
DATABASE_USER     = 'scott' 
DATABASE_PASSWORD = 'tiger'

然后在你的常规 Python 代码中,做

import os
os.environ["DJANGO_SETTINGS_MODULE"] = "djangosettings"

在您导入任何 Django 模块之前。这将使您无需实际拥有 Django 项目即可使用 Django 的对象/数据库映射,因此您可以将其用于独立脚本或其他 Web 应用程序或任何您想要的。

至于缓存,如果您不想使用 Django,那么您可能应该决定使用什么并从那里开始。我推荐使用 CherryPy,它不使用 Django 样式的正则表达式 URL 映射,而是根据函数名称自动将 URL 映射到函数。 CherryPy 主页顶部有一个示例:http://cherrypy.org/

CherryPy 有自己的缓存系统,因此您可以完成与 Django 完全相同的操作,但无需使用 Django 的 urlconfig 系统。

【讨论】:

  • 另请参阅docs.djangoproject.com/en/dev/topics/settings/…,了解在没有设置文件的情况下工作。
  • 这绝对是一个有用的链接,尽管我仍然更喜欢将我的设置分开,因为我倾向于使用一堆设置,所以我发现将它们全部放在一个单独的文件中更简洁。
  • 感谢您的链接!正是我想要的!
  • 这将引发错误No module named py。您必须将模块的名称而不是文件的名称放在那里。所以os.environ["DJANGO_SETTINGS_MODULE"] = "djangosettings" 会做到的。
  • @LazyDave:很好!我正在编辑我的答案以修复代码。
【解决方案2】:

Django 作为一个 Web 框架,在创建网站方面非常高效。但是,它也同样适合解决网络问题。这是项目引以为豪的松散耦合。没有什么能阻止您安装完整版本的 Django,并且只使用您需要的东西。通常,很少有 Django 组件对它们的使用做出广泛的假设。

具体来说:

尝试在没有 Web 服务器的情况下使用 Django 时,您将面临的主要问题之一是正确设置环境。 ORM 和缓存系统仍然需要在 settings.py 中进行配置。 using django without a settings module 上的文档可能对您有用。

【讨论】:

  • 说“这是项目引以为豪的松散耦合”和“在没有 Web 服务器的情况下尝试使用 Django 时,您将面临的主要问题之一是正确设置环境”同样的答案似乎有点矛盾。
【解决方案3】:

Django ORM 独立版

我创建了一个模板 Django 项目,您可以这样做。

https://github.com/dancaron/Django-ORM

只需按照说明,您就可以编写利用 Django 数据库功能的独立 python 文件,而无需使用 urlconf、视图等。

【讨论】:

  • 这非常有用,感谢您创建它。需要对 sys.path 进行一些修改,异常处理隐藏了一些模块加载错误,但让它变得非常容易。
  • 您可以添加许可证吗?
  • @TheGrimmScientist MIT 许可证已添加。
【解决方案4】:

我倾向于使用混合搭配的方法来使用 Python 进行 Web 编程。 :-)

我没有太多使用 Django 的经验,但我建议给 sqlalchemy 看看数据库的东西。它与其他人一起工作得很好,并为您提供了几个潜在的抽象层(因此您可以使用一些基本的东西,或者如果您愿意,可以对其进行调整)。另外,如果您曾经使用过 hibernate/nhibernate,那么您已经对它有些熟悉了。

我最喜欢的部分是它有很多可供数据库连接的选项(最值得注意的是 SQL Server,我上次检查时 django 没有内置它)。

话虽如此,有人告诉我,使用 Django,解耦功能非常容易(但我自己从未这样做过)。

【讨论】:

    【解决方案5】:

    当然还有其他项目专门实现 django 的单个部分。例如TurboGears 是多个项目的集合,这些项目可以单独工作,共同构成一个完整的 Web 开发框架。

    想到 db 抽象 SQLAlchemy

    关于缓存部分:我不知道有任何独立项目实现了通用缓存工具。

    另一方面,实现自己的缓存应该相当容易,例如使用pickles。看看this recipe for a decorator 的想法和谷歌的“memoize”。

    另外请记住,您的数据库有自己的缓存机制,所以也许您甚至不需要关心细节。

    【讨论】:

    • 对帖子中的缓存位进行了一些扩展。谢谢!
    【解决方案6】:

    为了使用 Django 的 模型和数据库抽象,我在这里解释了一种在 Django 之外使用它们的简洁方法: https://stackoverflow.com/a/49515366/2682613

    Django 2.0.2 版

    【讨论】:

      【解决方案7】:

      我分享了一个解决方案示例,它可以防止代码中的 Python 路径操作:

      https://github.com/askalyuk/django-orm-standalone

      它包含一个独立的数据访问包、一个单独的简单 Django 站点和一个单元测试。

      【讨论】:

        【解决方案8】:

        我找到了KeyboardInterrupt's answer,但它在 2009 年得到了回答,我未能在 Django 1.8 中运行它。对于最近的Django 1.8,你可以看看这个,其中一些部分来自 KeyboardInterrupt 的回答。

        文件夹结构为:

        .
        ├── myApp
        │   ├── __init__.py
        │   └── models.py
        └── my_manage.py
        

        myApp 是一个模块,包含一个空的__init__.pymodels.py

        models.py中有一个示例模型类: 从 django.db 导入模型

        class MyModel(models.Model):
             field = models.CharField(max_length=255)
        

        my_manage.py 包含 django 数据库、installed_app 设置并充当 django 官方 manage.py,因此您可以:

        python my_manage.py sql myApp
        python my_manage.py migrate
        ......
        

        my_manage.py 中的代码是: 从 django.conf 导入设置

        db_conf = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'your_database_name',
                'USER': 'your_user_name',
                'PASSWORD': 'your_password',
                'HOST': 'your_mysql_server_host',
                'PORT': 'your_mysql_server_port',
            }
        }
        
        settings.configure(
            DATABASES = db_conf,
            INSTALLED_APPS     = ( "myApp", )
        )
        
        # Calling django.setup() is required for “standalone” Django u usage
        # https://docs.djangoproject.com/en/1.8/topics/settings/#calling-django-setup-is-required-for-standalone-django-usage
        import django
        django.setup()
        
        if __name__ == '__main__':
            import sys
            from django.core.management import execute_from_command_line
        
            execute_from_command_line(sys.argv)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-07
          • 2012-02-11
          • 2018-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-01
          • 2019-01-18
          相关资源
          最近更新 更多