只使用Django的一些部分?

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

具体来说,我想用

  • 模型和数据库抽象
  • cachingAPI ,尽pipe我想通过caching来避免数据库查找,而不是HTML生成,而且由于Django中的caching框架是针对后者的,我不确定这是否真的合适。

不会使用

  • 模板
  • urlconfigs

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

这可以工作吗?

我在Django中的个人杀手function是我可以对模型执行的对象/数据库映射,所以如果还有其他技术(不一定是Python,我正处于devise阶段,而且我对语言和平台),这给了我相同的能力,这将是伟大的。

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

 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应用程序或任何你想要的。

至于caching,如果你不想使用Django,那么你应该可以决定你正在使用什么,并从那里去。 我build议使用CherryPy,它不使用Django风格的正则expression式URL映射,而是根据函数名称自动将URL映射到函数。 CherryPy主页顶部有一个例子: http : //cherrypy.org/

CherryPy有自己的caching系统,所以你可以完成和Django完全一样的function,而不需要使用Django的urlconfig系统。

Django作为一个Web框架,在创build网站方面非常高效。 但是,它也同样适用于解决networking问题。 这是项目引以为傲的松散耦合 。 没有什么能阻止你安装Django的完整版本,而只是使用你所需要的。 通常,Django的很less的组件对其使用做出广泛的假设。

特别:

  • Django模型不知道关于HTML或HTTP的任何信息。
  • 模板不知道关于HTML或HTTP的任何信息。
  • caching系统可以用来存储任何可以被腌制的东西

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

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

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

只要按照说明操作,就可以编写利用Django数据库function的独立Python文件,而不必使用urlconf,视图等。

我倾向于select使用Python进行networking编程的混合搭配方式。 🙂

我没有很多Django的经验,但我build议给sqlalchemy看一下数据库的东西。 它与其他人一起工作,给你几个潜在的抽象层(所以你可以去一些基本的东西,或者如果你想要的话就可以调整它)。 另外,如果你曾经使用过hibernate / nhibernate,那么你已经有点熟悉它了。

我最喜欢的部分是它有很多数据库连接的选项(最显着的是SQL Server,这是Django上次没有内置的内置)。

据说,我被告知,与Django,这是很容易分离function(但从来没有这样做自己)。

当然还有其他的项目,特别是实现django的单一部分。 例如TurboGears是几个可以自己工作的项目的集合,一起形成一个完整的Web开发框架。

对于数据库抽象SQLAlchemy浮现在脑海。

关于caching部分:我不知道任何实现通用caching设施的独立项目。

另一方面,应该很容易实现自己的caching,例如使用泡菜 。 看看这个配方的想法和谷歌“memoize” 的装饰 。

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

我发现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) 

我已经分享了一个解决scheme的例子,它可以防止代码中的Pythonpath操作:

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

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