Soy bastante nuevo en este frenesí del framework MV * del lado del cliente. No tiene que ser AngularJS, pero lo elegí porque me parece más natural que Knockout, Ember o Backbone. De todos modos, ¿cómo es el flujo de trabajo? ¿Comienzan las personas desarrollando una aplicación del lado del cliente en AngularJS y luego conectando el back-end?
¿O al revés construyendo primero el back-end en Django, Flask, Rails y luego adjuntándole una aplicación AngularJS? ¿Hay una forma "correcta" de hacerlo, o es solo una preferencia personal al final?
Tampoco estoy seguro de si estructurar mi proyecto de acuerdo con el Flask o AngularJS? prácticas comunitarias.
Por ejemplo, la aplicación minitwit de Flask está estructurada así:
minitwit
|-- minitwit.py
|-- static
|-- css, js, images, etc...
`-- templates
|-- html files and base layout
La aplicación tutorial AngularJS está estructurada así:
angular-phonecat
|-- app
`-- css
`-- img
`-- js
`-- lib
`-- partials
`-- index.html
|-- scripts
`-- node.js server and test server files
Podría imaginar una aplicación Flask por sí misma, y es bastante fácil ver la aplicación AngularJS como ToDo List por sí misma, pero cuando se trata de usar ambas tecnologías, no entiendo cómo funcionan juntas. Casi parece que no necesito un marco web del lado del servidor cuando ya tienes AngularJS, un simple servidor web Python será suficiente. En la aplicación de tareas de AngularJS, por ejemplo, usan MongoLab para comunicarse con la base de datos con Restful API. No era necesario tener un marco web en el back-end.
Tal vez estoy terriblemente confundido, y AngularJS no es más que una elegante biblioteca jQuery, por lo que debería usar como usaría jQuery en mis proyectos de Flask (suponiendo que cambie la sintaxis de la plantilla AngularJS a algo que no entre en conflicto con Jinja2). Espero que mis preguntas tengan sentido. Principalmente trabajo en el back-end y este marco del lado del cliente es un territorio desconocido para mí.
fuente
app.root_path
. De lo contrario, esto es bastante acertado.Puedes comenzar en cualquier extremo.
Tiene razón en que probablemente no necesite un marco completo del lado del servidor con AngularJS. Por lo general, es mejor servir archivos estáticos HTML / CSS / JavaScript y proporcionar una API RESTful para que el cliente la consuma. Una cosa que probablemente debería evitar es mezclar plantillas del lado del servidor con plantillas del lado del cliente de AngularJS.
Si desea usar Flask para servir sus archivos (puede ser excesivo, pero puede usarlo de todos modos), debe copiar el contenido de "app" de "angular-phonecat" en la carpeta "estática" de "minitwit".
AngularJS está más dirigido a aplicaciones similares a AJAX, mientras que el matraz le brinda la capacidad de hacer tanto las aplicaciones web de estilo antiguo como crear API RESTful. Hay ventajas y desventajas en cada enfoque, por lo que realmente depende de lo que desee hacer. Si me da algunas ideas, podría hacer más recomendaciones.
fuente
Este video oficial de Jetbrains PyCharm de John Lindquist (angular.js y jetbrains guru) es un buen punto de partida, ya que muestra la interacción del servicio web, la base de datos y angular.js dentro del matraz.
Construye un clon pinterest con frasco, sqlalchemy, frasco inquieto y angular.js en menos de 25 minutos.
Disfruta: http://www.youtube.com/watch?v=2geC50roans
fuente
editar : la nueva guía de estilo Angular2 sugiere una estructura similar, si no la misma, con mucho más detalle.
La respuesta a continuación apunta a proyectos a gran escala. He pasado bastante tiempo pensando y experimentando con varios enfoques para poder combinar un marco del lado del servidor (Flask con App Engine en mi caso) para la funcionalidad de back-end junto con un marco del lado del cliente como Angular. Ambas respuestas son muy buenas, pero me gustaría sugerir un enfoque ligeramente diferente que (al menos en mi opinión) se amplía de una manera más humana.
Cuando implementa un ejemplo TODO, las cosas son bastante sencillas. Sin embargo, cuando comienza a agregar funcionalidad y pequeños detalles agradables para mejorar la experiencia del usuario, no es difícil perderse en el caos de estilos, javascript, etc.
Mi aplicación comenzó a crecer bastante, así que tuve que dar un paso atrás y repensar. Inicialmente, un enfoque como el sugerido anteriormente funcionaría, al tener todos los estilos juntos y todos JavaScript juntos, pero no es modular y no es fácil de mantener.
¿Qué pasa si organizamos el código del cliente por característica y no por tipo de archivo:
y así.
Si lo construimos así, podemos envolver cada directorio nuestro en un módulo angular. Y hemos dividido nuestros archivos de una manera agradable para que no tengamos que pasar por un código irrelevante cuando trabajamos con una característica específica.
Un corredor de tareas como Grunt configurado correctamente, podrá encontrar y concatenar y compilar sus archivos sin mucha molestia.
fuente
Otra opción es separar completamente los dos.
Los archivos relacionados con el matraz se encuentran en la carpeta del servidor y los archivos relacionados con angularjs se encuentran en la carpeta del cliente. De esta manera, será más fácil cambiar el backend o el front-end. Por ejemplo, es posible que desee cambiar de Flask a Django o AngularJS a ReactJS en el futuro.
fuente
Creo que es importante determinar en qué extremo desea realizar la mayor parte del procesamiento de datos: front-end o back-end.
Si es frontal, entonces siga el flujo de trabajo angular, lo que significa que su aplicación de matraz funcionará más como una API donde terminará una extensión como matraz de descanso.
Pero si, como yo, está haciendo la mayor parte del trabajo en el backend, vaya con la estructura del matraz y solo enchufe angular (o en mi caso vue.js) para construir el extremo frontal (cuando sea necesario)
fuente