Zpět na blog

Vytváření Django modelů: Tutoriál

Vytváření Django modelů: Tutoriál

Django je známý webový framework pro rychlý vývoj zabezpečených a snadno udržovatelných webových stránek a webových aplikací. Vytvořený pomocí Python, Django zjednodušuje vývoj webu, což umožňuje věnovat více času a pozornosti psaní aplikací, aniž byste museli pokaždé znovu vymýšlet kolo. Django je bezplatný projekt s otevřeným zdrojovým kódem, robustní oficiální dokumentací, skvělou podporou komunity a spoustou bezplatné i placené podpory.

V tomto návodu se ponoříme do vytváření modelů v Django. V Django je model klíčovým zdrojem informací o vašich datech. Modely popisují pole a chování ukládaných dat. Django používá model ke generování databázových tabulek pomocí ORM (Object Relational Mapping), které se také označují jako modely.

Požadavky

Pracujeme na operačním systému založeném na Unixu, nejlépe na cloudovém serveru Ubuntu 20.04 jakožto systému, na kterém jsme vše testovali. Pokud chcete Django nastavit v podobném prostředí, podívejte se na náš návod „How To Install Django and Set Up a Development Environment on Ubuntu 20.04.”

Krok 1. Vývojové prostředí Pythonu

Django je postaven na Pythonu. Potřebujeme tedy robustní vývojové prostředí Pythonu se všemi potřebnými nástroji pro práci s aplikacemi v Pythonu. Již jsme se tím zabývali ve vyhrazeném návodu. Zde si ukážeme krátkou demonstraci.

Nejprve spusťte terminál a zadejte následující příkazy:

Dále nainstalujte pip – správce balíčků pro Python:

Poté nainstalujte některé další vývojové balíčky:

Django Models 1

K vytvoření virtuálního prostředí potřebujeme také Python modul venv :

Krok 2. Instalace MySQL Serveru

MySQL je populární relační systém řízení bází dat. Je open-source, stabilní a bohatý na funkce. Jako databázový server pro naši aplikaci v Django použijeme MySQL jako databázový server pro naši aplikaci v Django. Nainstalujte MySQL pomocí APT:

Poté ověřte instalaci:

Django Models 2

Jedná se pouze o základní nastavení MySQL s výchozími možnostmi. Podívejte se na podrobnější návod na instalaci a konfiguraci MySQL.

Krok 3. Nastavení aplikace Django

Nyní jsme připraveni vytvořit naši aplikaci v Django. Pokud máte zájem o další podrobnou ukázku Django, podívejte se na náš návod „Installing the Django Web Framework on Ubuntu 20.04.”

Dále vytvořte vyhrazený adresář pro aplikaci. Název adresáře by měl odrážet název projektu:

V adresáři projektu vytvořte virtuální prostředí Pythonu pomocí modulu venv :

Aktivujte virtuální prostředí:

Django Models 3

Nainstalujte Django pomocí pip:

Dále vytvořte nový projekt Django pomocí django-admin příkazu:

django-admin

Krok 4. Konfigurace aplikace Django

Aplikace Django obsahuje všechny výchozí konfigurace. Pro náš účel musíme provést několik úprav.

Začněte úpravou konfiguračního souboru settings.py:

Poté změňte časové pásmo:

TIME_ZONE

Přidejte stroje, které mají povolen přístup k aplikačnímu serveru Django:

ALLOWED_HOSTS

Poté změny aplikujte:

Django Models 4

Nakonec vytvořte superuživatele pro naši webovou aplikaci Django:

python manage.py

Krok 5. Připojení aplikace Django k MySQL

Pro připojení k MySQL potřebujeme další knihovnu konektoru pro Python, která je kompatibilní s Django. Budeme používat mysqlclient.

Nejprve se ujistěte, že máme nainstalované potřebné balíčky:

python3-dev

Dále nainstalujte mysqlclient:

  • Vytvoření vyhrazené databáze

Pro naši aplikaci musíme vytvořit vyhrazenou databázi a databázového uživatele. Spusťte MySQL shell jako root:

sudo mysql -u rootVytvořte vyhrazenou databázi pro naši aplikaci Django:

Poté vytvořte vyhrazeného databázového uživatele pro aplikaci Django:

Nakonec udělte vyhrazenému uživateli plná oprávnění k vyhrazené databázi:

GRANT ALL ON
  • Změna konfigurace Django pro použití MySQL

Nyní musíme upravit některé konfigurace Django, aby mohl používat MySQL jako databázový server. Otevřete settings.py v textovém editoru:

Přejděte dolů k sekci DATABASES a vložte následující kód:

DATABASES

Dále upravte konfigurační soubor MySQL tak, aby obsahoval potřebné přihlašovací údaje k databázi:

Na konec souboru přidejte následující blok:

Django Models 5

Restartujte MySQL, aby se změny projevily:

Krok 6. Vytvoření modelu Django

Nyní jsme připraveni vytvořit nový model v našem projektu Django. Aktivujte virtuální prostředí:

V tomto umístění řekněte Djangu, aby vytvořil novou aplikaci:

Po vytvoření by měl strom souborů vypadat nějak takto. Zde bude soubor models.py obsahovat kódy pro náš vlastní model Django:

Django Models 6

Zkontrolujte aktuální obsah souboru:

cat models.py

Pro demonstraci vytvoříme model pro blogové příspěvky s názvem Post. Bude obsahovat následující pole:

  • title: Název blogového příspěvku.
  • slug: Ukládá a generuje platné adresy URL pro webové stránky.
  • content: Text blogového příspěvku.
  • created_on: Datum vytvoření příspěvku.
  • author: Uživatel, který příspěvek vytvořil.

Otevřete soubor models.py v textovém editoru:

Importujme některá nezbytná rozhraní API pro náš model. Ve výchozím nastavení importuje rozhraní API pro modely. Budeme také potřebovat slugify API pro generování slugů, User pro autentizaci a reverse pro lepší a flexibilnější vytváření URL:

Dále přidejte metodu třídy s názvem Post. Bude obsahovat potřebná databázová pole jako title, slug, content, created_on, a author:

Potřebujeme funkcionalitu pro generování URL a ukládání příspěvku. Je to důležité, protože to generuje unikátní odkazy odpovídající unikátním příspěvkům:

Další sekce řekne modelu, jak řadit příspěvky a jak je zobrazovat na webové stránce. Tuto logiku zakódujeme pomocí vnitřní třídy Meta. Bude obsahovat dodatečnou logiku modelu, která se netýká definice databázových polí:

Nakonec budeme mít v tomto souboru funkci modelu Comment. Vyžaduje to přidání další třídy Comment s použitím models.Model jako její signatury. Bude obsahovat následující databázová pole:

  • name: Jméno komentujícího.
  • email: E-mailová adresa komentujícího.
  • text: Samotný obsah komentáře.
  • post: Příspěvek, ke kterému byl komentář přidán.
  • created_on: Čas vytvoření komentáře.

Kód bude vypadat přibližně takto:

V tomto okamžiku bude náš soubor models.py vypadat takto:

models.py

Nakonec soubor uložte a zavřete editor.

Krok 7. Aktualizace nastavení Django

Model je vytvořen. Musíme však upravit některé konfigurační soubory, abychom model uvedli do provozu. Uvnitř settings.py musíme přidat náš model pod INSTALLED_APPS.

Otevřete settings.py v textovém editoru:

Zaregistrujte nový modul v sekci INSTALLED_APPS:

INSTALLED_APPS

Uložte soubor a zavřete editor.

Krok 8. Migrace změn

Nyní, když jsme přidali všechny požadované modely, dalším krokem je aplikace těchto změn. Django aplikuje tato schémata na naši MySQL databázi.

Následující příkaz vygeneruje všechny potřebné migrační soubory. Výstup zobrazí umístění všech těchto souborů v adresáři projektu:

makemigrations

Následující příkaz vypíše všechny existující migrace:

Django Models 6

Všimněte si, že všechny migrace jsou označeny kromě 0001_initial, která byla vytvořena jako součást modelů Post a Comment.

Následující příkaz ukáže, jaký SQL dotaz Django provede pro spuštění migrací:

sample_app

Nyní už stačí pouze aplikovat migrace. Tyto migrace zapíší změny do databáze:

migrate

Step 9. Verifying Changes

To verify the changes, let’s have a look at our MySQL database. Start the MySQL shell as the Django user:

Next, change the current active database to the Django app database:

List all the tables from the database:

Lastly, to see the content of any of the tables, use the DESCRIBE query:

Django Models 7

Django Limitations with MySQL

When using MySQL as the database server for your Django app, there are a few things to keep in mind:

  • There’s not much support for transactions around schema-altering processes. Meaning, if a migration fails, it requires manually unpicking all the changes before trying another migration. There’s no way to roll back to an earlier point when the failed migration didn’t take place.
  • For most of the schema-altering processes, MySQL completely rewrites tables. In certain situations, it can be really time-consuming. At worst, the time complexity will be proportional to the number of rows to be added or columns to be removed. According to the official Django documentation, it could take one minute per million rows.
  • MySQL enforces a character limit for the name lengths of columns, tables, and indices. There’s also a limit on the total size of all columns and index covers. Django can go higher than the limit. Some backends other than MySQL can handle the higher limit of Django.

That’s why it’s strongly recommended to weigh your options and choose the appropriate one.

Final Thoughts

This guide successfully demonstrates how to add modules to an existing Django app. We used MySQL as the backend for the app. It also showcases some key Django concepts like models, how migration works, and how Django translates models into MySQL database tables.

Happy Computing!

author

Hark Labs

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.