{% raw %}
django-admin startproject IME_PROJEKTA IME_MAPE
manage.py
IME_PROJEKTA/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
python manage.py UKAZ ...
runserver
makemigrations
migrate
createsuperuser
shell
python manage.py startapp APLIKACIJA
APLIKACIJA
admin.py
models.py
tests.py
views.py
migrations/
SECRET_KEY
INSTALLED_APPS
django.contrib.*
DATABASES
TIME_ZONE
django.db.models.Model
django.db.models
CharField
TextField
IntegerField
DecimalField
FloatField
DateField
DateTimeField
TimeField
ForeignKey
ManyToManyField
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
request
django.http.HttpResponse
templates
django.shortcuts.render
{{ spremenljivka }}
{% značka argument ... %}
osnova.html
{% block ime_bloka %} ... {% endblock %}
{% extends "osnova.html" %}
{% url %}
{% url "ime_poti" argument ... %} {% url "ime_poti" par1=arg1 ... %}
"ime_poti"
name
django.urls.path
chuck = Oseba(ime="Chuck Norris")
Model.objects
Oseba.objects.all() # vse osebe Zanr.objects.get(pk=1) # žanr z ID-jem 1 # filmi iz leta 2000, urejeni padajoče po oceni Film.objects.filter(leto=2000).order_by("-ocena") # glavne vloge v filmih, dolgih vsaj 200 minut, ki nimajo oznake PG-13 Vloga.objects.filter(film__dolzina__gte=200, mesto=1).exclude(film__oznaka='PG-13')
aggregate
from django.db.models import Avg, Count, Max, Min, Sum Film.objects.aggregate(Max("dolzina"), zasluzek=Sum("zasluzek")) # {'zasluzek': 279926080502, 'dolzina__max': 450}
annotate
q = Film.objects.annotate(Count("zanri")) q[0].zanri__count
only
defer
Film.objects.only("dolzina", "leto").get(naslov="Jurski park") Film.objects.defer("opis").get(naslov="Jurski svet")
select_related
Film.objects.filter(naslov__startswith="Jurski").select_related("oznaka")
prefetch_related
Film.objects.filter(naslov__startswith="Jurski").prefetch_related("vloge")
django.db.models.F
django.db.models.Q
from django.db.models import F, Q # Filmi, ki so zaslužili vsaj 100 mio dolarjev na oceno # ali vsaj 5 mio dolarjev na minuto trajanja Film.objects.annotate( zasluzek_na_oceno=(F("zasluzek") / F("ocena")), zasluzek_na_dolzino=(F("zasluzek") / F("dolzina")) ).filter( Q(zasluzek_na_oceno__gt=100_000_000) | Q(zasluzek_na_dolzino__gt=5_000_000) )
chuck.ime = 'Chuck Norris (RIP)'
film.ocena = F('ocena') + 1
save
chuck.save() film.save()
from django.db import transaction with transaction.atomic(): # ukazi, ki naj tvorijo transakcijo
@transaction.atomic def pogled(request, ...): ...
path("accounts/", include("django.contrib.auth.urls")),
login
logout
password_change
password_reset
registration/login.html
POST
{% csrf_token %}
{{ form.username.html_name }}
{{ form.password.html_name }}
next
{{ next }}
django.contrib.auth.forms.UserCreationForm
request.POST
username
password1
password2
is_valid
form
request.user
user
{% if user.authenticated %} Pozdravljen, {{ user.username }}! {% endif %}
add
change
delete
view
request.user.has_perm
if request.user.has_perm('app.add_model'): ...
perms
{% if perms.app.add_model %} <!-- uporabnik lahko dodaja objekte za dani model --> {% endif %}
{% endraw %}