17. Django

17. Django

17. Django

20 май 2015

Django 101

Convention vs. Configuration

Ако следваш правилата всичко работи без досадни конфигурации

Python 2.x vs. Python 3.x

През целия семестър сме ви обяснявали, че има разлика между двете.

Докато ползвате Django това ще боли... много

Как се инсталира?

$ pip install django

И после?

$ django-admin.py startproject haitter

Models, Views, Templates

Ако сте чували за MVC:

Models

Object-Relational Mapper

Пример

class User(models.Model):
  username = models.CharField(max_length=30, unique=True)
  first_name = models.CharField(max_length=30, blank=True)
  last_name = models.CharField(max_length=30, blank=True)
  email = models.EmailField(blank=True)
  is_staff = models.BooleanField(default=False)
  is_active = models.BooleanField(default=True)
  date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

Пример

unique = True # не може да се повтаря
blank = True # не е задължително Django да приеме стойност за него
null = True # базата не изисква стойност за него
default = "Панда" # стойност по подразбиране

Полета

models.CharField(max_length=32)
models.TextField()
models.IntegerField()
models.BooleanField()
models.DateTimeField()
models.FileField()
models.ImageField()
models.EmailField()
...

Релационен модел

Views

Views (пример)

from django.shortcuts import render

def calculator(request):
    if request.method == 'POST':
        x = int(request.POST['x'])
        y = int(request.POST['y'])
        result = x + y

    return render(request, 'calculator.html', locals())

Templates

{{ title }}
{{ user.first_name }}
{% if a > 5 %} а е голямо! {% endif %}
{% for user in users %} {{ user.first_name }} {% endfor %}

Хайку по темата

Моделът помни.
Темплейтът го показва.
А view-то мисли.

URLs

from django.conf.urls import patterns, url

urlpatterns = patterns('',
    url(r'^articles/([0-9]{4})/$', 'news.views.year_archive'),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', 'news.views.month_archive'),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', 'news.views.article_detail'),
)

Apps

Структура на един Django проект

-> tree
.
  ├── haitter
     ├── __init__.py
     ├── settings.py
     ├── urls.py
     └── wsgi.py
  ├── haikus
     ├── admin.py
     ├── __init__.py
     ├── migrations
        └── __init__.py
     ├── models.py
     ├── tests.py
     └── views.py
  └── manage.py

Миграции

Миграции

python manage.py makemigrations haikus # Създава миграция за този app
python manage.py migrate # Изпълнява всички миграции

Не откривайте топлата вода

Въпроси?