Створюємо перший додаток на Python та Django

19 хв. читання
29 листопада 2020

Python - це високорівнева мова програмування загального призначення. Це означає, що ви можете запрограмувати все, що завгодно, починаючи з простої гри і закінчуючи веб-сайтом, який може підтримувати мільйони користувачів щомісяця.

Python {full-post-img}

Чому нам слід використовувати саме Python, а не Ruby чи PHP? З Python ви отримуєте наступні дивовижні переваги:

  1. Легко читабельний синтаксис.
  2. Дивовижне ком'юніті.
  3. Легко вивчається.
  4. Python корисний для всього: від базових скриптів командного рядка до комплексної веб-розробки.

Коли не слід використовувати Python

Не дивлячись на те, що ви можете легко написати Desktop-додаток на Python, використовуючи такі інструменти, як wxPython, краще все ж використовувати спеціалізовані інструменти, пропоновані платформами, на яких ви орієнтуєтеся, наприклад, .NET на Windows.

Вам також не слід використовувати Python, коли ваш конкретний випадок має дуже спеціалізовані вимоги, яким краще задовольняють інші мови. Прикладом може бути розробка вбудованої системи, де такі мови, як C, C ++ і Java домінують.

Python 2 vs Python 3

Обидва Python 2.7.x і 3.x широко використовуються. У Python 3 внесені зміни, які потребують переписати додатки, написані на Python 2, щоб можна було працювати з гілками Python 3.x. Проте, більшість бібліотек, які вам будуть потрібні, тепер перенесені на Python 3.

Цей туторіал буде використовувати Python 3 версії 3.5.1. Принципи залишаються тими ж, хоча і потрібно буде зробити незначні зміни синтаксису, щоб код працював і на Python 2.7.x.

Деякі зразки коду на Python

HELLO WORLD

Як я вже говорив раніше, одним з основних переваг мови Python є його дуже читабельний синтаксис. Погляньте на версію Hello World на Python .

# Цей рядок коду виводить "Hello, World!" у ваш термінал
print("Hello, World!")

Цей код друкує Hello, World! у консоль. Ви можете легко спробувати його, перейшовши сюди, вставляючи приклади коду в редакторі на правій стороні сторінки, і натиснувши на run зверху, щоб побачити результат.

Логіка умов

Умовна логіка також зрозуміла. Ось код, який перевіряє, чи вік користувача більше 18, і якщо це так, то він виводить Access allowed або Access not allowed в інших випадках.

# зчитати вік
age = int(input("What's your age?"))

if age >= 18:
    print("Access allowed")
elif age < 18 and age > 0:
    print("Access not allowed")
else:
    print("Invalid age")

Функція input() використовується для зчитування з клавіатури. З цієї причини вам потрібно буде ввести щось у рядок терміналу, щоб наступна частина скрипту запрацювала. Зверніть увагу, що функція input() загорнута у функцію int().

Це тому, що input() зчитує значення strings,а нам потрібно, щоб вік був цілим числом типу integer. Інакше ми отримаємо повідомлення про помилку, наприклад, при перевірці, чи рядок більше, ніж 18.

Нарешті, відзначимо else, який виконується для будь-якого іншого вводу, який не відповідає попереднім критеріям.

Абстрактні типи даних

Python також має вбудовані абстрактні типи даних. Наприклад, список, який може бути використаний для зберігання змінних будь-якого типу. Наступний код показує, як створити список та як пройтись по ньому, щоб надрукувати кожен елемент у термінал.

# створити список my_list
my_list = [1, 2, 3, "python", 67,  [4, 5]]

# пройтись по my_list та вивести кожний елемент
for item in my_list:
    print item

Наведений вище код створює список з номерами, рядком і списком (так, списки можуть містити інші списки!). Для того, щоб перебирати списки, for-in цикл стає в нагоді. Пам'ятайте, що списки проіндексовані з нуля, таким чином ми можемо також отримати доступ до списку елементів використовуючи індекси. Наприклад, для виведення слова python, ви можете написати:

# створити список my_list
my_list = [1, 2, 3, "python", 67,  [4, 5]]

print(my_list[3])

Словники

Ще один відмінний тип даних, який пропонує Python - словники. Цей тип даних зберігає пари ключ-значення, на зразок об'єктів JSON. Створення словника так само досить просте.

# створити словник
person = {
            "name": "Amos",
            "age": 23,
            "hobbies": ["Travelling", "Swimming", "Coding", "Music"]
        }

# перебрати елементи у словнику та вивести ключі
for key in person:
    print(key)

# перебрати ключі у словнику та вивести їх значення
for key in person:
    print(person[key])

Тепер, коли ви знаєте трохи Python, давайте поговоримо про Django.

Django

Django {full-post-img}

Django - це веб-платформа на Python з відкритим кодом. Вона безкоштовна і існує ще з 2005 року. Поставляється з відмінною документацією і дивовижними властивостями, які включені за замовчуванням. Деякі інструменти, які вона пропонує:

  1. Легковісний сервер для розробки і тестування.
  2. Хорошу мову шаблонів.
  3. Функції безпеки, такі як CSRF.

Є безліч інших корисних речей у Django, але ви познайомитесь з ними пізніше. Ми будемо використовувати Django для створення веб-сайту в цьому туторіалі.

Налаштування

У цьому туторіалі я покажу вам, як розробити та апустити сайт на Django. Перед тим, як почати, спочатку встановіть останню версію Python з сайту Python.

Django {full-post-img}


Зверніть увагу, що якщо ви працюєте на OSX і у вас встановлений Homebrew, то ви можете зробити

brew install python3

Після цього ви можете зразу переходити до частини Початок роботи з Django


Після установки відповідної версії для вашої операційної системи, вам потрібно буде переконатися, що усе налаштовано правильно. Відкрийте термінал і введіть наступну команду:

python3

Ви побачите щось схоже на наступне:

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Це інтерактивний командний рядок Python. Зараз, натисніть CTRL + D, щоб вийти з нього.

Далі, нам потрібно встановити pip. Pip - це менеджер пакетів Python, що дасть можливість нам отримати бібліотеки, які нам потрібні, наприклад, Django.

sudo easy_install pip

Налаштування середовища

Для того, щоб уникнути забруднення непотрібними пакетами, ми будемо використовувати віртуальне середовище для їх зберігання. Є один прекрасний менеджер віртуального середовища, який доступний безкоштовно - virtualenv. Ви можете отримати його через pip install.

pip install virtualenv

Як тільки це буде зроблено, створіть папку projects де завгодно, та зробіть cd у нього.

mkdir projects
cd projects

У папці projects, створіть іншу папку під назвою hello. У цій папці буде зберігатись наш додаток.

mkdir hello

Зараз, нам потрібно створити середовище для роботи. Зробимо це у папці hello.

virtualenv -p /usr/local/bin/python3 env

-p вказує virtualenv на шлях до версії Python, яку ви хочете використовувати. Замініть шлях у прикладі на свій шлях до версії Python. Назва env - це назва середовища. Ви також можете змінити її на щось інше, що відповідає назві вашого проекту.

Як тільки це буде зроблено, у вас з'явиться папка env всередині hello. Ваша структура повинна тепер виглядати приблизно так.

projects
├─hello
│   ├── env

Тепер ви готові активувати середовище і почати кодування!

source env/bin/activate

Ви побачите рядок з назвою середовища. Це означає, що середовище у роботі.

 (env)

Інсталяція Django

Це простий pip install. Найновіша версія Django на момент написання цього туторіалу - Django 1.9.6

 pip install django

Створення додатку

Тепер, коли Django встановлений, ми можемо використовувати його скрипт запуску для створення скелету проекту.

django-admin startproject helloapp

Запуск даної команди створює скелет Django додатку з наступною структурою:

helloapp
├─helloapp
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Якщо ви заглянете у папку helloapp, яка була створена, ви знайдете там файл під назвою manage.py та ще одну папку під назвою helloapp. Це ваша основна папка проекту, яка містить налаштунки в файлі під назвою settings.py і маршрути в проекті в файлі urls.py. Відкрийте файл settings.py, щоб ознайомитися з його змістом.

Готові йти далі? Чудово.

Змінюємо налаштунки додатку

Давайте змінимо деякі налаштунки. Відкрийте файл settings.py у вашому редакторі. Знайдіть розділ під назвою Installed Apps, який виглядає приблизно так.

# helloapp/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Джанго працює над концепцією додатків. Додаток являє собою автономний блок коду, який може виконуватися самостійно. Він може робити багато речей, наприклад обслуговувати веб-сторінки в браузері або обробляти аутентифікацію користувача тощо. Django поставляється з деякими додатками, які були встановлені заздалегідь, наприклад, додатки аутентифікації та менеджеру сесії. Будь-які додатки, які ми будемо створювати, або сторонні додатки, які ми потребуватимемо, будуть додані в кінець списку Installed Apps після встановлення дефолтних додатків.

Перед тим, як створити наш додаток, давайте змінимо його часовий пояс. Django використовує часові пояси tz database, список яких можна знайти тут.

Налаштування часового поясу виглядає наступним чином.

# helloapp/settings.py
TIME_ZONE = 'UTC'

Змініть його на щось схоже на це в залежності від вашого часового поясу.

# helloapp/settings.py
TIME_ZONE = 'America/Los_Angeles'

Створення власного додатку

Важливо відзначити, що Django-додатки слідують парадигмі Модель - Представлення - Шаблон. У двох словах, додаток отримує дані від моделі, представлення робить щось з даними, та створюється шаблон, що містить оброблену інформацію. Таким чином, шаблони Django відповідають представленню у традиційному MVC і представлення Django можуть бути прирівнені до контролерів в традиційному MVC.

Давайте створимо додаток. Зробіть cd у першу папку helloapp і введіть:

python manage.py startapp howdy

Виконання цієї команди створить додаток під назвою howdy. Ваша структура файлів повинна тепер виглядати приблизно так.

helloapp
├── helloapp
│        ├── __init__.py
│        ├── settings.py
│        ├── urls.py
│        └── wsgi.py
├── howdy
│        ├── __init__.py
│        ├── admin.py
│        ├── apps.py
│        ├── migrations
│        ├── models.py
│        ├── tests.py
│        └── views.py
└── manage.py

Щоб Django впізнав наш новий додаток, нам потрібно додати його назву в список Installed Apps в файлі settings.py.

# helloapp/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'howdy'
]

Як тільки це буде зроблено, давайте запустимо наш сервер і подивимося, що вийде. Ми вже згадували, що у Django вбудовано легковісний веб-сервер, який використовується в процесі розробки, але ніколи не повинен використовуватися у виробництві. Запустіть сервер наступним чином:

python manage.py runserver

Якщо усе було правильно зроблено, то ви побачите подібне:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

June 04, 2016 - 07:42:08
Django version 1.9.6, using settings 'helloapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Якщо ви подивитеся уважно, ви побачите попередження, що у вас є незастосовані міграції. Пока що не звертайте уваги на це. Перейдіть у браузері до http://127.0.0.1:8000/. Якщо все працює нормально, ви побачите сторінку з Django привітанням.

Django {full-post-img}

Ми збираємося замінити цю сторінку нашим власним шаблоном. Але спочатку, давайте поговоримо про міграції.

Міграції

Міграції дають змогу легко змінювати схему бази даних (модель) без втрати даних. Кожен раз, коли ви створюєте нову модель, запуск міграцій буде оновлювати таблиці бази даних, щоб використовувати нову схему без втрати будь-яких даних або прходження через виснажливий процес самостійного скидання та її відтворювання

Django поставляється з деякими міграціями, які створені для додатків по дефолту. Якщо ваш сервер все ще працює, зупиніть його, натиснувши CTRL + C. Застосуйте міграції:

python manage.py migrate

У разі успіху, ви побачите подібний вивід.

Operations to perform:
  Apply all migrations: sessions, auth, contenttypes, admin
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying sessions.0001_initial... OK

Запуск сервера тепер не буде показувати ніяких попереджень.

URL та Шаблони

Коли ми запустили сервер, то побачили дефолтну сторінку Django. Нам потрібно, щоб Django отримувала доступ до нашого додатку howdy, коли хтось відвідує URL головної сторінки /. Для цього нам потрібно визначити URL, який повідомить Django, де шукати шаблон головної сторінки.

Відкрийте файл urls.py у внутрішній папці helloapp. Це має виглядати наступним чином.

 # helloapp/urls.py
 """helloapp URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:

https://docs.djangoproject.com/en/1.9/topics/http/urls/

Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

Як ви бачите, є існуючий патерн URL для адмін-сайту Django, який створено по дефолту з Django. Додамо наш власний URL, щоб вказати на наш howdy додаток. Відредагуйте цей файл наступним чином.

# helloapp/urls.py
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('howdy.urls')),
]

Зверніть увагу, що ми додали імпорт для include з django.conf.urls та додали патерн URL для порожнього маршруту. Коли хтось заходить на головну сторінку, (в нашому випадку http://localhost:8000), Django буде шукати більше URL в додатку howdy. Так як там немає жодного, запустивши додаток ми отримаємо величезне трасування стеку через ImportError.

.
.
ImportError: No module named 'howdy.urls'

Давайте виправимо це. Перейдіть в папку howdy і створіть файл під назвою urls.py. Папка howdy тепер має виглядати наступним чином.

├── howdy
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py

Всередині нового файлу urls.py, напишіть наступне.

# howdy/urls.py
from django.conf.urls import url
from howdy import views

urlpatterns = [
    url(r'^$', views.HomePageView.as_view()),
]

Цей код імпортує представлення з нашого howdy додатку та очікуватиме визначення представлення, яке називається HomePageView. Так як у нас немає ні одного, відкрийте файл views.py в howdy і введіть цей код.

 # howdy/views.py
from django.shortcuts import render
from django.views.generic import TemplateView

# Створіть свої представлення тут.
class HomePageView(TemplateView):
    def get(self, request, **kwargs):
        return render(request, 'index.html', context=None)

Цей файл визначає представлення під назвою HomePageView. Представлення Django приймають request і повертають response. У нашому випадку метод get очікує запит HTTP GET до URL, визначеного в нашому файлі urls.py.

Після того, як запит HTTP GET був отриманий, метод надає шаблон під назвою index.html, який представляє собою звичайний HTML-файл, який може мати спеціальні теги Django шаблонів, написані зі звичайними HTML-тегами. Якщо запустити сервер зараз, ви побачите наступну error сторінку:

Django {full-post-img}

Це відбувається тому, що у нас взагалі немає шаблонів! Django шукає шаблони в папці templates всередині вашого додатку, тому створіть її у вашій папці howdy.

mkdir templates

Перейдіть до папки для шаблонів, яку ви створили та створіть файл під назвою index.html

(env) hello/helloapp/howdy/templates
 > touch index.html

В index.html вставте цей код:


        <meta charset="utf-8">
        <title>Howdy!</title>
        <h1>Howdy! I am Learning Django!</h1>

Тепер запустіть ваш сервер.

python manage.py runserver

Ви побачите ваш шаблон.

Django {full-post-img}

Додавання сторінок

Додамо ще одну сторінку. У вашій папці howdy/templates додайте файл about.html. У ньому вставте наступний HTML код:


        <meta charset="utf-8">
        <title>Howdy!</title>
        <h1>Welcome to the about page</h1>
    <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc quis neque ex. Donec feugiat egestas dictum. In eget erat sit amet elit pellentesque convallis nec vitae turpis. Vivamus et molestie nisl. Aenean non suscipit velit. Nunc eleifend convallis consectetur. Phasellus ornare dolor eu mi vestibulum, ornare tempus lacus imperdiet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque ut sem ligula. Mauris volutpat vestibulum dui in cursus. Donec aliquam orci pellentesque, interdum neque sit amet, vulputate purus. Quisque volutpat cursus nisl, in volutpat velit lacinia id. Maecenas id felis diam. 
    </p>
    <a href="/">Go back home</a>

Після цього відредагуйте ваш index.html наступним чином:


        <meta charset="utf-8">
        <title>Howdy!</title>

        <h1>Howdy! I am Learning Django!</h1>
     <a href="/about/">About Me</a>

Посилання About me поки що не працює, тому що наш додаток не має визначеного URL /about/. Відредагуймо файл urls.py в нашому howdy, щоб додати його.

# howdy/urls.py
from django.conf.urls import url
from howdy import views

urlpatterns = [
    url(r'^$', views.HomePageView.as_view()),
    url(r'^about/$', views.AboutPageView.as_view()), # Add this /about/ route
]

Після того, як ми додали маршрут, нам потрібно додати представлення для візуалізації шаблону about.html, коли ми переходимо по URL /about/. Давайте відредагуємо файл views.py в howdy.

# howdy/views.py
from django.shortcuts import render
from django.views.generic import TemplateView

class HomePageView(TemplateView):
    def get(self, request, **kwargs):
        return render(request, 'index.html', context=None)

# Додайте це представлення
class AboutPageView(TemplateView):
    template_name = "about.html"

Зверніть увагу на те, що у другому представленні не визначено метод get. Це просто ще один спосіб використання класу TemplateView. Якщо ви встановите атрибут template_name, запит на представлення буде автоматично використовувавати визначений шаблон. Спробуйте змінити HomePageView, використовуючи формат в AboutPageView.

Запуск сервера та перехід на головну сторінку буде відображати наш шаблон з доданим посиланням на сторінку about.

Django {full-post-img}

Натиснувши на About me ви будете переправлені на сторінку About.

Django {full-post-img}

А на сторінці About me, натиснувши на Go back home - назад до головної сторінки. Спробуйте змінити обидва шаблони, додавши більше інформації про вас.

Висновок

Це був всього лише швидкий гайд по розробці сайту на Django. Ви можете дізнатися про Django більше в офіційній документації Django. Повний код з цього туторіалу також можна знайти на GitHub.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.7K
Приєднався: 6 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація