18. Джанго

18. Джанго

18. Джанго

16 май 2016

Какво е HTTP

Client-Server протокол, за раздаване на документи

Видове Requests (Заявки)

GET / POST / PUT / HEAD / ...

Видове Response (Отговори)

1xx / 2xx / 3xx / 4xx / 5xx

Headers

DNS?

Domain Name System

IP <-> четимо име

Зад един сайт

Интересуваме се от сериозни неща

Преди да продължим с тях обаче

Ако проекта ви е web с python

Добре е да може да кажете поне 2 думи за wsgi

БЕЗ значение кой от всичките 66 framework-а си изберете

Django

Convention vs. Configuration

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

Python 2.x vs. Python 3.x

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

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

Изненада

Предния slide е от миналата година

в предадените идеи за проекти има около 20 различни идеи свързани с "интървеб"

Абсолютно всеки един от тях ще стане гладко с Django + Python3.5 ако имате добро проучване

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

$ pip install django  # не думай

И после?

$ django-admin.py startproject djitter

Но все пак..

Помните ли картинката в началото

Не тази с розовото пони

Не е цялата картинка

Затова...

Нахвърили сме нещо за вас тук

Нека го разгледаме...

Обратно към Django

Целта ни днес

Фреймуорка има разкошна документация

Задължително четиво - Two Scoops Of Django***

Как да използвате тази книга

Ако проекта ви е с Django...

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())

CBV vs functions

Templates

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

URLs

from django.conf.urls import url

from djeeters import views

urlpatterns = [
    url(
        r'^profile/nongeneric/(?P<username>.+)/$',
        'djeeters.views.djeeter_profile',
        name='profile-info'
    ),
    url(
        r'^profile/(?P<username>.+)/$',
        views.DjeeterDetailView.as_view(),
        name='profile'
    )
]

API

Serializers

Apps

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

-> tree
.
  ├── djitter
  │   ├── __init__.py
  │   ├── settings.py
  │   ├── urls.py
  │   └── wsgi.py
  ├── djeeters
  │   ├── admin.py
  │   ├── __init__.py
  │   ├── migrations
  │   │   └── __init__.py
  │   ├── models.py
  │   ├── tests.py
  │   └── views.py
  ├── api
  ├── common
  └── manage.py

Миграции

Миграции

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

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

Тестване на webapp

Въпроси?