Estoy construyendo mi primera aplicación Flask y no puedo encontrar una manera clara y piatica de organizar mi aplicación. No quiero tener todo en un solo archivo .py como en su ejemplo. Me gustaría tener cada parte de mi aplicación en un módulo separado. ¿Cuál sería una buena manera de organizar las cosas?¿Cómo organizar una aplicación Flask relativamente grande?
Respuesta
He creado un proyecto Frasco repetitivo llamado "Fbone", no dude en comprobarlo y tenedor :)
Fbone (hueso del frasco) es un (microframework Python) aplicación de plantilla/bootstrap/repetitivo frasco.
general
- bien diseñados para la gran proyecto utilizando planos.
- Integre con el framework de frontend más moderno: jQuery/html5boilerplate/bootstrap.
- Respaldado por la famosa SQLalchemy.
- Implemente el truco "recordarme" por el matraz de inicio de sesión.
- Manejar formularios web por matraz-wtform.
- Pruebas unitarias con matraz y nariz.
- Implementar fácilmente a través de fabric y mod_wsgi (ejemplo incluido).
- i18n por matraz de babel
por cierto, acabo de encontrar este wiki en la construcción de un gran proyecto con el frasco útil, pls lo comprueban!
impresionante repetitivo, ¡buen trabajo! –
Realmente me gusta esto. ¡Gracias! – jdsantiagojr
Antes de ejecutar 'fab d' como se detalla en el archivo README, necesita activar su entorno virtual con 'source env/bin/activate' – JRG
Flask 0.7 implementa Blueprints. Son excelentes para usar el decorador route
sin importar el objeto principal de la aplicación.
¿En qué se diferencia un modelo de un módulo? – dcolish
Técnicamente, un blueprint es una instancia de la clase Blueprint. Pueden abarcar uno o más módulos, o varios planos pueden coexistir en el mismo módulo. Hay algo de magia detrás de escena para descubrir el módulo o paquete de un blueprint, para encontrar sus carpetas 'templates' y' static'. –
He integrado planos en mi proyecto de frasco de huesos, vea mis respuestas por favor. – imwilsonxu
Estoy trabajando en un gran proyecto Flask (por mis estándares) (5000 líneas de código Python y está solo a medio terminar). El cliente quiere que el proyecto sea modular, por lo que tomó esta apporach:
Mi estructura de carpetas es el siguiente:
├── __init__.py
├── modules.yml
├── config
├── controllers
│ └── ...
├── lib: Common functions I use often
│ └── ...
├── models
│ └── ...
├── static: All static files
│ ├── css
│ ├── img
│ └── js
└── templates: Jinja2 templates
└── ...
En modules.yml
defino mis módulos incluyendo el nombre y la dirección URL. De esta forma, el cliente puede habilitar/deshabilitar módulos sin tocar un solo archivo de Python. Además, genero los menús en base a la lista de módulos. Por convención, cada módulo tiene su propio módulo de Python en controllers/
que cargará su model
desde models/
. Cada controlador define un Blueprint
almacenado como el nombre del controlador. P.ej. para un módulo user
, tengo en controllers/user.py
:
# Module name is 'user', thus save Blueprint as 'user' variable
user = Blueprint('user', __name__)
@user.route('/user/')
def index():
pass
De esta manera, puedo leer el modules.yml
en mi carga __init__.py
y y registrar todos los módulos habilitados de forma dinámica:
# Import modules
for module in modules:
# Get module name from 'url' setting, exculde leading slash
modname = module['url'][1:]
try:
# from project.controllers.<modname> import <modname>
mod = __import__(
'project.controllers.' + modname, None, None, modname
)
except Exception as e:
# Log exceptions here
# [...]
mod = getattr(mod, modname) # Get blueprint from module
app.register_blueprint(mod, url_prefix=module['url'])
espero, esto puede ser algo de inspiración para ti :)
¿dónde pones tus archivos de prueba? – Alp
La estructura descrita anteriormente es en realidad un subdirectorio con el nombre del proyecto ('project_name /'). También hay una carpeta 'tests /' y una carpeta 'scripts /' (para scripts ejecutables).Para 'tests /' sería inteligente usar la misma estructura que en la respuesta: 'tests/models /' para pruebas de modelo, 'tests/controllers' para pruebas de controlador, lo que sea. Eso requeriría cierta sobrecarga para mantener la estructura, pero haría muy simple encontrar los archivos que necesita. – msiemens
Asegúrate de leer Matt Wright's wonderful post sobre el tema.
Las características post:
Una descripción de una estructura para grandes proyectos matraz
Una descripción de las mejores prácticas de diseño en general cuando se trata de grandes aplicaciones web, como el patrón MVC, fábricas de aplicaciones, servicios y migración de datos por nombrar algunas (característica más interesante en mi humilde opinión).
He creado una aplicación Frasco yapper desde cero e integrado con trago tanto para el desarrollo frontend y backend. Es un motor de blog simple, pero se puede modificar fácilmente para desarrollar según los requisitos. Está bien estructurado usando Blueprints.
Pedido la página del proyecto yapper
trabajé en una red social construida sobre el frasco. Lo especial de mi proyecto fue que el servidor solo sirve puntos finales API y el frontend es una aplicación Backbone de una página. La estructura Frasco Tomé es la siguiente:
├── app │ ├── api
│ │ ├── auth.py │ │ └── ... │ ├── app.py │ ├── common │ │ ├── constants.py │ │ ├── helpers.py │ │ ├── response.py │ │ └── ... │ ├── config.py │ ├── extensions.py │ ├── frontend │ │ └── controllers.py │ ├── static │ │ └── ... │ ├── templates │ │ ├── app.html │ │ └── ... │ └── users │ ├── UserConstants.py │ ├── UserForms.py │ ├── UserHelpers.py │ ├── UserModels.py │ └── __init__.py ├── alembic | ├── version │ └── ... ├── tests │ └── ...
Puede leer el mensaje más profundo que escribí sobre el tema here. Me pareció mucho más intuitivo separar distintas áreas funcionales en su propia carpeta.
¡Trabajé en el código hace un tiempo y lo abrí por completo! Puede verificarlo on github.
Gracias. Se ve bien. – daniels
- 1. Cómo organizar una aplicación Rails
- 2. Organizar una aplicación GUI
- 3. ¿Cómo se demoniza una aplicación Flask?
- 4. Organizar visualmente las subvistas en una UIScrollView grande
- 5. ¿Cómo organizar la aplicación jquery compleja?
- 6. Unidad probando una clase de aplicación Flask
- 7. Despliegue de una aplicación Flask con CGI
- 8. ¿Organizar acciones en una aplicación Swing?
- 9. ¿Cómo implementar la aplicación Flask en Webfaction?
- 10. ¿Cómo organizar un proyecto grande con soluciones/proyectos/carpetas?
- 11. ¿Cómo escribir una aplicación grande de WinForms?
- 12. ¿Cómo debo organizar mi aplicación Flex?
- 13. Python Flask + nginx fcgi - ¿salida de respuesta grande?
- 14. El proceso iniciado se bloquea cuando la salida redirigida es relativamente grande
- 15. ¿Dónde pongo el código de limpieza en una aplicación Flask?
- 16. ¿Usa ClientBundle en una aplicación empresarial grande?
- 17. Cómo organizar mi código c
- 18. cómo organizar los archivos con aplicación python27 marco webapp2 motor
- 19. ¿Cómo debo organizar implicits en mi aplicación Scala?
- 20. ¿Cómo organizar los controladores/presentadores en una gran aplicación JavaFx 2.0?
- 21. ¿Cómo extender una plantilla base Flask Jinja desde una plantilla Blueprint?
- 22. ¿Cómo organizar el código fuente de una aplicación hecha con SQLAlchemy y una interfaz gráfica?
- 23. Cómo organizar clases, paquetes
- 24. IE9 cuelga una instancia local de Flask
- 25. ¿Cómo se configura una aplicación Flask con SQLAlchemy para realizar pruebas?
- 26. Flask long routines
- 27. Activos específicos de planos en Flask utilizando Flask-Assets?
- 28. En Flask, ¿por qué funciona esta aplicación hello world?
- 29. Flask-SQLAlchemy: cómo insertar o actualizar condicionalmente una fila
- 30. Agregue dinámicamente reglas de URL a la aplicación Flask
Me gusta bastante el diseño que se explica aquí: http://flask.pocoo.org/docs/patterns/packages/ – obmarg
Allí están utilizando importaciones circulares que me gustaría evitar. – daniels
Cierto, pero no creo que sea evitable si quiere usar la aplicación decorador de rutas. – obmarg