Skip to main content

Flask-Vue3

Flask-Vue3

Une extension Flask pour intégrer facilement Vue 3, Vite.js et Tailwind CSS 4 dans une application Flask, offrant une expérience de développement moderne pour les applications web full-stack.

Table des matières

Caractéristiques

  • Intégration transparente de Vue 3 dans une application Flask
  • Support du mode développement avec Hot Module Replacement (HMR)
  • Utilisation de Vite.js pour un développement frontend rapide et une construction optimisée
  • Intégration de Tailwind CSS 4 pour un styling moderne et efficace
  • Support de Vue Router avec gestion des erreurs 404 et pages d'erreur
  • Support de Pinia pour une gestion d'état avancée
  • Outils CLI pour initialiser, installer, démarrer et construire votre projet Vue
  • Gestion automatique des assets en production

Installation

pip install flask-vue3

Démarrage rapide

  1. Dans votre application Flask, initialisez l'extension:
from flask import Flask
from flask_vue import Vue

app = Flask(__name__)
vue = Vue(app)

# Ou avec la factory pattern
# vue = Vue()
# vue.init_app(app)
  1. Initialisez un nouveau projet Vue dans votre application:
# Projet Vue basique
flask vue init

# Avec Vue Router
flask vue init --router

# Avec Pinia (state management)
flask vue init --pinia

# Avec Vue Router et Pinia
flask vue init --router --pinia
  1. Installez les dépendances JavaScript:
flask vue install
  1. Démarrez le serveur de développement Vue:
flask vue start
  1. Dans vos templates Flask, utilisez les helpers Jinja:
<!DOCTYPE html>
<html>
<head>
    <title>Mon application Flask-Vue</title>
    {{ vue_hmr() }}
    {{ vue_css('main.css') }}
</head>
<body>
    <div id="app"></div>
    {{ vue_js('main.js') }}
</body>
</html>
  1. Pour déployer en production, construisez les assets:
flask vue build

Configuration

Vous pouvez configurer l'extension via des paramètres lors de l'initialisation:

vue = Vue(app,
    # Mode de développement (si non spécifié, utilise app.config['VUE_MODE'] ou app.debug)
    dev_mode=True,  
    
    # URL du serveur de développement Vite (par défaut: http://localhost:5173)
    dev_server_url='http://localhost:3000',  
    
    # Chemin vers les assets dans le dossier static
    assets_path='vue/',  
    
    # Mappage personnalisé des points d'entrée
    entry_map={  
        'app.js': 'src/app.js',
        'admin.js': 'src/admin.js'
    },
    
    # Activer/désactiver les plugins Vue
    plugins={  
        'vue_router': True,
        'pinia': True
    }
)

Ou via les variables d'environnement ou la configuration Flask:

  • FLASK_VUE_MODE: development ou production
  • Définir app.config['VUE_MODE'] à development ou production

Utilisation

Commandes CLI

L'extension fournit plusieurs commandes CLI pour gérer votre projet Vue:

  • flask vue init: Initialise un nouveau projet Vue avec Vite et Tailwind CSS
    • --router: Active Vue Router avec pages d'exemple et gestion d'erreurs
    • --no-router: Désactive Vue Router (comportement par défaut)
    • --pinia: Active Pinia (gestion d'état) avec stores d'exemple
    • --no-pinia: Désactive Pinia (comportement par défaut)
    • --path/-p: Spécifie le chemin où initialiser le projet (défaut: frontend)
  • flask vue install: Installe les dépendances NPM
    • --path/-p: Spécifie le chemin du projet (défaut: frontend)
  • flask vue start: Démarre le serveur de développement Vite
    • --path/-p: Spécifie le chemin du projet (défaut: frontend)
  • flask vue build: Construit les assets Vue pour la production
    • --path/-p: Spécifie le chemin du projet (défaut: frontend)

Helpers Jinja

L'extension ajoute plusieurs fonctions d'aide à l'environnement Jinja:

  • vue_hmr(): Génère la balise script pour le Hot Module Replacement en mode développement
  • vue_js(entry_point): Génère la balise script pour un point d'entrée JavaScript
  • vue_css(entry_point): Génère les balises CSS pour un point d'entrée
  • vue_asset(filename): Génère l'URL pour un asset
  • vue_has_router(): Vérifie si Vue Router est activé
  • vue_has_pinia(): Vérifie si Pinia est activé

Modes de développement et production

En mode développement:

  • Les assets sont servis depuis le serveur de développement Vite
  • Le Hot Module Replacement (HMR) est activé
  • Les modifications sont reflétées immédiatement dans le navigateur

En mode production:

  • Les assets sont compilés via flask vue build
  • Les fichiers sont optimisés et minifiés
  • Les chemins sont simplifiés sans hachage pour une intégration facile avec Flask

Plugins Vue

Vue Router

Vue Router permet de créer des applications à page unique (SPA) avec navigation sans rechargement de page.

Activation:

flask vue init --router

Ou dans l'initialisation de l'extension:

vue = Vue(app, plugins={'vue_router': True})

Structure générée:

  • src/router/index.js: Configuration du routeur
  • src/views/: Dossier contenant les composants de pages
    • Home.vue: Page d'accueil
    • About.vue: Page À propos
    • NotFound.vue: Page 404 pour les routes inexistantes
    • ErrorPage.vue: Page d'erreur générique

Gestion des erreurs:

  • Gestion automatique des routes inexistantes (404)
  • Gestion des erreurs pendant la navigation
  • Redirection vers des pages d'erreur stylisées

Pinia (Store)

Pinia est la bibliothèque de gestion d'état recommandée pour Vue 3, offrant une API intuitive et une intégration avec les outils de développement.

Activation:

flask vue init --pinia

Ou dans l'initialisation de l'extension:

vue = Vue(app, plugins={'pinia': True})

Structure générée:

  • src/store/index.js: Configuration des stores
    • Store utilisateur avec authentification
    • Store compteur pour exemple

Architecture

Après l'initialisation, votre projet aura la structure suivante:

votre_app_flask/
├── app.py
├── frontend/
│   ├── index.html
│   ├── vite.config.js
│   ├── package.json
│   ├── public/
│   └── src/
│       ├── main.js
│       ├── App.vue
│       ├── style.css
│       ├── components/
│       │   └── HelloWorld.vue
│       ├── router/           # Si Vue Router est activé
│       │   └── index.js
│       ├── views/            # Si Vue Router est activé
│       │   ├── Home.vue
│       │   ├── About.vue
│       │   ├── NotFound.vue
│       │   └── ErrorPage.vue
│       └── store/            # Si Pinia est activé
│           └── index.js
└── static/
    └── build/
        └── (assets compilés en production)

Exemples

Configuration d'une application Flask avec Flask-Vue:

# app.py
from flask import Flask, render_template
from flask_vue import Vue

app = Flask(__name__)
vue = Vue(
    app,
    dev_server_url="http://localhost:5173",
    plugins={
        'vue_router': True,
        'pinia': True
    }
)

@app.route('/')
@app.route('/<path:path>')
def index(path=None):
    """Toutes les routes sont gérées par Vue Router"""
    return render_template('index.html')

@app.route('/api/hello')
def hello_api():
    """API Flask pour être consommée par Vue"""
    return {
        'message': 'Bonjour depuis Flask!',
        'status': 'success'
    }

if __name__ == '__main__':
    app.run(debug=True)

Template Flask avec vérification des plugins:

<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask-Vue App</title>
    {{ vue_hmr() }}
    {{ vue_css('main.css') }}
</head>
<body>
    <div id="app"></div>
    {{ vue_js('main.js') }}
    
    {% if vue_has_router() %}
    <!-- Configuration spécifique pour Vue Router si besoin -->
    <script>
        console.log('Vue Router est activé');
    </script>
    {% endif %}
</body>
</html>

FAQ

Q: Comment gérer les requêtes API entre Flask et Vue? R: Utilisez le module fetch pour appeler des endpoints Flask depuis Vue. Les endpoints Flask doivent retourner des réponses JSON.

Q: Est-ce que les routes Flask sont nécessaires avec Vue Router? R: Vous avez besoin d'au moins une route Flask pour servir le template qui charge l'application Vue. Si vous utilisez Vue Router en mode history, vous devez également configurer Flask pour rediriger toutes les routes inconnues vers ce template.

Q: Comment déployer une application Flask-Vue en production? R: Exécutez flask vue build pour compiler les assets Vue, puis déployez votre application Flask normalement. Assurez-vous que dev_mode=False dans la configuration de l'extension.

Dépannage

Le serveur de développement ne démarre pas

Vérifiez que Node.js et npm sont installés:

node -v
npm -v

Les styles ne sont pas chargés en production

Vérifiez que le build a été correctement généré:

flask vue build

Et que les fichiers CSS existent dans static/build/.

Les routes Vue Router ne fonctionnent pas

Assurez-vous que votre application Flask est configurée pour rediriger toutes les routes vers votre template principal:

@app.route('/')
@app.route('/<path:path>')
def index(path=None):
    return render_template('index.html')

Contribuer

Les contributions sont les bienvenues! Voici comment vous pouvez contribuer:

  1. Fork le dépôt
  2. Créez une branche pour votre fonctionnalité (git checkout -b feature/amazing-feature)
  3. Committez vos changements (git commit -m 'Add some amazing feature')
  4. Pushez vers la branche (git push origin feature/amazing-feature)
  5. Ouvrez une Pull Request

Licence

MIT

Metadata

Release files for Flask-Vue3 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Flask-Vue3 0.1.1
File Size Uploaded Provenance Actions
flask_vue3-0.1.1.tar.gz 15.2 kB Without provenance Details for flask_vue3-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for Flask-Vue3 0.1.1
File Interpreter ABI Platform Actions
flask_vue3-0.1.1-py3-none-any.whl Python 3 none any Details for flask_vue3-0.1.1-py3-none-any.whl

Total release size: 32.4 kB

Release files / flask_vue3-0.1.1.tar.gz

Download URL flask_vue3-0.1.1.tar.gz
Size 15.2 kB
Tags Source
SHA-256 checksum
How to use checksums
74fbe3b7e834b90c59798689c0ceeeedb55e4ce1a7bbb1f294de4bacc8a00a29
BLAKE2b-256 checksum
How to use checksums
9f5524ad5317e408b4c5aef6cd6078b81313d6b8d9625ad2ba3800331939199f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.1

Release files / flask_vue3-0.1.1-py3-none-any.whl

Download URL flask_vue3-0.1.1-py3-none-any.whl
Size 17.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c503c26d777526fabc9e6673cd1f77351621815fbddc177b3eba626f4f6137ba
BLAKE2b-256 checksum
How to use checksums
b8b7005d8d8fbc530ee5791506a3f778da3c932ec0a865724d9046f1ee318de1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.1

Security for Flask-Vue3 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page