Django: meilleure pratique pour diviser le projet en applications

j'ai vraiment du mal avec cette idée d'application. J'ai lu beaucoup de tutoriels et des guides de style et je sais que je devrais essayer de créer des applications spécialisées, qui font exactement une chose. Tout cela est logique quand on regarde un projet de tutoriel simple, mais dès qu'il arrive à un projet complexe de la vie réelle, je me trouve incapable de déterminer comment je devrais tracer les lignes entre les différentes applications.

Un des problèmes est que je veux avoir un site (ou plusieurs sites) où l'utilisateur voit un beaucoup de choses différentes. Des trucs qui devraient provenir de différentes applications, en suivant les règles de conception de l'application. Comment pourrais-je réaliser quelque chose comme ça? Ma première idée était de créer une application appelée ui, qui ne gère que toutes les vues qui mènent réellement à un modèle et toutes les autres applications fournissent les modèles et les fonctions d'aide. Mais j'ai peur que le ui application deviendra moyen à grand.

Pour vous donner un petit exemple: je veux avoir un site où l'utilisateur peut effectuer les opérations suivantes tâches:

  • sélectionner un sujet
  • définir quelques options pour le sujet sélectionné
  • télécharger les fichiers associés à son compte
  • attribuer certains des fichiers téléchargés à l'objet
  • enregistrer quelques enregistrements audio qui seront liés au sujet

en ce moment, je créerais trois applications:

  1. sujets (contient le modèle de sujet et certains modèles)
  2. ressources (contient le modèle de ressources, les poignées de téléchargements)
  3. audio (s'occupe de tout l'enregistrement audio et du traitement)

Mais alors, j'aurais besoin d'une sorte de main ou ui application pour gérer la façon dont ces applications interagissent et pour créer le site réel, où toutes les applications sont en quelque sorte impliqués.

Donc, est-il une "bonne" façon de faire cela? Ou il y a des modèles que je peux utiliser? J'apprécierais aussi des liens vers de bonnes ressources sur ce sujet, même si j'en ai déjà lu plusieurs.

24
demandé sur basilikum 2013-08-16 14:11:44

2 réponses

Vous avez juste besoin de faire bien sûr structure de sens vous.

il n'est pas nécessaire de créer une nouvelle application pour chaque fonctionnalité liée à une autre partie de la logique du projet.

les applications réutilisables sont une toute autre histoire, leur code devrait être ignorant de la mise en œuvre dans une certaine mesure.

regardez structure de Django pour l'inspiration

une mise en page possible pour votre exemple:

project_root/
    project/
        __init__.py
        settings.py
        urls.py
        templates/
            app1/  # override stuff
        static/
        media/
    app1/
        __init__.py
        admin/  # as a package
            __init__.py
            subjects.py
            resources.py
            # etc
        models/  # as a package
            subjects.py
            resources.py
            # etc
        managers/
            __init__.py
            subjects.py
            resources.py
            # etc
        services/
            __init__.py
            audio.py  # upload handler etc
        views/
            __init__.py
            subjects.py
        urls/
            __init__.py
            subjects.py
        templates/
            app1/
                subject_list.html  # override at project level
        static/
            app1/
                css/
                    subject.css  # override at project level
    app2/
        __init__.py
        models.py  # holds a Member model or whatever you require
    manage.py
9
répondu Hedde van der Heide 2017-11-22 17:48:12

je pense que la meilleure façon de délimiter une application est à peu près équivalente à la façon dont vous délimitez une classe sur un langage de programmation orienté Object. Au lieu de variables et de méthodes, vous pensez respectivement à des modèles et à des vues:

les modèles sont à l'état de l'objet, les vues sont utilisés pour afficher et interagir avec l'état de l'objet.

ma règle de base est, Est-ce que créer une application aide à encapsuler un ensemble spécifique de modèles? Si c'est le cas, alors j'essaie d' créer.

7
répondu Jorge Leitão 2013-08-16 11:30:54