1 Dynamické stránky v praxi Bedřich Košata2 Reálné scénáře Statické stránky + dynamický search Všechno dynamické spousta práce a opakujících se úkolů ...
spousta práce a opakujících se úkolů SQL není příliš přenosné mezi databázovými systémy => nelze za chodu vyměnit např. MySQL za PostgreSQL => je praktické mít nějakou vrstvu mezi databází a generovaným HTML
Model – jednoduché stránky ●
●
Skript si pomocí SQL vytáhne data z databáze a vytvoří HTML stránku SQL se často opakuje a je nepřenosné
Databáze
SKRIPT
HTML stránka
Model – databázová mezivrstva ●
●
●
●
Jednotlivé databázové “objekty” se modelují pomocí tříd Objektová mezivrstva se stará o generování SQL => při výměně databáze stačí upravit mezivrstvu Reálné objektové modely již různé databáze podporují
Databáze
Objektový datový model
SKRIPT
HTML stránka
Jak vypadá objektový model ●
Django
class Article( models.Model): title = HTMLTextField ("Title of the article") page = models.PositiveIntegerField ("Starting page") last_page = models.PositiveIntegerField("Last page", null=True, blank=True) authors = models.ManyToManyField( 'Author', through='Article2Author') doi = models.CharField (max_length=30) volume = models.PositiveSmallIntegerField() issue = models.PositiveSmallIntegerField() year = models.PositiveSmallIntegerField() abstract = HTMLTextField( "Abstract", null=True, blank=True) release_date = models.DateTimeField( null=True) keywords = models.ManyToManyField( 'Keyword', through='Article2Keyword')
class Volume( models.Model): number = models.PositiveSmallIntegerField( primary_key=True) year = models.PositiveSmallIntegerField(null=True) class Issue( models.Model): id = models.PositiveIntegerField( primary_key=True) volume = models.ForeignKey (Volume) number = models.PositiveSmallIntegerField() class Author( models.Model): given_name = HTMLCharField (max_length=50,null=True) surname = HTMLCharField (max_length=50) class Article( models.Model): title = HTMLTextField ("Title of the article") page = models.PositiveIntegerField ("Starting page") last_page = models.PositiveIntegerField("Last page", null=True, blank=True) authors = models.ManyToManyField( 'Author', through='Article2Author') doi = models.CharField (max_length=30) volume = models.PositiveSmallIntegerField() issue = models.PositiveSmallIntegerField() year = models.PositiveSmallIntegerField() abstract = HTMLTextField( "Abstract", null=True, blank=True) release_date = models.DateTimeField( null=True) keywords = models.ManyToManyField( 'Keyword', through='Article2Keyword')
Model – template engines ●
●
Skript generuje stránku na základě dat => není oddělená logika od prezentace dat Návrh a úpravy vzhledu stránek musí dělat programátor
Databáze
Objektový datový model
SKRIPT
HTML stránka
Model – template engines ●
●
Template engine (šablonový stroj :) odděluje prezentaci dat od logiky Lze oddělit roli programátora a designéra. data šablona