2010-03-30 24 views
6

Soy relativamente nuevo en python y en el motor de aplicaciones, y acabo de terminar mi primer proyecto. Consiste en varios archivos * .py (generalmente archivo py para cada página en el sitio) y archivos temple respectivamente para cada archivo py. Además, tengo un gran archivo PY que tiene muchas funciones que son comunes a muchas páginas, en el que también declaro las clases de db.Model (que es el tipo de almacén de datos).Estructura de proyecto de Python y App Engine

Mi pregunta es cuál es la convención (si existe) de organizar estos archivos. Si creo un model.py con las clases de datos, ¿debería estar en un paquete diferente? ¿Dónde debo colocar mis archivos de plantilla y todos los archivos py que manejan cada página (deberían estar en el mismo directorio que el gran archivo común PY)?

He intentado buscar MVC y tales implementaciones en línea, pero hay muy pocas.

Gracias,

Joel

Respuesta

3

lo general organizar mis proyectos de esta manera:

project 
    main.py 
    README 
    models 
     bar.py 
     foo.py 
    views 
     foolist.hml 
     barlist.hml 
    controllers 
     controller1.py 
     controller2.py 
    api 
     controllerapi.py 
    helpers 
     utilities.py 
    lib 
     extfoo.py 
    db 
    foo.db 
    test 
    test.py 

Mira esta post; es un excelente artículo sobre cómo estructurar un proyecto (no en Python, pero no importa).

+0

¡Gracias por la respuesta rápida y la referencia a un artículo muy bueno! Agradecería si me puede aclarar algunas cosas: 1) ¿por qué usaría un archivo de modelo diferente para cada página? Parece que, por lo general, la mayoría de las páginas usan las mismas clases (modelos) en sus páginas, por lo que es difícil dividirlas. 2) Si lo entiendo correctamente, controller1.py tendrá un controlador para foo y control2 tendrá un controlador para la barra, ¿no? Entonces, si desea realizar cambios en el almacén de datos, por ejemplo, llamaría a una función en utilities.py. ¿Lo entendí bien? Gracias! – Joel

+0

Solo concéntrese en la estructura de los directorios y no en lo que puse adentro, es solo un ejemplo :). ¡Podría usar solo un archivo para todos los modelos y un archivo para todos los controladores! Típicamente uso una estructura como esta cuando desarrollo en la web (usando gae \ web.py). – systempuntoout

+0

va a funcionar :) Solo quería asegurarme de que con "controladores" se refiere al archivo que contiene los manejadores. Y una última cosa (lo prometo): básicamente, los "controladores" y los "modelos" son paquetes (que, por lo que yo entiendo, deben contener el archivo _init_.py), mientras que las vistas son un directorio regular (sin el archivo _init.py), ¿verdad? – Joel

3

Normalmente puedo organizar este modo:

project/ 
    main.py 
    models.py 
    app.yaml 
    index.yaml 
    templates/ 
    main.html 
    foo.html 
    ... 
    styles/ 
    project.css 
    js/ 
    jquery.js 
    project.js 
    images/ 
    icon.png 
    something.jpg 

y tengo todos mis manejadores en main.py, todos mis modelos en models.py, etc.

Si tengo una gran cantidad de manejadores, y puedo dividir fácilmente la funcionalidad de algunos manejadores de los demás (como manejadores de tareas frente a manejadores de solicitudes vs. manejadores de xmpp/email) Agregaré otro foo_handlers.py a la mezcla, pero generalmente solo los guardo en main.py

Pero luego a ganancia, tiendo a no escribir aplicaciones enormemente complejas de Python App Engine ...

+0

¡Gracias! muy útil. ¿Dónde colocarías las carpetas de css "stylesheet" y "javascript"? – Joel

+0

Edité mi respuesta para incluir JS, CSS e imágenes. Mi punto principal es que la mayoría de los manejadores son bastante cortos y dulces, y de hecho se volverán más complicados cuantos más archivos tenga abiertos para hacer cualquier cosa. –