Laboratorium Kierunki Rozwoju oprogramowania REST, Django

Transkrypt

Laboratorium Kierunki Rozwoju oprogramowania REST, Django
Laboratorium
Kierunki Rozwoju oprogramowania
REST, Django
1. Instalacja oprogramowania:
sudo apt-add-repository universe && sudo apt-get upgrade
sudo apt-get install python-pip -y
sudo pip2 install django==1.9.2 django-debug-toolbar
sudo pip2 install django-extensions werkzeug
sudo pip2 install django-werkzeug-debugger-runserver
2. W systemie powinno być dostępne polecenie d
​ jango-admin​.
Wykonaj je i zobacz jakie opcje są dostępne. Następnie stwórz nowy
projekt i dodaj do niego nową aplikację:
django-admin startproject <project> && cd <project>
django-admin startapp <app>
3. Aby uruchomić aplikację wykonaj polecenie:
./manage.py runserver
Przeanalizuj otrzymane komunikaty i zastosuj się do nich.
4. Otwórz adres ​http://localhost:8000​ . Sprawdź co dzieje się po stronie
serwera
5. Gratulację! Właśnie stworzyłeś swój pierwszy działający projekt.
Zajmij się edycją ustawień projektu. Plik znajduje się w folderze
<project>/<project>​. Dodaj nazwę swojej aplikacji do tablicy
INSTALLED_APPS. ​Ponadto dodaj aplikację d
​ ebug_toolbar ​oraz
werkzeug_debugger_runserver ​(ostatni wpis musi znajdować się
przed ​django.contrib.staticfiles​). UWAGA nazwy wpisywane to
tablicy ​INSTALLED_APPS​ mają być wpisywane bez przedrostków
takich jak django.contrib . Zmień nazwę tablicy ​MIDDLEWARE​ na
MIDDLEWARE_CLASSES.​ Uruchom serwer ponownie i napraw
ewentualne problemy. Na końcu dodaj wpis do tabeli ​INTERNAL_IPS
z adresami, którym będzie wyświetlał się panel do debugowania
(127.0.0.1).
6. Na końcu pliku urls.py dodaj poniższy kod:
from​ django.conf import settings
from​ django.conf.urls import include, url
if settings.DEBUG:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
]
7. Przejdź pod adres ​http://localhost:8000/​<app>. W związku z tym, że
nie dodaliśmy jeszcze nic ciekawego, jedyne do czego mamy dostęp
to panel administratora. Najpierw jednak należy wygenerować konto
administratora:
./manage.py createsuperuser
Jeżeli pojawi się komunikat o braku tabeli w bazie danych wykonaj
polecenia
./manage.py makemigrations
./manage.py migrate
Dostęp do panelu administratora: ​http://localhost:8000/admin
8. Nie ma tam nic poza informacjami o grupach i użytkownikach.
Możesz zobaczyć jak wygląda zarządzanie nimi oraz uprawnieniami.
9. Stwórzmy dwa modele reprezentujące wpisy na blogu, oraz
kategorie do jakich je przyporządkujemy. Otwórz plik ​models.py​ w
folderze z aplikacją i dodaj dwie klasy o nazwach ​Blog​ i ​Category:
class​ ​Blog​(models.Model):
title = models.CharField(max_length=100, unique=True)
…
def​ ​__unicode__​(self):
return​ '%s' % self.title
Funkcja ​__unicode__​ będzie odpowiadała za zwracanie
reprezentacji obiektu jeżeli nie odwołamy się bezpośrednio do
któregoś z pól (przydatne w listach i czasami w widokach)
Aby dodać więcej pól do tabeli, zdefiniuj nowe pola w klasie model.
Dostępne pola mogą mieć klasy takie jak T
​ extField​, ​ForeignKey​,
DateField​. Dokumentacja tych typów jest dostępna na stronie
https://docs.djangoproject.com/en/1.10/ref/models/fields/
Model Blog powinien zawierać 4 pola (tytuł, tekst, relacje do tablicy
categories, oraz datę publikacji). Model Category powinien
zawierać co najmniej jedno pole (tytuł).
10.Modele nie będą jednak działały dopóki nie wygenerujemy
odpowiadającym im tabel w bazie danych
./manage.py makemigrations
./manage.py migrate
UWAGA przy każdej zmianie table konieczne jest powtórzenie tych
poleceń
11. Teraz aby modele były dostępne w panelu administratora trzeba je
zarejestrować w pliku a
​ dmin.py​:
from​ <app>.models import B
​ log, Category
admin.site.register(Blog)
Widok modelu może być customizowany dzięki zarejestrowaniu
ich z dodatkowym argumentem:
class​ ​BlogAdmin​(admin.ModelAdmin):
search_fields = ['title']
list_display = ['title', 'posted']
list_filter = ['posted']
admin.site.register(Blog, BlogAdmin)
UWAGA Raz zarejestrowany model nie może być zarejestrowany
jeszcze raz. Jeżeli chcesz użyć powyższej metody, usuń wpis z
poprzedniego akapitu. Pamiętaj także, że powyższa funkcja
pozwala na użycie pewnych pól z modeli, a Twoje pola mogą
mieć inne nazwy.
12. Dodaj kilka wpisów i kategorii używając panelu administracyjnego.
13. Teraz zajmiemy się logiką aplikacji pobierającą dane z modelu i
przekazującą je do Templatów. W pliku v
​ iews.py​ dodaj metodę:
from​ django.shortcuts import render_to_response
from​ django.shortcuts import get_object_or_404
def​ ​index​(request):
return​ render_to_response('index.html', { 'categories':
Category.objects.all(), 'posts': Blog.objects.all()[:8]})
14. Aplikacja musi wiedzieć do jakiej metody przekierować rządanie
przychodzące. W tym celu musimy dodać w pliku ​urls.py​ w tablicy
urlpatterns​ dodatkowy wpis:
url​(r'^​blogapp​/', 'b
​ logapp.views.index​', name=​’mainview’​),
UWAGA: Dodaj ten wpis w tablicy a nie w instrukcji warunkowej
poniżej tablicy
15. Teraz możemy wyświetlić stronę główną naszej aplikacji, ale okazuję
się, że brakuje nam pliku template do wyświetlenia. Umieść plik
index.html​ w folderze ​templates​ w katalogu głównym aplikacji.
{% ​for​ ​post​ in ​posts​ %}
{{ ​post​ }} ​<br/>
{% ​endfor​ %}
Sprawdź działanie strony głównej.
UWAGA: Jeżeli zmieniłeś położenie katalogu templates, musisz
ręcznie zrestartować serwer
16. Dodaj w pliku v
​ iews.py​ kolejne akcje odpowiadające za wyświetlanie
wpisu i kategorii o zadanym id (powinna ona wyświetlać listę postów
do niej przypisanych). Listy powinny być “klikalne” - przenosić na
strony prezentujące pojedynczy wpis, albo wpisy z wybranej
kategorii. Dodaj do strony dowolny arkusz ze stylami, tak aby była
ona bardziej reprezentatywna.
● Aby odfiltrować wpisy po danym kryterium:
Blog​.objects.filter(​category​=​categoryobj​)
Gdzie ​categoryobj​ jest wcześniej pobranym obiektem
zawierającym kategorię.
● Jeżeli chcesz aby w przypadku braku obiektu o zadanym id zamiast
błędów pojawiła się strona ze statusem 404:
categoryobj​ = g
​ et_object_or_404​(Blog, id=categoryId),
● Jeżeli funkcja ma pobierać dodatkowy parametr przekazywany w
URL, należy dodać dodatkowy argument do jej definicji, a ponadto
zmienić wpis w pliku u
​ rls.py ​(wyrażenia regularne):
url​(r'^​blogapp/view/([0-9]+)​', '​blogapp.views.view_post​',
name=​’blogview’​),
Każdy argument zawarty w nawiasach okrągłych zostanie
przekazany do funkcji w pliku v
​ iews.py​ do odpowiedniej funkcji
● Aby lista kategorii lub wpisów była klikalna w momencie tworzenia
pliku z widokiem można posłużyć się funkcją ​url​:
{% <​nazwa_funkcji_z_pliku_views.py​> arg1 arg2 … %}
● Zauważ że pliki zawierające templaty mają wiele elementów
powtarzających się. Możemy stworzyć plik bazowy (zawierający
sekcję head, title, nagłówki i stopkę) i zaznaczyć w nim miejsca gdzie
będą wstawiane elementy innych templatów. Stwórz plik ​base.html
który zawierać będzie strukturę pliku html. (<html><head>... </html>).
Następnie miejsca uzupełniane przez templaty go rozszerzające
zadeklaruj w poniższy sposób:
{% block <nazwa bloku>%} {% endblock %}
Teraz możesz stworzyć templaty rozszerzające ten bazowy.
Wystarczy że zaczniesz je od linii:
{% extends 'base.html' %}
A miejsca do uzupełnienia oznaczysz:
{% block <nazwa bloku>%}
Zawartość do wyświetlenia
{% endblock %}
Pamiętaj aby pomiędzy nimi znalazła się jakaś zawartość.
17. Po zakończeniu zadań spakuj cały projekt do pliku ​zip ​i prześlij go
prowadzącemu

Podobne dokumenty