S´cia,ga z Django
Modele 1 2
from django.db import models from django.contrib.auth.models import User
3 4 5 6 7 8 9 10 11 12
class Story(models.Model): title = models.CharField(max_length=100, null=False, blank=False) description = models.TextField(null=False, blank=True) created = models.DateTimeField(auto_now_add=True) changed = models.DateTimeField(auto_now=True) owner = models.ForeignKey(User, null=False, blank=False) priority = models.IntegerField(choices = [(1, ’Niski’), (2, ’Sredni’), (3, ’Wysoki’)])
13 14 15
def __unicode__(self): return u’NewModel: ’ + self.field_1
16 17 18 19 20
class Meta: ordering = (’-priority’, ’title’) verbose_name = ’Opowiesc’ verbose_name_plural = ’Opowiesci’
Metoda __unicode__ definiuje spos´ ob wy´swietlania obiektu w postaci tekstowej.
Najcze´ sciej u˙zywane typy p´ ol , • BooleanField - pole logiczne, True/False • CharField - kr´ otkie pole tekstowe – max_length (wymagany) maksymalny rozmiar pola; wiekszo´ s´c baz danych ogranicza go , do 255 znak´ ow • DateField - pole zawierajace date, , – auto_now ustawione na True oznacza, z˙ e to pole zostanie automatycznie ustawione na aktualny czas przy ka˙zdym zapisie obiektu – auto_now_add ustawione na True oznacza, z˙ e to pole zostanie automatycznie ustawione na aktualny czas w momencie utworzenia obiektu
1
Tworzenie Aplikacji w Django, http://warsztatyit.pl/ • DateTimeField - pole zawierajace date, i czas, parametry takie jak DateTime , • ForeignKey - pole bed polaczeniem z innym modelem (relacja “jeden do wielu”) , ace , , – pierwszy parametr (wymagany) model, do kt´orego odwoluje sie, to pole • ImageField - pole zawierajace obrazek , – upload_to (wymagany) katalog, w kt´orym fizycznie przechowywane bed , a, obrazki (wzgle, dem settings.MEDIA_ROOT) • IntegerField - pole zawierajace liczbe, calkowita, , • TextField - du˙ze pole tekstowe, bez ograniczenia rozmiaru • TimeField - pole zawierajace czas, parametry takie jak DateTimeField , • parametry wsp´ olne dla wszystkich typ´ow p´ol – blank (domy´ slnie: True) ustawiony na True oznacza, z˙ e pole jest opcjonalne (mo˙ze by´c puste) – choices pozwala na ograniczenie mo˙zliwych warto´sci pola; powinien zawiera´c liste, par: (warto´s´c, opis) – help_text opis, kt´ ory pojawi sie, obok pola na stronie edycji – null (domy´ slnie: True) ustawiony na True oznacza, z˙ e je´sli pole jest puste, to w bazie mo˙ze by´c zapisane jako NULL – unique ustawiony na True oznacza, z˙ e warto´s´c pola musi by´c unikalna w tabeli
Klasa Meta Wewnetrzna klasa Meta zawiera dodatkowe informacje o modelu, najcze´ , , sciej u˙zywane to: ordering domy´slny spos´ ob sortowania wpis´ow; minus przed nazwa, pola oznacza sortowanie malejaco , verbose name nazwa modelu, do wykorzystania na stronach WWW (np. w interfejsie administracyjnym); domy´slnie tworzona na podstawie nazwy klasy verbose name plural nazwa modelu w liczbie mnogiej, do wykorzystania na stronach WWW (np. w interfejsie administracyjnym); domy´slnie tworzona na podstawie nazwy klasy przez dodanie ’s’ na ko´ ncu
Interfejs administracyjny W pliku nazwa_aplikacji/admin.py: 1 2
from gazetr.news.models import Category from django.contrib import admin
3 4 5 6
class CategoryAdmin(admin.ModelAdmin): list_display = (’name’, ’owner’) search_fields = (’name’,)
7 8
admin.site.register(Category, CategoryAdmin)
2
Tworzenie Aplikacji w Django, http://warsztatyit.pl/ Najcze´ , sciej u˙zywane opcje ModelAdmin: list display (lista) Pola widoczne jako kolumny na li´scie wpis´ow. Przyklad: list_display = (’pole1’, ’pole2’) search fields (lista) Pola u˙zywane do wyszukiwania tekstu na li´scie wpis´ow. Powinny to by´c pola tekstowe (CharField, TextField). Przyklad: search_fields = (’pole1’, ’pole2’) list filter (lista) Pola u˙zywane do filtrowania listy wpis´ow. Mo˙zna u˙zy´c p´ol typu BooleanField, CharField, DateField, DateTimeField, IntegerField i ForeignKey. Przyklad: list_filter = (’pole1’,) date hierarchy (pole) Pole, z kt´ orego skorzysta interfejs do przegladania wpis´ow wedlug dat. Powinno by´c typu Date, Field lub DateTimeField. Przyklad: date_hierarchy = ’created’ form (klasa formularza) Formularz wykorzystywany przez interfejs administracyjny do dodawania i edycji wpis´ow. Przyklad: form = MyFormClass fields (lista) Lista p´ ol, kt´ ore maja, by´c widoczne w edytorze wpis´ow. Pozwala na ograniczenie mo˙zliwo´sci edycji do cze´ s ci p´ o l modelu. , Przyklad: fields = (’pole1’, ’pole2’) fieldsets (lista list slownik´ ow) Definicja ukladu p´ ol na stronach dodawania i edycji. Zawiera liste, grup p´ ol (ang. fieldset). Ka˙zda grupa jest zdefiniowana przez pare, warto´sci: • nazwe, (mo˙ze by´c ustawiona na None) • slownik zawierajacy warto´sci: , – fields: lista p´ ol, kt´ ore bed , a, widoczne w tej grupie – classes: lista klas CSS, kt´ore zostana, dopisane do tej grupy; Django ma wbudowana, obsluge, klas collapse (grupa domy´slnie zamknieta) i wide (rozciagni eta). , , , – description: opis, kt´ ory pojawi sie, w g´ornej cze´ s ci grupy , Przyklad:
3
Tworzenie Aplikacji w Django, http://warsztatyit.pl/
1 2 3 4 5 6 7 8 9
fieldsets = ( (None, { ’fields’: (’pole1’, ’pole2’, ’pole3’) }), (’Opcje zaawansowane’, { ’classes’: (’collapse’,), ’fields’: (’pole4’, ’pole5’) }), ) Ten kod definiuje dwie grupy: pierwsza, bez nazwy, zawierajac , a, trzy pola, i druga, -- “Opcje zaawansowane”, ukryta,, z kolejnymi dwoma polami.
Szablony 1
{{ zmienna }}
2 3 4 5 6
{% for zmienna in lista_wartosci %} {{ zmienna|filtr1:"parametry,filtra"|filtr2 }} {{ zmienna.pole }} {% endfor %}
7 8 9 10
{% if article.image %} {{ article.image.url }} {% endif %}
11 12 13 14
{% ifequal zmienna1 zmienna2 %} zmienna1 i zmienna2 sa, r´ owne! {% endifequal %}
15 16
{% load nazwa_biblioteki %}
17 18 19 20
{% block content %} to jest zawarto´ s´ c bloku {% endblock content %}
21 22
{# komentarz jednolinijkowy #}
23 24 25 26 27
{% comment %} dluzszy komentarz {% endcomment %}
4
Tworzenie Aplikacji w Django, http://warsztatyit.pl/
API bazodanowe Manager 1
Article.objects.all()
2 3 4 5 6
# create zapisze obiekt art1 natychmiast Article.objects.create(title="Tytul 1") art1 = Article.objects.get(title="Tytul 1") art1.delete()
7 8 9 10 11 12
art2, created = Article.objects.get_or_create(title="Tytul 2") if created: print "Artykul wlasnie zostal utworzony!" art2.content = "Zawartosc" art2.save()
13 14 15 16
# zmiana niektorych pol bez modyfikacji innych # (bezposrednio wysle UPDATE w SQL) Article.objects.filter(title__contains="Nowy").update(title="Stary")
17 18 19 20
# filtrowanie Article.objects.filter(id__gt=100, title__contains="a") Article.objects.filter(owner__username__contains="gosc").exclude(...)
21 22 23 24
# pobieranie pojedynczego obiektu Article.objects.get(id__gt=100, title__contains="a") Article.objects.get(id=100)
Rodzaje por´ owna´ n Najcze´ , sciej u˙zywane: 1 2 3
# exact: dokladne dopasowanie (domyslne) User.objects.filter(username = "admin") User.objects.filter(username__exact = "admin")
4 5 6
# contains: zawiera podany tekst User.objects.filter(username__contains = "admin")
7 8 9
# lt: mniejsze, lte: mniejsze lub rowne, gte: wieksze lub rowne, gt: wieksze User.objects.filter(id__gt = 10)
10 11 12
# isnull: wartosc jest NULLem User.objects.filter(first_name__isnull = True)
5