Na konfiguraci z ENV proměnných doporučuji django-environ https://django-environ.readthedocs.io/en/latest/
Honza po 22. 2. 2021 v 20:14 odesílatel MirekZv <mirek.zvol...@gmail.com> napsal: > @honza > > S pydanny/cookiecutterem jsem dělal. > Je to super, pokud člověk potřebuje zjistit, jak uspořádat projekt, jaká > udělat nastavení a jak je udělat. Pro nějakého samotáře asi skoro jediná > možnost, jak prakticky začít. > Pokud jsi někde ve firmě, máš navíc možnost obšlehnout firemní uspořádání, > jak si ho za léta na nějakých jiných projektech vymazlili. > > Ale cookiecutter zas jen rozkopírovává šablonu do projektu. Není to reuse. > Já chci reuse. Nechci to mít 4x a těkat mezi projekty, jestli už jsem i v > tomhle implementoval to vylepšení, co jsem udělal v jiném. > Jasně, u settings je diskutabilní, jestli si budou mezi projekty podobné > nebo ne. Můj názor je, že django je natolik brutálně (nechci psát: > nadbytečně) konfigurovatelné, že většinou pojedeš se stejnými nebo velmi > podobnými nastaveními. Proto reuse, ne rozkopírování načtyřikrát. > > @jakub > > Jasně. Ale __file__ je ten soubor, jehož kód právě běží. Pokud je tento > soubor mimo strom projektu, tak z __file__ nic nezjistíš. Abys měl nějaké > příklady: > $HOME/.virtualenvs/ > $HOME/.cache/pypoetry/virtualenvs/ > apod. > > @radim > > Ty se tam dotýkáš jedné věci, která mě zajímá, ale teď s tím nebudu > otravovat. Potřebuju už na těch projektech taky popojet, ale časem se asi k > tomu zeptám. > > Díky všem. > Dne pondělí 22. února 2021 v 16:33:15 UTC+1 uživatel honza...@gmail.com > napsal: > >> Jedna z nejvetsich vyhod Djanga je jeho rozsahly ekosystem. Jak uz tady >> psalo nekolik lidi tak tohle je vyreseny problem. Nez vymyslet vlastni >> reseni, doporucil bych sahnout k nejake existujici sablone. Ja mam treba >> rad https://github.com/pydanny/cookiecutter-django ze ktere jsem odvodil >> i svuj soucasny velky projekt. Resi vsechno vcetne nasazeni do dockeru >> pokud o to budes stat. >> >> >> Honza Král >> E-Mail: honza...@gmail.com >> Phone: +420 606 678585 <+420%20606%20678%20585> >> >> >> On Mon, Feb 22, 2021 at 4:30 PM Radim Novotny <novotn...@gmail.com> >> wrote: >> >>> Já mám součástí deploymentu (Ansible) nastavení environment var, která >>> obsahuje cestu, kam se to celé nainstalovalo. >>> Ostatní settings se odvozují od toho, takže třeba >>> >>> PROJECT_ROOT = os.environ.get('DJANGO_PROJECT_ROOT') >>> STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') >>> >>> Navíc tam je i kontrola, aby to fakt bylo nastavený, takže v settings.py >>> je >>> if not PROJECT_ROOT: >>> raise ImproperlyConfigured('Environment variable DJANGO_PROJECT_ROOT >>> is not defined.') >>> >>> Neřeší se, kde je nainstalovaný samotný kód aplikace (python package), >>> jestli je to venv/src/ nebo venv/lib/python. To mne už samořejmě nezajímá. >>> Pokud by mne to zajímalo, použiju __file__. >>> >>> Co se týká rozdělení settings, tak je fakt, že jich mám hodně a postupně >>> se importují. Deployment je zatím vždy na Debian a development je na >>> Dockeru, takže je to takový šroubovaný, ale všechno je to podchycené buď v >>> Ansible deploymentu a nebo v konfiguraci Dockeru. >>> >>> Možná ale vlastně potřebuješ úplně něco jinýho :) Přiznávám se, že jsem >>> se v tom moc nezorientoval. >>> >>> Radim >>> >>> On Mon, Feb 22, 2021 at 4:04 PM Jakub Vysoky <jakub....@gmail.com> >>> wrote: >>> >>>> Spis pouzij `__file__` >>>> >>>> V `settings.py` si z toho udelat `BASE_DIR` jak pises. `PROJECT_NAME` >>>> bych ja osobne spis napsal natvrdo, nez takhle magicky odvozoval. >>>> >>>> Na zorganizovani Django settings je vicero projektu a ja momentalne >>>> nejsem Django mega aktivni, takze nebudu konkretni doporucovat. >>>> >>>> On Mon, Feb 22, 2021 at 3:22 PM MirekZv <mirek....@gmail.com> wrote: >>>> >>>>> Závěr: Nakonec jsem se příliš bál toho `os.getcwd()` a udělal jsem si >>>>> tuto funkci: >>>>> ``` >>>>> import inspect >>>>> import os >>>>> from pathlib import Path >>>>> >>>>> def get_project_root(): >>>>> for prg in inspect.stack()[::-1]: >>>>> prg = prg.filename >>>>> if '/wsgi.py' in prg or '/asgi.py' in prg: >>>>> return Path(prg).parent.parent >>>>> elif '/manage.py' in prg: >>>>> return Path(prg).parent >>>>> else: >>>>> return Path(os.getcwd()) >>>>> >>>>> BASE_DIR = get_project_root() >>>>> PROJECT_NAME = BASE_DIR.name # to make some settings portable >>>>> (DATABASES=..) >>>>> PROJECT_DIR = BASE_DIR / PROJECT_NAME >>>>> ``` >>>>> >>>>> Dne pondělí 22. února 2021 v 15:18:01 UTC+1 uživatel MirekZv napsal: >>>>> >>>>>> @Honza, @starenka >>>>>> >>>>>> Ahoj chlapi, především díky za vlídné a věcné odpovědi, čekal jsem >>>>>> spíš, že po této otázce už na mě někdo vlítne a pěkně mi vynadá. >>>>>> >>>>>> Jo, máte přesně pravdu, bylo by to asi lepší (získat to v umístění >>>>>> projektu a předat to nějakým parametrem), než účelu nepřiměřené úsilí, co >>>>>> se s tím snažím dělat. >>>>>> >>>>>> Přidám nějakou story, jak jsem se do té situace dostal, snad z toho >>>>>> bude něco jasnější, i když osobně jsem nad svým postupem dost na >>>>>> rozpacích: >>>>>> >>>>>> 1. Nejdřív jsem copy/pastoval ze starého projektu pro vytvoření >>>>>> nového, jak se to asi běžně dělá. >>>>>> 2. Pak jsem začal myslet na nějaký reuse, tak jsem si udělal jednu >>>>>> django aplikaci na věci, které by asi byly potřebné ve 2+ projektech. >>>>>> 3. Pak mě začalo štvát, že tu aplikaci mám pod jednotlivými projekty, >>>>>> takže když ji někde změním, neměl bych zapomenout jít i do těch ostatních >>>>>> projektů a udělat v ní stejné změny i tam. >>>>>> 4. Pak jsem tu django aplikaci obecností odkopíroval do adresáře >>>>>> mimo, udělal jí vlastní git repozitář, a instaluji ji nějak jako `poetry >>>>>> add ../../obecna` >>>>>> 5. Pak mě začalo štvát, že běžná django settings mají tak 200 řádek >>>>>> kódu, stejně jsou vždycky skoro stejná, a když tam něco vylepším, tak zas >>>>>> abych šel po projektech a implementoval vylepšení i do ostatních (a nebo >>>>>> v >>>>>> tom měl chaos). >>>>>> 6. Pak jsem si zkusil jakési django-split-settings, rozdělil ten >>>>>> mega-file na 10 malých (vypadá to dobře, ale o vhodnosti tohoto mám velké >>>>>> pochyby, protože to už jsme možná trochu u zacházení s jmennými prostory >>>>>> jako ve Web2py). >>>>>> 7. Pak jsem většinu nastavení přepsal tak, aby byla obecná, bez >>>>>> závislostí na projektu. Příklad: Nemám důvod, proč by se moje postgres >>>>>> databáze neměla jmenovat stejně jako projekt. Tak proč psát do nastavení >>>>>> natvrdo jméno databáze? - toto je další věc, kterou na Djangu nemám rád, >>>>>> že >>>>>> když dělá startproject, tak rozkopíruje po x souborech na y míst jméno >>>>>> projektu jako string. >>>>>> 8. Pak jsem (ze stejných důvodů jako výše) to odsunul mimo ty mé >>>>>> projekty. >>>>>> >>>>>> Takže: mohl bych si to nastavit v projektech a předat jako parametr. >>>>>> Ale čím míň toho zůstane customizovaného pro projekty, tím lépe. >>>>>> Navíc to django-split-settings se volá pomocí jakýchsi funkcí >>>>>> include() a optional() a nejsem si tak úplně jistý, jak snadno tam jdou >>>>>> parametry předávat. >>>>>> >>>>>> Dne pondělí 22. února 2021 v 14:58:03 UTC+1 uživatel MirekZv napsal: >>>>>> >>>>>>> @John >>>>>>> >>>>>>> Jo, zase jsem horlivější než je vhodné. >>>>>>> Nemyslel jsem to tak, že já sám chci mít na stagingu/produkci/.. >>>>>>> různá prostředí. >>>>>>> Myslel jsem to tak, že kdyby se to někdy z nějakých nyní neznámých >>>>>>> důvodů ocitlo pod jiným prostředím (např. na různých cloudech), aby to >>>>>>> chodilo. >>>>>>> Čili přehnaná snaha o obecnost, která se nakonec skoro vždycky spíš >>>>>>> vymstí. >>>>>>> >>>>>>> Jinak vyvíjím i nasazuji na poslední Debian, takže vlastně skoro >>>>>>> identické prostředí na vývoji i produkci. >>>>>>> Díky tedy za doporučení dockeru, já už jsem si s ním kdysi pohrával, >>>>>>> ale zjistil jsem, že pro laika to zas tak ultrasnadné není, >>>>>>> pak se mi zdá, že to docela žere místo na disku (zvlášť když tam >>>>>>> zapomeneš něco nesmazaného z předchozích pokusů), což při nasazování na >>>>>>> (cizí=veřejný) virtuální server je dost zásadní, >>>>>>> a pak, když to jedu vše na Debianu, tak by ten přínos zas tak >>>>>>> zásadní nebyl. >>>>>>> Takže Docker je zatím odložen. >>>>>>> >>>>>>> Dne pátek 19. února 2021 v 22:59:35 UTC+1 uživatel starenka napsal: >>>>>>> >>>>>>>> A kdyz to teda volas z toho prokektu, proc to ty fci v tom modulu >>>>>>>> nepredas jako arg? >>>>>>>> >>>>>>>> >>>>>>>> On Fri, Feb 19, 2021, 22:51 Jan Bednařík <jan.be...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> A nemůžeš mít název toho projektu jako konstantu přímo v settings? >>>>>>>>> Zjišťovat to z názvu adresáře mi přijde příliš křehké. >>>>>>>>> >>>>>>>>> A Sites znáš? to je takovej dobrej způsob, jak pracovat s více >>>>>>>>> projekty / instalacemi / weby v jedné code base: >>>>>>>>> https://docs.djangoproject.com/en/3.1/ref/contrib/sites/ >>>>>>>>> >>>>>>>>> Honza >>>>>>>>> >>>>>>>>> pá 19. 2. 2021 v 19:50 odesílatel Jan Walter <jnw...@gmail.com> >>>>>>>>> napsal: >>>>>>>>> >>>>>>>>>> Asi nejsem sto se přesně naladit na charakter Tvého problému, ale >>>>>>>>>> pokud mohu poradit obecně, snažil bych se vystříhat tomu, aby "bylo >>>>>>>>>> na >>>>>>>>>> produkci pokaždé něco jinak". >>>>>>>>>> >>>>>>>>>> My v partě máme oblíbený docker, což je technologie využitelná >>>>>>>>>> např. na to, aby bylo, pokud možno, "všude všechno v základu stejně". >>>>>>>>>> Doporučuji Tvé pozornosti. >>>>>>>>>> >>>>>>>>>> John >>>>>>>>>> >>>>>>>>>> On Fri, 19 Feb 2021, 19:32 MirekZv, <mirek....@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> Běží mi kód ve stacku projektu, >>>>>>>>>>> ale dotyčný soubor se nachází mimo adresář projektu. >>>>>>>>>>> Jak bych zjistil jméno projektu? >>>>>>>>>>> >>>>>>>>>>> Abych to trochu vysvětlil: >>>>>>>>>>> V běžných django settings se řeší přesně toto, co potřebuju, >>>>>>>>>>> třeba nějak přibližně takto: >>>>>>>>>>> BASE_DIR = Path(__file__).resolve().parent.parent >>>>>>>>>>> PROJECT_NAME = BASE_DIR.name >>>>>>>>>>> >>>>>>>>>>> Potřebuju totéž zjistit v souboru, který není v BASE_DIR. >>>>>>>>>>> A to tak, že nechci nic nastavovat nikde v souborech pod >>>>>>>>>>> BASE_DIR. >>>>>>>>>>> >>>>>>>>>>> Napadají mě 2 možnosti: >>>>>>>>>>> - zjistit to nějak z inspect.stack() --ale nevím, jak to udělat >>>>>>>>>>> dost bezpečně >>>>>>>>>>> - vzít jenom os.getcwd() --za předpokladu, že mám úplně >>>>>>>>>>> standardní projekt, se stejným jménem rootu i adresáře projektu >>>>>>>>>>> >>>>>>>>>>> Zatím jsem se spokojil s tím posledním. >>>>>>>>>>> Myslíte, že by na to mohl být spoleh ve všech variantách na >>>>>>>>>>> produkci? >>>>>>>>>>> >>>>>>>>>>> Alternativně: Dá se nějak snadno zjistit z kódu settings file >>>>>>>>>>> (protože ten mám pod projektem; nebo prostě jakýkoli file, který je >>>>>>>>>>> bezpečně pod adresářem projektu (např. ve stacku mám jako první >>>>>>>>>>> manage.py, >>>>>>>>>>> jenže to asi na produkci bude pokaždé jinak). >>>>>>>>>>> >>>>>>>>>>> Díky, tedy kdyby někdo věděl. >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- >>>>>>>>>>> E-mailová skupina djan...@googlegroups.com >>>>>>>>>>> Správa: http://groups.google.cz/group/django-cs >>>>>>>>>>> --- >>>>>>>>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru >>>>>>>>>>> skupiny „django-cs“ ve Skupinách Google. >>>>>>>>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze >>>>>>>>>>> skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com >>>>>>>>>>> . >>>>>>>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>>>>>>>> https://groups.google.com/d/msgid/django-cs/2c569772-cc17-437d-80ec-0411a0207c33n%40googlegroups.com >>>>>>>>>>> <https://groups.google.com/d/msgid/django-cs/2c569772-cc17-437d-80ec-0411a0207c33n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>> . >>>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- >>>>>>>>>> E-mailová skupina djan...@googlegroups.com >>>>>>>>>> Správa: http://groups.google.cz/group/django-cs >>>>>>>>>> --- >>>>>>>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru >>>>>>>>>> skupiny „django-cs“ ve Skupinách Google. >>>>>>>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze >>>>>>>>>> skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com. >>>>>>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>>>>>>> https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D6zQW99QbNdrXSC7jGxNVxEB7y39M%2BDYUi%3DJQMG_MwLA%40mail.gmail.com >>>>>>>>>> <https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D6zQW99QbNdrXSC7jGxNVxEB7y39M%2BDYUi%3DJQMG_MwLA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- >>>>>>>>> E-mailová skupina djan...@googlegroups.com >>>>>>>>> Správa: http://groups.google.cz/group/django-cs >>>>>>>>> --- >>>>>>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru >>>>>>>>> skupiny „django-cs“ ve Skupinách Google. >>>>>>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze >>>>>>>>> skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com. >>>>>>>>> >>>>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>>>>>> https://groups.google.com/d/msgid/django-cs/CAMmgUkNE8pvmhtkfV2VaN_cmzdB1WytZSMev-tbW9KyuBbOEog%40mail.gmail.com >>>>>>>>> <https://groups.google.com/d/msgid/django-cs/CAMmgUkNE8pvmhtkfV2VaN_cmzdB1WytZSMev-tbW9KyuBbOEog%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> >>>>>>>> -- >>>>> -- >>>>> E-mailová skupina djan...@googlegroups.com >>>>> Správa: http://groups.google.cz/group/django-cs >>>>> --- >>>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny >>>>> „django-cs“ ve Skupinách Google. >>>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, >>>>> zašlete e-mail na adresu django-cs+...@googlegroups.com. >>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>> https://groups.google.com/d/msgid/django-cs/c00991f9-4c8c-49af-8b48-0a5a09865b68n%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/django-cs/c00991f9-4c8c-49af-8b48-0a5a09865b68n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> >>>> >>>> -- >>>> Jakub Vysoky >>>> >>>> mob: +420 605 852 377 <+420%20605%20852%20377> >>>> jab: jakub....@gmail.com >>>> twit: https://twitter.com/kvbik >>>> >>>> -- >>>> -- >>>> E-mailová skupina djan...@googlegroups.com >>>> Správa: http://groups.google.cz/group/django-cs >>>> --- >>>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny >>>> „django-cs“ ve Skupinách Google. >>>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, >>>> zašlete e-mail na adresu django-cs+...@googlegroups.com. >>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>> https://groups.google.com/d/msgid/django-cs/CAEO8NYxNcLRFtAL-LMLDjGL7q%3D1qLtm4nGYqO-2gP4HYScPFGg%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/django-cs/CAEO8NYxNcLRFtAL-LMLDjGL7q%3D1qLtm4nGYqO-2gP4HYScPFGg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> -- >>> E-mailová skupina djan...@googlegroups.com >>> Správa: http://groups.google.cz/group/django-cs >>> --- >>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny >>> „django-cs“ ve Skupinách Google. >>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, >>> zašlete e-mail na adresu django-cs+...@googlegroups.com. >>> >> Chcete-li tuto diskusi zobrazit na webu, navštivte >>> https://groups.google.com/d/msgid/django-cs/CADDKcsurJP0jNTR%2BckEF%2BiiyqgDryDcCZ-3kpcjWx_3bC7gBwg%40mail.gmail.com >>> <https://groups.google.com/d/msgid/django-cs/CADDKcsurJP0jNTR%2BckEF%2BiiyqgDryDcCZ-3kpcjWx_3bC7gBwg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > -- > E-mailová skupina django-cs@googlegroups.com > Správa: http://groups.google.cz/group/django-cs > --- > Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny > „django-cs“ ve Skupinách Google. > Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, > zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. > Chcete-li tuto diskusi zobrazit na webu, navštivte > https://groups.google.com/d/msgid/django-cs/79d6ee77-3d93-4c80-be82-0d84cc2c3ba3n%40googlegroups.com > <https://groups.google.com/d/msgid/django-cs/79d6ee77-3d93-4c80-be82-0d84cc2c3ba3n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- -- E-mailová skupina django-cs@googlegroups.com Správa: http://groups.google.cz/group/django-cs --- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/CAMmgUkNxCnk-bvq8qukcQbYB9%3Dd9o3prQ%3DZF4x6%2B%3DnRV8G_q6g%40mail.gmail.com.