Baňky pro Python - architektonický dotaz ohledně systému




Byl jsem pomocí Django Django a přechází do objektu požadavku na pohled, když je to běh. Vypadá to, že (z první pohled) v baňce s aplikací vlastní žádost a to importován (jako kdyby to byl statický zdroj). Nechápu to a já se jen snažím zabalit svůj mozek kolem WSGI a baňky, atd Každá pomoc je oceňována.
V žádosti baňky je thread-safe globální, takže se vlastně dělat jej importovat:



```
from flask import request

```

Nejsem si jistý, tato funkce se týká WSGI další WSGI mikro-rámce se projít požadavek jako pohled argument funkce. „Global“ Objekt request je rys baňky. Baňka také povzbuzuje k uložení dat uživatele, který je platný pro jeden požadavek na podobný objekt s názvem flask.g:



> 
> Sdílet údaje, které jsou platné po dobu jednoho požadavku pouze z jedné funkce do druhé, globální proměnná není dost dobré, protože to zlomí v závitových prostředí. Baňka poskytuje speciální předmět, který zajišťuje, že je platné pouze pro aktivní žádost a že se vrátí různé hodnoty pro každý požadavek. Stručně řečeno: to dělá správnou věc, jako je tomu u požadavku a relace.
> 
> 
>
<p>psaní plynulého rozhraní (s ním jsem <a href="http://www.google.ca/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0cbuqfjaa&amp;url=http%3a%2f%2fsoapboxautomation.com%2fproducts%2ffluentdwelling%2f&amp;ei=ao6ttcuck8sdgqesvpsqda&amp;usg=afqjcngcf99lzbzlrfvnrtst7qsww3kxwg">dabbled</a> ) vyžaduje více úsilí, ale má to výplaty, protože pokud to uděláte správně, je výsledný uživatelský kód jasnější. je to v zásadě forma specifického jazykového jazyka.</p><p>jinými slovy, pokud je váš kód načten mnohem více, než je napsán (a jaký kód není?), měli byste zvážit vytvoření plynulého rozhraní.</p><p>plynulá rozhraní jsou více o kontextu a jsou mnohem víc než jen způsoby konfigurace objektů. jak vidíte ve výše uvedeném odkazu, k dosažení:</p><ol> <li>kontext (takže když obvykle provádíte mnoho akcí ve stejném pořadí, můžete je zřetězit, aniž byste museli znovu a znovu prohlašovat svůj kontext).</li> <li>viditelnost (když jdete na <code>objecta.</code> pak vám inteligence dává spoustu rad. v mém případě výše, <code>plm.led.</code> vám poskytuje všechny možnosti pro ovládání vestavěné led a <code>plm.network.</code> vám poskytuje věci, které můžete dělat se síťovým rozhraním. <code>plm.network.x10.</code> vám dává podmnožinu síťových akcí pro zařízení x10. u inicializátorů konstruktoru to nedostanete (pokud si nepřejete, aby byl objekt konstruován pro každý jiný typ akce, který není idiomatický).</li> <li>reflexe (nepoužívá se ve výše uvedeném příkladu) - schopnost převzít výraz linq a manipulovat s ním je velmi výkonný nástroj, zejména v některých pomocných api, které jsem vytvořil pro testy jednotek. dokážu předat výraz getter get, sestavit spoustu užitečných výrazů, zkompilovat a spustit je, nebo dokonce použít getter k nastavení mého kontextu.</li> </ol><p>jedna věc, kterou obvykle dělám, je:</p><pre><code>test.property(t =&gt; t.someproperty) .initializedto(string.empty) .cantbenull() // tries to set to null and asserts argumentnullexception .yaddayadda(); </code></pre><p>nechápu, jak můžete něco takového udělat i bez plynulého rozhraní.</p><p><strong> edit 2 </strong>: můžete také udělat opravdu zajímavá vylepšení čitelnosti, jako například:</p><pre><code>test.listproperty(t =&gt; t.mylist) .shouldhave(18).items() .andthenafter(t =&gt; testaddingitemtolist(t)) .shouldhave(19).items(); </code></pre> <p>ne, to znamená, že každou noc je postaveno všechno, co bylo zkontrolováno v řízení zdroje. tato stavba je „noční stavba“.</p> Rozumím tomu, že ty peníze zabolí a zamrzí, ale je-li to byznysově kritické, tak se v první řdě řeší, aby web zase fungoval a peníze jsou až na konci seznamu k řešení.Zálohou jsem opravdu nemyslel původní data na webhostingu. Byť oni provozní zálohy taky dělají, těžko se k nim teď dostat. Spíš u prezentačního webu (ne ecommerce) může být provozní stav téměř totožný se stavem, jak web někdo vytvořil a to je ten, kdo může mít zálohy svého díla. <p>zdá se, že většina zmatku se týká funkcí, které by v modelu domény neměly vůbec existovat:</p><ul> <li> <p><strong>perzistence</strong> by nikdy nemělo být v modelu domény. vůbec nikdy. to je důvod, proč se spoléháte na abstraktní typy, jako je <code>irepository</code>, pokud část modelu někdy potřebuje udělat něco jako načtení jiné části modelu, a použít závislost injekce nebo nějakou podobnou techniku ​​k zapojení implementace. tak to udeřte ze záznamu.</p> </li> <li> <p><strong>autorizace</strong> není <em> obecně </em> součástí vašeho modelu domény, pokud není skutečně součástí domény, např. pokud píšete bezpečnostní software. mechanici, kterým je povoleno provádět to, co je v aplikaci, se běžně řeší v „edge“ úrovně business/domain, veřejných částí, se kterými mohou části ui a integrace skutečně hovořit - controller v mvc, services nebo samotný systém zasílání zpráv v soa ... získáte obrázek.</p> </li> <li> <p><strong>továrny</strong> (a předpokládám, že máte na mysli abstraktní továrny), nejsou zrovna <em> špatné </em>, které mají v doménovém modelu, ale jsou téměř vždy zbytečné. za normálních okolností máte továrnu pouze tehdy, když se vnitřní mechanika vytváření objektů může změnit. máte však pouze jednu implementaci doménového modelu, což znamená, že bude existovat pouze jeden druh továrny, která vždy vyvolá stejné konstruktory a další inicializační kód.</p> <p>můžete mít továrny na „pohodlí“, pokud chcete - třídy, které zapouzdřují běžné kombinace konstruktérských parametrů atd. - ale upřímně řečeno, obecně, pokud máte ve svém doménovém modelu mnoho továren, pak jen ztrácíte řádky kódu.</p> </li> </ul><p>takže jakmile všechny tyto trávníky odejdete, tak to prostě opustí ověření. to je jediný, který je tak složitý.</p><p><strong>ověření</strong> <em> je </em> součástí vašeho doménového modelu, ale je také součástí každé další komponenty aplikace. vaše uživatelské rozhraní a databáze budou mít svá vlastní, podobná, ale odlišná pravidla validace, založená na podobném, ale odlišném konceptuálním modelu. není skutečně určeno, zda objekty musejí mít metodu <code>validate</code>, ale i když ano, obvykle ji delegují do třídy validátoru (ne rozhraní - ověření je <strong>ne</strong> abstrakt v doménovém modelu je to zásadní).</p><p>mějte na paměti, že validátor je stále technicky součástí modelu; nemusí být připojen k agregovanému kořenovému adresáři, protože neobsahuje žádná data ani stav. doménové modely jsou koncepční věci, obvykle se fyzicky překládají do shromáždění nebo do sbírky sestav. pokud se váš kód delegace nachází v těsné blízkosti modelu objektu, nestresujte se nad „anemickým“ problémem; stále se to počítá.</p><p>k tomu všemu opravdu patří to, že pokud se chystáte udělat ddd, musíte pochopit, co je doména <em> </em>. pokud stále mluvíte o věcech, jako je vytrvalost a autorizace, jste na špatné cestě. doména představuje běžící stav systému - fyzické a koncepční objekty a atributy. do doménového modelu, období nepatří nic, co není přímo relevantní pro objekty a vztahy.</p><p>při zvažování, zda něco patří do doménového modelu, se zpravidla položte následující otázka:</p><p><strong>„může se tato funkčnost někdy změnit z čistě technických důvodů?“</strong> jinými slovy, nikoli kvůli jakékoli pozorovatelné změně skutečného podnikání nebo domény?</p><p>pokud je odpověď „ano“, pak nepatří do modelu domény. není součástí domény.</p><p>existuje velmi dobrá šance, že jednoho dne změníte svou infrastrukturu vytrvalosti a autorizace. nejsou proto součástí domény, jsou součástí aplikace. to platí také pro algoritmy, jako je řazení a vyhledávání; neměli byste jít a strčit implementaci binárního vyhledávacího kódu do svého modelu domény, protože vaše doména se týká pouze abstraktní koncepce vyhledávání, nikoli toho, jak to funguje.</p><p>pokud po odstranění všech věcí, na kterých vám nezáleží, zjistíte, že model domény je skutečně <em> anemický </em>, pak by to mělo sloužit jako docela dobrý náznak, že ddd je jednoduše nesprávným vzorem pro váš projekt.</p><p>některé domény jsou skutečně <em> </em> anemické. aplikace pro sociální bookmarking ve skutečnosti nemají o „doméně“ moc mluvit; všechny vaše objekty jsou v podstatě pouze data bez funkce. na druhé straně má obchodní a crm systém docela těžkou doménu; když načtete entitu <code>rate</code>, pak existuje rozumné očekávání, že ve skutečnosti <em> můžete dělat věci </em> s takovou mírou, například použít na objednané množství a nechte si zjistit objemové slevy a promo kódy a všechno zábavné.</p><p>doménové objekty, které pouze uchovávají data obvykle <em> do </em> znamenají, že máte anemický doménový model, ale to nutně <em> nemusí </em> znamená, že jste vytvořili špatný design - může to znamenat pouze to, že samotná doména je anemická a že byste měli používat jinou metodologii.</p> Podle vzhledu,podle toho jaké technické řešení potřebuji a hlavně podle výkonu. <p>databázi na straně serveru a programovací jazyk, který vyberete, je zcela na vás, protože zákazník nebude vědět, ani se nestará o to, v jakém jazyce je napsán, dokud bude fungovat. a protože ovládáte prostředí serveru, můžete použít cokoli, co chcete. vyberte si programovací jazyk a databázi, se kterou váš tým bude snadno pracovat a bude nejznámější.</p><p>pokud jde o stranu klienta, nemusíte si vybírat mezi flashem nebo javascriptem. můžete použít oba, pokud slouží určitému účelu. pokud je něco jednoduše animací kvůli animaci, flash je dobrá volba, protože je snadné vytvářet animace. a pokud někdo nemá přístup k blesku, například na mobilním zařízení, nebude mu chybět žádná funkčnost. pokud jsou animované bity funkční částí webové stránky, javí se javascript jako dobrý nástroj k použití.</p><p>fyi, ve webdesignu a programování není nic takového jako „příliš starý“. k dispozici je pouze ten správný nástroj a ne.</p> <p>sledujme tok důvěrných dat. v této analýze se rozumí, že cokoli může alice udělat, root může také dělat. přístup k datům by mohl mít také externí pozorovatel „o úroveň výš“ (např. s ​​fyzickým přístupem k snoop na diskové sběrnici nebo v hypervizoru, pokud je kód spuštěn ve virtuálním stroji).</p><p>nejprve jsou data načtena ze souboru. za předpokladu, že pouze alice má oprávnění ke čtení souboru a soubor není jinak uniknut, pouze alice může volat <code>cat /home/alice/fav\_food.txt</code> úspěšně. data jsou pak v paměti procesu <code>cat</code>, kde k němu má přístup pouze tento proces. data jsou přenášena potrubím z příkazu <code>cat</code> do volajícího prostředí; pouze dva zúčastněné procesy mohou vidět data na potrubí. data jsou pak v paměti procesu shell, opět soukromá pro tento proces.</p><p>v určitém okamžiku data skončí v prostředí shell. v závislosti na prostředí se to může stát, když je proveden příkaz <code>export</code>, nebo pouze když prostředí provádí externí program. v tomto okamžiku budou data argumentem systémového volání <a href="http://en.wikipedia.org/wiki/execve"><code>execve</code></a> . po tomto volání budou data v prostředí podřízeného procesu.</p><p>prostředí procesu je stejně soukromé jako zbytek paměti tohoto procesu (z <a href="http://lxr.linux.no/#linux+v3.3.2/include/linux/mm\_types.h#l330"><code>mm-&gt;env\_start</code></a> až <code>mm-&gt;env\_end</code> na mapě paměti procesu). je to <a href="http://lxr.linux.no/#linux+v3.3.2/fs/binfmt\_elf.c#l297">sousedící s hromadou výchozích vláken</a> . existuje však zvláštní mechanismus, který umožňuje jiným procesům prohlížet kopii prostředí: soubor <code>environ</code> v <a href="http://www.kernel.org/doc/documentation/filesystems/proc.txt"><code>/proc</code> adresář</a> (<code>/proc/$pid/environ</code>). tento soubor je <a href="http://lxr.linux.no/#linux+v3.3.2/fs/proc/base.c#l2975">čitelný pouze jeho vlastníkem</a> , kdo je <a href="http://lxr.linux.no/#linux+v3.3.2/fs/proc/base.c#l1541">živatel, který proces spouští</a> (u privilegovaného procesu je to efektivní uid). (všimněte si, že argumenty příkazového řádku v <code>/proc/$pid/cmdline</code>, na druhé straně, jsou čitelné pro všechny.) můžete auditovat zdroj jádra a ověřit, že je to jediný způsob, jak uniknout prostředí procesu.</p><p>existuje další potenciální zdroj úniku prostředí: během volání <a href="http://lxr.linux.no/#linux+v3.3.2/fs/exec.c#l1451"><code>execve</code></a> . systémové volání <code>execve</code> přímo nevnikne do prostředí. existuje však obecný <a href="http://lxr.linux.no/#linux+v3.3.2/kernel/auditsc.c">mechanismus audit</a> , který dokáže protokolovat argumenty každého systémového volání, včetně <code>execve</code>. pokud je tedy auditování povoleno, lze prostředí poslat přes <a href="http://people.redhat.com/sgrubb/audit/">mechanismus audit</a> a skončit v souboru protokolu. v slušně nakonfigurovaném systému má přístup k souboru protokolu pouze administrátor (v mé výchozí instalaci debianu je to <code>/var/log/audit/audit.log</code>, čitelné pouze rootem a zapisováno démonem <code>auditd</code> spuštěným jako root).</p><p>lhal jsem výše: napsal jsem, že paměť procesu nelze přečíst jiným procesem. ve skutečnosti to není pravda: linux stejně jako všechny unices implementuje systémové volání <a href="http://en.wikipedia.org/wiki/ptrace"><code>ptrace</code></a> . toto systémové volání umožňuje procesu zkontrolovat paměť a dokonce provést kód v kontextu jiného procesu. to umožňuje debuggerům existovat. alici dokáže sledovat pouze alice. pokud je proces privilegován (setuid nebo setgid), může jej sledovat pouze root.</p><p>závěr: <strong> prostředí procesu je k dispozici pouze uživateli (euid), který proces spouští </strong>.</p><p>pamatujte, že předpokládám, že neexistuje žádný jiný proces, který by mohl data vytéct. na normální instalaci systému linux neexistuje žádný kořenový program setuid, který by mohl vystavit prostředí procesu. (u některých starších odvětví byl <code>ps</code> kořenový program setuid, který analyzoval nějakou paměť jádra; některé varianty by šťastně zobrazovaly prostředí procesu všem a všem. v linuxu je <code>ps</code> bez oprávnění a získává jeho data z <code>/proc</code> jako každý jiný.).</p><p>(všimněte si, že to platí pro rozumně aktuální verze linuxu. před velmi dlouhou dobou si myslím, že v 1.x jaderných dnech bylo prostředí čitelné na celém světě.)</p> Velmi pravděpodobně něco se zdrojem. Víc se těžko na dálku určí. A není ten soubor zrovna nějakým procesem využíván? Vypadá to tak. Aha, a ty si myslis ze aplikacia ktoru chces instalovat je tak blba a pozre sa ako Petko, Palko z Maluzinej co ukazuje windows v okne?  
  
Teraz nieco pravdepodobnejsie, instalator aplikacie ma detekciu potrebneho HW.