2008-11-19 9 views
33

Me gusta Django, pero para una aplicación en particular me gustaría utilizar solo algunas partes, pero no estoy lo suficientemente familiarizado con la forma en que Django funciona en el interior, por lo que tal vez alguien me puede orientar en la dirección correcta de lo que tiene que ver.¿Usa solo algunas partes de Django?

En concreto, quiero usar:

  • los modelos y base de datos de la abstracción
  • El caching API, aunque quiero evitar consultas de bases de datos de almacenamiento en caché, no la generación de HTML, y desde el marco de almacenamiento en caché en Django está destinado para este último, aún no estoy seguro de si eso es realmente apropiado.

Me no utilizar:

  • Templating
  • urlconfigs

o, más exactamente, no estoy ni utilizando HTTP ni HTML. Entonces, básicamente, tengo una cadena de entrada/salida diferente a la habitual.

¿Funciona?

Mi característica asesina personal en Django es la asignación Objeto/base de datos que puedo hacer con los modelos, así que si hay otra tecnología (no tiene que ser Python, estoy en la fase de diseño y soy bonita agnóstico sobre idiomas y plataformas) que me da las mismas habilidades, eso también sería genial.

+0

Puede ver peewee: https://github.com/coleifer/peewee - es solo un ORM, liviano, y debe ser familiar para los usuarios de Django – coleifer

+0

No insultar a coleifer aquí, pero tenga en cuenta que la documentación para Peewee es significativamente menos detallado que para Django, lo que puede representar un desafío si no estás familiarizado con algunos conceptos. – Ponkadoodle

Respuesta

41

Yo mismo uso Django para su asignación de objeto/db sin usar sus urlconfigs. Basta con crear un archivo llamado djangosettings.py e insertar la configuración necesaria, por ejemplo:

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

Luego, en el código Python regulares, hacen

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

antes de importar cualquier módulo de Django. Esto le permitirá usar las asignaciones de objeto/db de Django sin tener realmente un proyecto Django, por lo que puede usarlo para scripts independientes u otras aplicaciones web o lo que quiera.

En cuanto al almacenamiento en caché, si no desea utilizar Django, probablemente debería decidir lo que está utilizando e ir desde allí. Recomiendo usar CherryPy, que no utiliza el mapeo de URL de expresión regular de estilo Django, sino que mapea automáticamente las URL a funciones basadas en los nombres de las funciones. Hay un ejemplo justo en la parte superior de la página de inicio de CherryPy: http://cherrypy.org/

CherryPy tiene su propio sistema de almacenamiento en caché, por lo que puede hacer exactamente lo mismo que Django pero sin necesidad de utilizar el sistema urlconfig de Django.

+6

También vea http://docs.djangoproject.com/en/dev/topics/settings/#using-settings-without-setting-django-settings-module para trabajar sin un archivo de configuración en primer lugar. –

+0

Definitivamente es un enlace útil, aunque aún prefiero mantener mi configuración separada ya que tiendo a usar muchas de ellas, por lo que me parece más sencillo ubicarlas en un archivo por separado. –

+0

¡Gracias por el enlace! ¡Exactamente lo que estaba buscando! – Soviut

2

Por supuesto, existen otros proyectos que implementan específicamente partes individuales de django. TurboGears, por ejemplo, es una colección de varios proyectos que pueden funcionar solos y juntos forman un marco de desarrollo web completo.

Para la abstracción de db me viene a la mente SQLAlchemy.

En cuanto a la parte de almacenamiento en caché: No conozco ningún proyecto independiente que implemente un recurso de almacenamiento en caché genérico.

Por otro lado, debería ser bastante fácil implementar su propio almacenamiento en caché, por ejemplo, usando pickles. Eche un vistazo a this recipe for a decorator para obtener ideas y google para "memoize".

También tenga en cuenta que su base de datos tiene su propio mecanismo de almacenamiento en caché, por lo que tal vez ni siquiera necesite preocuparse por los detalles.

+0

Se expandió un poco en el bit de almacenamiento en caché en la publicación. ¡Gracias! –

2

Tiendo a preferir un enfoque de mezclar y combinar para usar Python para la programación web. :-)

No tengo mucha experiencia con Django, pero recomiendo dar sqlalchemy para buscar las cosas de la base de datos. Funciona bien con otros y le ofrece varias capas de abstracción potenciales (para que pueda ir con algo básico o retocarlo si lo desea). Además, ya estarás familiarizado con él si alguna vez has usado hibernate/nhibernate.

Mi parte favorita es que tiene muchas opciones para las bases de datos para conectarse (más notablemente SQL Server, que django no tiene incorporada la última vez que lo comprobé).

Dicho esto, me dijeron que con Django, es bastante fácil desacoplar la funcionalidad (pero nunca lo hice yo mismo).

12

Django, al ser un framework web, es extremadamente eficiente en la creación de sitios web. Sin embargo, también es adecuado para resolver problemas de la web. Este es el acoplamiento flojo que el proyecto se enorgullece. Nada le impide instalar una versión completa de Django y solo usar lo que necesita. Como regla, muy pocos componentes de Django hacen suposiciones generales sobre su uso.

Específicamente: modelos

Una de las principales cosas que enfrentará cuando intente utilizar Django sin un servidor web es configurar el entorno correctamente. El ORM y el sistema de caché aún deben configurarse en settings.py. Hay documentos en using django without a settings module que pueden serle útiles.

+0

Diciendo "Este es el acoplamiento débil del que se enorgullece el proyecto" y "Una de las cosas principales que enfrentarás cuando intentes utilizar Django sin un servidor web es configurar el entorno correctamente", en la misma respuesta parece un poco de una contradicción. – spinkus

6

He creado una plantilla de proyecto de Django que te permite hacer precisamente eso.

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

sólo tienes que seguir las instrucciones y se puede escribir archivos pitón independientes que utilizan funciones de base de datos de Django, sin tener que utilizar URLconf, vistas, etc.

+1

Esto fue muy útil, gracias por crearlo. Se necesitaba un poco de piratería de sys.path, y el manejo de excepciones ocultó algunos errores de carga del módulo, pero lo hizo realmente fácil. – RichVel

+0

¿Alguna posibilidad de que pueda agregar una licencia a eso? – TheGrimmScientist

+1

@TheGrimmScientist Licencia de MIT agregada. – devdrc

0

He compartido un ejemplo de solución, la cual evita la manipulación Ruta Python dentro de código:

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

contiene un paquete de acceso de datos independiente, un sitio Django sencilla separado y una unidad de TES t.

1

encontré KeyboardInterrupt's answer pero fue respondida en 2009 y que no pudo ejecutarlo en Django 1.8.For reciente Django 1.8, puede echar un vistazo a esto, en la que algunas partes provienen de la respuesta de KeyboardInterrupt.

La estructura de carpetas es:

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

myApp es un módulo, contiene un vacío __init__.py y models.py.

Hay una clase de modelo de ejemplo, en models.py: a partir de modelos de importación django.db

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

my_manage.py contiene la base de datos de Django, la configuración installed_app y actúa como Django manage.py oficial, para que pueda:

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

Los códigos en my_manage.py son: de configuración de importación 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) 
Cuestiones relacionadas