2012-07-15 12 views
12

Studiuję framework Django, czytając dokumentację, ale nie znalazłem referencji na temat tworzenia więcej niż jednej aplikacji w tym samym projekcie, gdzie każda aplikacja ma wiele aplikacji. Na przykład aplikacja Blog, z aplikacjami Użytkownicy, Komentarze, posty, ..., implementacja i Zadania z aplikacjami Klienci, Użytkownicy, Załączniki ... Jak mam to zrobić?Wiele aplikacji z django

localhost 
localhost/blog/ (posts, user, comment, ...) 
localhost/tasks/ (task, user, attachment, ...) 

<my project> 
-- manage.py 
-- <project name> 
-- -- blog 
-- -- -- posts 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py 
... 
-- -- tasks 
-- -- -- attachments 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py 
... 

Odpowiedz

12

Każda aplikacja będzie mieć je w swoim folderze:

  • views.py
  • models.py
  • inne OPCJE (admin.py ...)

Tak, masz:

Project 
-- manage.py 
-- Project 
-- -- views.py 
-- -- models.py 
-- -- others 
-- -- APP1 
-- -- -- views.py 
-- -- -- models.py 
-- -- -- others 
-- -- APP2 
-- -- -- views.py 
-- -- -- models.py 
-- -- -- others 
-- -- APPX 
-- -- -- views.py 
-- -- -- models.py 
-- -- -- others 

Narzędzie jest rozróżnienie pomiędzy funkcjonalności (zadzwoń do Notification.models.notification, jeśli masz aplikację powiadomień i model powiadomień).

Model jest architekturą obiektu. W ten sposób zadzwonisz na przykład User.username lub Task.name. Django automatycznie tworzy w bazie danych tabelę.

Innym narzędziem Django: można użyć widoku administratora (wich można edytować, tworzyć, edytować obiekty, które wykorzystują swoje modele) lub zmienić ten interfejs (wygląd that page)

Jeśli chcesz, możesz uczynić system identyfikacji i tworzyć formularze, możesz użyć własnego systemu administracyjnego.

Z Twojego przykład:

<my project> 
-- manage.py 
-- <project name> 
-- -- urls.py 
-- -- models.py <--- User model exists in Django and here you can add informations to the defaut model it is in this file because I suppose it will be used in all your project. 
-- -- views.py 

-- -- blog <--- It's an app. 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py <--- Posts, Comments are models for the blog, so you explain them here. 

-- -- tasks <--- Another app. 
-- -- -- attachments 
-- -- -- -- views.py 
-- -- -- -- urls.py 
-- -- -- -- models.py <--- Task model for exemple 
+0

bardzo mi pomogło, dzięki –

+0

Powodzenia! Byłem w twoim przypadku dwa tygodnie temu i teraz myślę, że django w niesamowitym języku !! – nlassaux

+0

Zacząłem studiować dla projektu na Uniwersytecie automatyki domowej z siecią ZigBee –

2

Nie masz pojęcia, czym jest aplikacja. Aplikacja to tylko zbiór powiązanych funkcji, zazwyczaj (ale niekoniecznie) obejmujących modele, widoki i szablony.

"Użytkownicy" to nie aplikacja - to model, ale zwykle korzystasz z wbudowanej aplikacji django.contrib.auth, aby zapewnić funkcjonalność użytkownika. Każda aplikacja może używać dowolnego kodu innej aplikacji, w tym modeli. Możesz mieć tyle modeli, ile chcesz w jednej aplikacji.

+0

Co zrobić aby moja strona z interfejsem administracyjnym, bez korzystania z contrib.admin. Jak oddzielić logikę? "Ten widok jest interfejsem administracyjnym i jest to publiczny interfejs"? –

+0

Jeśli chcesz. Lub podziel go na dwa pliki widoku - widoki są po prostu funkcjami Pythona, mogą mieszkać w dowolnym miejscu. Możesz też mieć osobną aplikację dla wszystkich funkcji administracyjnych we wszystkich innych aplikacjach. To zależy od Ciebie. –

9

Co powinieneś wiedzieć o Django:

  1. URL mapa ma żadnego wpływu na system plików lub kodu aplikacji. Oznacza to, że Twoje adresy URL nie mają związku 1-do-1 z Twoim kodem. Możesz mieć wiele adresów URL wskazujących ten sam fragment kodu (wskazujący na ten sam widok). Inaczej niż w PHP, gdzie adresy URL są mapowane do systemu plików.

  2. Aplikacje nie są "widżetami" ani "portletami". Aplikacja jest po prostu modułem pythona z pewnymi plikami już dołączonymi (views.py, models.py i __init__.py); i możesz mieć tyle aplikacji, ile chcesz. Możesz również mieć aplikacje, które nie są dostępne za pomocą adresu URL - są po to, aby obsługiwać inne aplikacje; a twoje aplikacje również nie muszą mieć tej samej nazwy co adresy URL.

Więc Mając to na uwadze ... można utworzyć jeden wniosek, nazwać www i wewnątrz JEJ views.py zdefiniować te bardzo twórczo nazwanych metod:

def blog(request): 
    pass 

def tasks(request): 
    pass 

Teraz w urls.py, ty może mieć:

url(r'^blog/$','www.views.blog',name='blog-index'), 
url(r'^blog/posts/$','www.views.blog',name='blog-posts',kwargs={'view_posts': True}), 
url(r'^tasks/$','www.views.tasks',name='task-index'), 
url(r'^tasks/attachments/$','www.views.tasks',name='task-attachments'), 
+0

Porównywanie Django do PHP jest niewłaściwe. Django to framework na szczycie w python. PHP można porównać do Pythona lub do języka szablonowego Jinja, ale nie do Django. – Mikhail