繁体   English   中英

只使用Django的某些部分?

[英]Use only some parts of Django?

我喜欢Django,但是对于特定的应用程序我只想使用它的一部分,但是我对Django在内部的工作方式不太熟悉,所以也许有人可以指出我正确的方向,我有什么查看。

: 具体来说,我

  • 模型和数据库抽象
  • 缓存API ,虽然我想通过缓存而不是HTML生成来避免数据库查找,并且因为Django中的缓存框架是针对后者的,所以我不确定这是否真的合适。

:

  • 模板
  • urlconfigs

或者,更确切地说,我既不使用HTTP也不使用HTML。 所以基本上,我有一个不同于通常的输入/输出链。

这可以吗?

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

我自己使用Django进行对象/ db映射而不使用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的对象/ db映射而无需实际拥有Django项目,因此您可以将它用于独立脚本或其他Web应用程序或任何您想要的。

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

CherryPy有自己的缓存系统,所以你可以完成与Django完全相同的事情,但不需要使用Django的urlconfig系统。

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

特别:

尝试在没有Web服务器的情况下使用Django时,您将面临的主要问题之一是正确设置环境。 仍需要在settings.py中配置ORM和缓存系统。 没有你可能会觉得有用的设置模块使用django的文档。

我已经创建了一个模板Django项目,可以让你做到这一点。

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

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

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

对于db抽象,我想到了SQLAlchemy

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

另一方面,实现自己的缓存应该相当容易,例如使用pickle 看看这个装饰的想法和谷歌“memoize”的食谱

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

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

我没有很多Django的经验,但我建议给sqlalchemy一个数据库的东西。 它适用于其他人,并为您提供了几个潜在的抽象层(因此,如果您愿意,您可以使用基本的东西或调整它的地狱)。 另外,如果你曾经使用过hibernate / nhibernate,你已经对它有点熟悉了。

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

有了这个说,我被告知,使用Django,很容易解耦功能(但我自己从未这样做过)。

我已经分享了一个解决方案的例子,它阻止了代码中的Python Path操作:

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

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

我找到了KeyboardInterrupt的答案,但它在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)

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

Django版本2.0.2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM