Obsah
v Django třídy jsou objekty Krajta, Jako každý jiný objekt můžeme v době spuštění programu dosáhnout mnoha zajímavých efektů, díky tomu, že máme všechny Funkce a metody Pythonu k dispozici v Django můžeme vytvářet třídy, které mohou generovat dynamické třídy.Vytvoření dynamické třídy nám může poskytnout některé výhody, například vytvoření modelu ze třídy, a tím generování nových funkcí.
Jak fungují třídy v rámci?
Abychom se dostali k bodu generování dynamických modelů, musíme se nejprve ujistit, že rozumíme tomu, jak třídy v Pythonu fungují.
Víme, že třídy v Krajta jsou objekty, které lze vytvořit za běhu pomocí interního konstruktoru typ () a přijímání podrobností o tom, jak by měly být definovány.
Modely v Djangu
Protože víme, jak třídy v Pythonu fungují, musíme zdůraznit, že modely v Djangu jsou to standardní třídy Pythonu, pouze jsou deklarovány tak, že Django můžete je použít a že jsou to standardní třídy, umožňuje nám generovat modely za běhu.
První implementace
Podívejme se na následující obrázek s malým kódem:
Zde vidíme, jak Rámec Django Importujeme modul models, poté vytvoříme metodu pro vytvoření modelů pomocí typ konstruktoru () které jsme zmínili v předchozím bodě tutoriálu.
Tento zjednodušený přístup, který jsme použili, však zjevně nefunguje, problém je v tom, že Django očekává, že slovník bude obsahovat modul se svým kódem.
Nyní se podívejme na kód, pomocí kterého tento problém vyřešíme:
def create_model (name, module_path): návratový typ (name, (models.Model,), {'__module__': module_path})
Touto implementací jsme odstranili první chybu, která vyšla s prvním příkladem.
Přidejte možnosti konfigurace
Dokončíme náš kód pro generování dynamických modelů, včetně možnosti, že můžeme zahrnout možnosti konfigurace djangoK tomu použijeme Meta třída a chystáme se přepsat jeho provoz, aby nám naše nová implementace umožnila předefinovat způsob, jakým budeme nakládat s možnostmi, podívejme se na následujícím obrázku na kód, který již byl za tímto účelem dokončen:
V tomto kódu jsme jasně změnili některé aspekty našeho počátečního kódu, začneme definováním, že cesta modulu je: Django.db. ModelyOdtud získáme počáteční definice, jakmile k tomu dojde, vytvoříme slovník, do kterého jej přiřadíme __modul__ hodnota cesty, kterou jsme definovali.
Poté přepracujeme třídu Meta, čímž ušetříme možné problémy, o kterých jsme mluvili na začátku tohoto bodu, konečně můžeme zavolat naše metoda type (), předáním potřebných údajů a nikoli chyb.
S těmito novými znalostmi, které jsme vytvořili, již máme solidní základnu, se kterou můžeme komunikovat s kódem Django bezpečnějším způsobem, což nás staví do výhodné pozice pro vývoj našich aplikací a generování modelů dynamicky v době provádění našeho programu.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod