Kontakty

Bežný denník HTML zobrazenie. Zobrazenia Prihláste sa a odhláste sa. Vytvorte hlavnú stránku

Mnohí začínajú napísať projekt na prácu s jedinou úlohou, bez toho, aby to znamenalo, že môže rásť do systému riadenia multiplayerov, dobre, napríklad Boha a Boha, výrobu. A všetko sa zdá byť skvelé a cool, všetko funguje, kým nezačnete pochopiť, že kód, ktorý je napísaný, je úplne výlučne z barchov a hardcode. Kód sa zmieša s rozložením, požiadavkami a barmi, čo je niekedy aj čítanie. Tam je stlačený problém: Pri pridávaní nových funkcií je potrebné pokaziť s týmto kódom na veľmi dlhú dobu, zapamätanie "a čo tam bolo napísané?" A prekliate sa v minulosti.

Môžete dokonca počuť o šablónach dizajnu a dokonca flip tieto nádherné knihy:

  • E. Gamma, R. Helm, R. Johnson, J. Wlissidess "berie objektovo orientovaný dizajn. Návrhové vzory »;
  • M. Fowler "Architektúra firemných softvérových aplikácií".
A mnohí, nie sú vystrašené obrovskými smernicami a dokumentáciou, sa snažili študovať ktorýkoľvek z moderných rámcov a čelia zložitosti porozumenia (kvôli prítomnosti mnohých koncepcií architektúry, ktoré sú navzájom prepojené) odložili štúdium a aplikáciu moderného Zložky v "dlhom boxe".

Predložený článok bude užitočný predovšetkým nováčikom. V každom prípade dúfam, že za pár hodín môžete získať predstavu o implementácii modelu MVC, ktorý leží v srdci všetkých moderných webových rámcov, a tiež dostať "jedlo" pre ďalšiu reflexiu " ako na to". Na konci článku, výber užitočných odkazov, ktoré tiež pomôžu zistiť, čo je webový rámec pozostávajúci (okrem MVC) a ako fungujú.

Nachádza sa PHP programátori pravdepodobne nájsť niečo nové v tomto článku pre seba, ale ich pripomienky a pripomienky k hlavnému textu by boli veľmi mimochodom! Pretože Bez teórie je prax nemožná, a bez praxe je teória zbytočná, bude to najprv trochu teória, a potom sa obrátime na prax. Ak ste už oboznámení s konceptom MVC, môžete preskočiť sekciu s teóriou a okamžite ísť do praxe.

1. teória

Šablóna MVC opisuje jednoduchý spôsob, ako vytvoriť aplikačnú štruktúru, ktorej účelom je obchodná logika od užívateľského rozhrania. Výsledkom je, že aplikácia je jednoduchšia ako zmenšená, je testovaná, sprevádzaná a samozrejme implementovaná.

Zvážte koncepčný diagram šablóny MVC (podľa môjho názoru - to je najúspešnejšia schéma tých, ktoré som videl):

V architektúre MVC model poskytuje údaje a obchodné logické pravidlá, prezentácia je zodpovedná za užívateľské rozhranie a regulátor poskytuje interakciu medzi modelom a reprezentáciou.

Typická sekvencia aplikácie MVC môže byť opísaná nasledovne:

  1. Keď príde používateľ na webový prostriedok, inicializačný skript vytvorí inštanciu aplikácie a spustí ho vykonať.
    Zobrazí sa vzhľad, povedzte hlavnú stránku stránky.
  2. Aplikácia prijíma žiadosť užívateľa a určuje požadovaný kontrolér a činnosť. V prípade hlavnej stránky sa vykoná predvolená akcia ( index).
  3. Aplikácia vytvára inštanciu regulátora a spustí metódu akcie,
    v ktorom, napríklad, obsahuje modelové hovory, ktoré čítajú informácie z databázy.
  4. Potom akcia generuje prezentáciu s údajmi získanými z modelu a zobrazí výsledok pre používateľa.
Model - Obsahuje aplikačnú obchodnú logiku a zahŕňa metódy odberu vzoriek (tieto môžu byť metódy ORM), spracovanie (napríklad pravidlá validácie) a poskytovanie špecifických údajov, ktoré ho často robí veľmi hrubým, čo je celkom normálne.
Model by nemal s užívateľom priamo komunikovať. Všetky premenné súvisiace s požiadavkou používateľa musia byť spracované v regulátore.
Model by nemal generovať HTML alebo iný displejový kód, ktorý sa môže líšiť v závislosti od potrieb používateľa. Takýto kód by mal byť spracovaný v druhoch.
Rovnaký model môže byť napríklad model autentifikácie používateľa použiť v používateľovi av správnej časti aplikácie. V tomto prípade môžete urobiť všeobecný kód v samostatnej triede a zdedená z neho, určovanie v špecifických metódach dedičov.

vyhliadka - Používa sa na špecifikáciu externého zobrazenia údajov získaných z regulátora a modelu.
Typy obsahujú značku HTML a malé kódy PHP vložky do obtoku, formátovania a zobrazenia údajov.
Nevykonávajte priamo do databázy. To by malo urobiť modely.
Nepracujte s údajmi získanými od požiadavky používateľa. Túto úlohu musí vykonať regulátor.
Môže priamo pristupovať k vlastnostiam a metódam ovládača alebo modelov na získanie hotových dát.
Typy sú zvyčajne oddelené spoločnou šablónou obsahujúcou značkou, ktorá je spoločná pre všetky strany (napríklad uzáver a suterén) a časť šablóny, ktorá sa používa na zobrazenie údajov z výstupu modelu alebo zobrazovania formulárov zadávania údajov.

Regulátor - Spojenie spojovacích modelov, typov a iných komponentov v pracovnej aplikácii. Regulátor je zodpovedný za zaobchádzanie s požiadavkami používateľa. Regulátor by nemal obsahovať sql dotazy. Je lepšie ich udržať v modeloch. Regulátor by nemal obsahovať HTML a iné značenie. Stojí to za to druhy.
V dobre navrhnutej aplikácii MVC sú regulátory zvyčajne veľmi tenké a obsahujú len niekoľko desiatok čiar kódu. Čo si nemôžete rozprávať o hlúpe regulátoroch tuku (SFC) v CMS Joomla. Logika regulátora je dosť typická a jeho veľká časť je vyrobená v základných triedach.
Modely, naopak, veľmi hrubé a obsahujú väčšinu kódu spojeného s spracovaním údajov, pretože Štruktúra dát a obchodná logika obsiahnutá v nich sú zvyčajne celkom špecifické pre konkrétnu aplikáciu.

1.1. Predný regulátor a regulátor stránky

Vo väčšine prípadov sa používateľská interakcia s webovou aplikáciou prejde cez odkazy podľa odkazu. Pozrite sa teraz na panel s adresou prehliadača - na tomto odkaz ste dostali tento text. Pre iné odkazy, napríklad umiestnené vpravo na tejto stránke, dostanete iný obsah. Odkaz teda predstavuje špecifickú webovú aplikáciu.

Dúfam, že ste si už všimli, že rôzne stránky môžu byť dokonalé rôzne formáty pre budovanie adresného reťazca. Každý formát môže zobraziť architektúru webovej aplikácie. Hoci to nie je vždy prípad, ale vo väčšine prípadov je to zjavná skutočnosť.

Zvážte dve možnosti pre panel s adresou, ktorý zobrazuje určitý text a užívateľský profil.

Prvá možnosť:

  1. www.example.com/article.php?id\u003d3
  2. www.example.com/user.php?id\u003d4.
Tu je každý skript zodpovedný za vykonávanie konkrétneho príkazu.

Druhá možnosť:

  1. www.example.com/index.php?artical\u003d3
  2. www.example.com/index.php?user\u003d4
A tu sa všetky odvolania vyskytujú v jednom scenári index.php..

Prístup s mnohými interakčnými bodmi môžete sledovať na fórach s PHPBB Engine. Zobrazenie fóra sa vyskytuje skriptom viewForum.php., Zobraziť tému prostredníctvom viewtopic.php. atď. Druhý prístup, s prístupom cez jeden súbor fyzického skriptu, možno pozorovať v mojom obľúbenom CMS Modx, kde prechádzajú všetky odvolania index.php..

Tieto dva prístupy sú úplne iné. Prvá je charakteristická pre šablónu ovládača stránky (ovládač strany) a druhý prístup je implementovaný vzorom regulátora dotazu (predný regulátor). Regulátor stránky je dobre používaný pre stránky s pomerne jednoduchou logikou. Ovládač požiadaviek kombinuje všetky akcie na spracovanie žiadostí na jednom mieste, čo mu dáva ďalšie funkcie, vďaka ktorým môžete implementovať zložitejšie úlohy, než zvyčajne vyriešené kontrolórom stránky. Nebudem ísť do detailov o implementácii regulátora stránky a poviem len, že regulátor dotazu bude vyvinuté v praktickej časti (niektoré podobnosti).

1.2. URL smerovanie

Smerovanie URL umožňuje nakonfigurovať aplikáciu pre prijímanie požiadaviek na adresu URL, ktoré nespĺňajú skutočné súbory aplikácií, ako aj používanie CNC, ktoré sú sémanticky významné pre používateľov a sú preferované pre optimalizáciu pre vyhľadávače.

Napríklad pre obvyklú stránku, ktorá zobrazuje formulár spätnej väzby, adresa URL by mohla vyzerať takto:
http://www.example.com/contacts.php?action\u003dfeedback

Približný spracovateľský kód v tomto prípade:
prepínač ($ _GET ["ACTION"] (prípad "O": vyžadujú_once (ďalej len "o .php"); // Page "O nás" Prestávka; Prípad "Kontakty": vyžadujú_once ("Contacts.php"); // Stránka "Kontakty" Prestávka; Prípad "Spätná väzba": vyžadujú_once ("Feedback.php"); // Page "Spätná väzba" Prestávka; Predvolené: vyžadujú_once (ďalej len "strana 404.php"); // strana "404" prestávka; )
Myslím, že to skoro všetci urobili.

Pomocou smerovacieho motora URL môžete nakonfigurovať žiadosť o prijímanie takýchto žiadostí na rovnaké informácie:
http://www.example.com/contacts/feedback

Kontakty sú regulátor a spätná väzba je metóda regulátora kontaktov, ktorá predstavuje formulár spätnej väzby atď. V tejto otázke sa vrátime v praktickej časti.

Stojí tiež za to, že mnohé routery webových rámcov umožňujú vytvoriť ľubovoľné trasy URL (uveďte, čo každá časť URL) a pravidiel ich spracovania.
Teraz máme dostatočné teoretické vedomosti, aby sme mohli ísť do praxe.

2. prax

Ak chcete začať, vytvorte nasledujúcu štruktúru súborov a priečinkov:

Pri pohľade dopredu budem hovoriť, že základný priečinok uloží základný model, pohľad a regulátor.
Ich potomkovia budú uložené v riaditeľoch regulátorov, modelov a názorov. Spis index.php. Toto je bod v priebehu žiadosti. Spis bootstrap.php. Spustí sa na prevzatie aplikácie pripojením všetkých potrebných modulov atď.

Pôjdeme postupne; Otvorte súbor index.php a vyplňte ho nasledujúcim kódom:
ini_set ("Display_Errors", 1); Vyžadujú_once "aplikácia / bootstrap.php";
Nemali by tu byť žiadne otázky.

Ďalej sa okamžite prejdeme do Falu bootstrap.php.:
vyžadujú_once "jadro / model.php"; Vyžadujú_once "jadro / view.php"; Vyžadujú_once "jadro / controller.php"; Vyžadujú_once "core / route.php"; Trasa :: Start (); // Spustite smerovač
Prvé tri riadky budú pripojené doteraz neexistujúce súbory jadra. Posledné riadky zapojte do súboru s triedou smerovača a spustite ho na zavolanie metódy statického štartu.

2.1. Implementácia routeru URL

Zatiaľ odmietnem z implementácie modelu MVC a bude trvať mrachrutizáciu. Prvý SH je, že musíme urobiť, zapíšte si nasledujúci kód .htaccess.:
RewriteEngine na RewriteCond% (požiadavka_Filename)! -F Rewitecond% (Request_Filename)! -D RewriteRule.
Tento kód presmeruje spracovanie všetkých stránok index.php.Čo potrebujeme. Pamätajte si v prvej časti. Hovorili sme o prednom regulátore?!

Smerovanie budeme umiestnené v samostatnom súbore route.php. V adresári Core. V tomto súbore popisujeme triedu trasy, ktorá spustí metódy regulátorov, čo zase vytvorí pohľad na stránky.

Obsah súboru route.php

trieda trasy ( Statické. Štart funkcie () ( // regulátor a predvolená akcia $ Controller_name \u003d "main"; $ Akcie_name \u003d "index"; $ Trasy \u003d explodovať ("/", $ _server ["Request_uri"]); // Získajte názov regulátora Ak (! Prázdne ($ trasy)) ($ controller_name \u003d $ trasy;) // Získajte názov akcie Ak (! prázdne ($ trasy)) ($ akcie_name \u003d $ trasy;) // Pridať predpony $ model_name \u003d "model_". $ controller_name; $ Controller_name \u003d "Controller_". $ Controller_name; $ Akcie_name \u003d "akcia_". $ Akcie_name; // puzdro súboru s triedou triedy (modelový súbor nemusí byť) $ model_file \u003d strtolower ($ model_name). "PHP"; $ Mode_path \u003d "aplikácia / modely /". $ Model_file; Ak (súbor_exists ($ model_path)) (zahŕňajú "aplikácie / modely /". $ Model_file;) // puzdro súboru s triedou regulátora $ Controller_file \u003d strtolower ($ controller_name). "PHP"; $ Controller_path \u003d "Application / Controllers /". $ Controller_file; Ak (File_Existi ($ Controller_path)) (zahŕňajú "Aplikácia / Controllers /". $ Controller_file;) inak ( / * Bolo by to správne hodiť výnimku, ale na zjednodušenie okamžite vykonať presmerovanie na stránku 404 * / Trasa :: errorPage404 (); ) // Vytvorte regulátor $ Controller \u003d Nový $ Controller_Name; $ Akcie \u003d $ akcie_name; Ak (Metod_existy ($ Controller, $ Action)) // Zavolajte regulátor $ Controller -\u003e $ akcie (); ) Inak ( // To by bolo múdrejšie hodiť výnimku Trasa :: errorPage404 (); )) funkcia ERRECTMAGE404 () () () ( $ host \u003d "http: //". $ _ server ["http_host"]. "/"; Hlavička ("http / 1.1 404 nebol nájdený"); Hlavička ("Stav: 404 nebol nájdený"); Hlavička ("Umiestnenie:". $ Hostiteľ. "404"); ))


Poznamenávam, že v triede je implementovaná veľmi zjednodušená logika (napriek objektu Surround) a môže mať dokonca aj bezpečnostné problémy. Bolo to trvalé, pretože Písanie plnohodnotnej triedy smerovania si zaslúži aspoň samostatný článok. Zvážte hlavné body ...

V elementom globálneho poľa $ _server ["request_uri"] obsahuje úplnú adresu, pre ktorú sa používateľ adresoval.
Napríklad: príklad.ru/contacts/feedback

Pomocou funkcie explodovať. Uskutočňuje sa oddelenie adries. V dôsledku toho získame názov regulátora pre príklad uvedený vyššie, je to regulátor. kontakty. a názov akcie, v našom prípade - spätná väzba.

Ďalej je pripojený modelový súbor (model môže byť chýbajúci) a súbor regulátora, ak existujú a nakoniec sa vytvoria, inštancia regulátora je vytvorená a akcia sa opäť nazýva akcia, ak bola opísaná v triede kontroléra .

Pri prepínaní, napríklad na:
example.com/portfolio.
alebo
example.com/portfolio/index
router vykonáva nasledovné:

  1. pripojte súbor model_portfolio.php z priečinka modelov obsahujúcich triedu model_port folio;
  2. pripojte súbor Controller_Portfolio.PHP z priečinka regulátorov, ktorý obsahuje triedu Controller_Portfolio;
  3. vytvorte inštanciu triedy Controller_Portfolio a spôsobí, že predvolená akcia - Action_index opísaná v ňom.
Ak sa užívateľ pokúsi kontaktovať adresu neexistujúceho regulátora, napríklad:
example.com/UFO.
ktorý ho prenesie na stránku "404":
example.com/404.
To isté sa stane, ak sa užívateľ otočí k akcii, ktorý nie je opísaný v regulátore.

2.2. Návrat k implementácii MVC

Otočíme sa na priečinok CORE a pridajte tri ďalšie súbory do súboru Route.php: model.php, view.php a controller.php

Dovoľte mi pripomenúť, že budú obsahovať základné triedy, ktorých písanie začneme teraz.

Obsah súboru model.php.
model triedy ( Verejnosť funkcia get_data () () ( } }
Trieda triedy obsahuje jedinú metódu odberu vzoriek údajov, ktorá sa prekrýva v triedach potomkov. Keď vytvárame triedy potomkov, všetko bude jasnejšie.

Obsah súboru view.php.
zobrazenie triedy ( // verejné $ template_view; // Tu môžete zadať všeobecný pohľad na predvolené nastavenie. funkcia generovať ( $ Content_view, $ template_view, $ data \u003d null) { / * Ak (Is_array ($ data)) (// transformujeme prvky poľa do extrakčných premenných ($ dát);) * / Zahŕňajú "aplikácie / zobrazenia /". $ Template_view; ))
Nie je ťažké uhádnuť, že metóda vygenerovať Navrhnuté tak, aby vytvorili typ. Nasledujúce parametre sa prenášajú:

  1. $ Content_file - Typy obsahu stránky odrážajúce;
  2. $ template_file - spoločná šablóna pre všetky stránky;
  3. $ Data - pole obsahujúce prvky obsahu stránky. Zvyčajne naplnené v modeli.
Funkcia zahŕňajúca je dynamicky spojená spoločným šablónom (zobrazením), vo vnútri, ktorý bude vložený pohľad.
zobrazenie konkrétneho obsahu stránky.

V našom prípade bude všeobecná šablóna obsahovať hlavičku, menu, bočný panel a päty a obsah stránky bude obsiahnutý v samostatnom formulári. Opäť sa to zjednodušuje.

Obsah súboru controller.php.
regulátor triedy ( Verejný model $; Verejný pohľad $; funkcia __construct () () $ THIS -\u003e Zobraziť \u003d Nový pohľad (); ))
Metóda akcie_index. - Toto je akcia spôsobená štandardom, budeme ho zablokovať pri implementácii tried potomkov.

2.3. Implementácia tried potomkov modelu a regulátora, vytvorenie zobrazenia

Teraz najzaujímavejšie začína! Naša webová stránka Obchodná karta bude pozostávať z nasledujúcich stránok:
  1. hlavný
  2. Služby
  3. Portfólio
  4. Kontakty
  5. Rovnako ako - strana "404"
Pre každý z týchto stránok je vlastný regulátor z priečinka regulátorov a zobrazenie z priečinka Zobrazenie. Niektoré stránky môžu používať model alebo model z priečinka modelov.

Súbor oddelene vybraný na predchádzajúcom obrázku. template_view.php. - Toto je šablóna obsahujúca celkovú značku pre všetky strany. V najjednoduchšom prípade by mohol vyzerať takto:
<hTML LANG \u003d "RU"\u003e <hlava\u003e <meta Charset \u003d "UTF- 8"\u003e <názov\u003ehlavnýnázov\u003e hlava\u003e <telo\u003e $ Content_VIEW; ?\u003e telo\u003e hTML\u003e
Ak chcete zobraziť miesto prezentatívneho zobrazenia, šablóna CSS sa prekrýva a integruje ju do našej stránky zmenou štruktúry HTML Markup a pripojte súbory CSS a Javascript:
<link Rel \u003d "Styles" Type \u003d "Text / CSS" Href \u003d "/ CSS / Style.css" /\u003e <skript src \u003d "/ js / jquery-1.6.2.js" TYP \u003d "text / javascript"\u003eskript\u003e

Na konci článku, v časti "Výsledok" odkaz na úložisko githubu s projektom, ktorý bol vykonaný na integráciu jednoduchej šablóny.

2.3.1. Vytvorte hlavnú stránku

Začnime s regulátorom controller_main.php.Tu je jeho kód:
class Controller_main rozširuje regulátor ( funkcia Action_index () $ THIS -\u003e View-\u003e Generovať ("main_view.php", "template_view.php"); ))
V metóde vygenerovať Inštancia triedy zobrazenia je prenášaná názvami spoločných súborov šablón a typu obsahu stránky.
Okrem indexu v regulátore, samozrejme, môžu byť obsiahnuté iné opatrenia.

Súbor so spoločným zobrazením sme považovali za skôr. Zvážte súbor obsahu main_view.php.:
<h1\u003eVitajte!h1\u003e <p\u003e <iMG SRC \u003d "/ Images / Office-Small.jpg" ALIGN \u003d "Vľavo"\u003e <href \u003d "/"\u003eTím ololosh.a\u003e - Tím prvotriednych špecialistov vo vývoji webových stránok s dlhoročnými skúsenosťami zozbieraním mexických masky, bronzových a kamenných sochy z Indie a Ceylon, Bas-Reliéfy a sochy vytvorené majstrov Rovníkovej Afriky pre päť až šesť rokov .. .p\u003e
Obsahuje jednoduchú markup bez akýchkoľvek hovorov PHP.
Ak chcete zobraziť hlavnú stránku, môžete použiť v jednej z nasledujúcich adries:

  • metódy knižníc, ktoré implementujú údaje o abstice. Napríklad metódy knižnice hrušky MDB2;
  • metódy orm;
  • metódy práce s Nosql;
  • a atď.
  • Pre jednoduchosť tu nebudeme používať požiadavky SQL alebo ORM operátori. Namiesto toho sme chytiť skutočné údaje a okamžite vrátime výsledné pole.
    Modelový súbor model_portfolio.php. V priečinku modelov modelov. Tu je jeho obsah:
    trieda model_portfolio rozširuje model ( Verejnosť funkcia get_data () () ( Return Array (pole ("ROK" \u003d\u003e "2012", "miesto" \u003d\u003e "http://dunkenkelbeer.ru", "Popis" \u003d\u003e "Dunkel Tmave pivo propagačné miesto z nemeckého výrobcu Löwenbraü vyrobeného v Ruskovom pivovarskej spoločnosti" môže Ibev ".), Array ("Rok" \u003d\u003e "2012", "lokalita" \u003d\u003e "http://zopomobile.ru", "Popis" \u003d\u003e "Ruský jazykový katalóg čínskych telefónov ZOPO na základe systému Android OS a príslušenstvo k nim."), // ROBIŤ); ))

    Trieda regulátora modelu je obsiahnutá v súbore. controller_portfolio.php.Tu je jeho kód:
    trieda Controller_Portfolio rozširuje regulátor ( funkcia __construct () () $ this -\u003e model \u003d nový model_portfolio (); $ THIS -\u003e Zobraziť \u003d Nový pohľad (); ) funkcia Action_index () $ Data \u003d $ this -\u003e model-\u003e get_data (); $ THIS -\u003e View-\u003e Generovať ("portfolio_view.php", "template_view.php", $ data); ))
    V premennej Údaje. Pole vrátené metódou get_data.ktoré sme považovali za staršie.
    Ďalej sa táto premenná prenáša ako parameter metódy. vygenerovaťktorý je tiež prenášaný: názov súboru so spoločným šablónom a názvom súboru obsahujúceho zobrazenie obsahu stránok.

    Zobraziť obsah obsahu je v súbore portfólio_view.php..

    Portfólio

    Všetky projekty v nasledujúcej tabuľke sú fiktívne, takže ani sa nepokúšajte prejsť odkazy na odkazy. " ; }


    Odkaz na GitHub: https://github.com/vitalyswipe/tinymvc/zipball/v0.1

    Ale v tejto verzii som načrtnil nasledujúce triedy (a zodpovedajúce im):

    • Controller_Login, v ktorom sa vytvorí formulár s formulárom na zadanie prihlasovania a hesla, po vyplnení postupu autentifikácie a ak je to úspešné, používateľ je presmerovaný na admin.
    • CONTORLER_ADMIN s indexovou akciou, v ktorom sa skontroluje, ak bol užívateľ predtým povolený na stránke ako administrátor (ak bol, zobrazí sa typ administrátora) a vykurovanie cvičenia na vykurovanie.
    Autentifikácia a autorizácia je ďalšou témou, takže sa tu neberie do úvahy, ale iba odkaz je uvedený vyššie, takže je to z toho, čo na tlač.

    4. Záver

    Šablóna MVC sa používa ako architektonický základ v mnohých rámcoch a CMS, ktoré boli vytvorené, aby bolo možné vyvinúť kvalitatívne zložitejšie rozhodnutia na kratšie obdobie. To bolo možné zvýšením úrovne abstrakcie, pretože existuje limit zložitosti štruktúr, ktoré môžu prevádzkovať ľudský mozog.

    Ale použitie webových rámcov, ako je Yii alebo Kohana, pozostávajúce z niekoľkých stoviek súborov, pri vývoji jednoduchých webových aplikácií (napríklad návštevou lokalít) nie je vždy vhodné. Teraz môžeme vytvoriť krásny model MVC, aby sme nezmiešali kód PHP, HTML, CSS a JavaScript v jednom súbore.

    Tento článok je skôr ako východiskový bod pre štúdium CMF ako príklad niečoho, čo je správne, čo možno považovať za základ vašej webovej aplikácie. Možno vás dokonca inšpirovala a už premýšľate o písaní mikrofraymwork alebo CMS na základe MVC. Ale predtým, než vymyslieť ďalšie bicykel s "Blackjack a Sluts", premýšľajte znova, možno sa vaše úsilie môže byť zrušene poslaní na rozvoj a pomôcť komunite existujúceho projektu?!

    P.S.: Článok bol prepracovaný s prihliadnutím na niektoré pripomienky, ktoré zostali v pripomienkach. Kritika sa ukázala byť veľmi užitočná. Súdiac podľa odpovede: Komentáre, odvolania v osobnom a počte užívateľov Pridané príspevky Pridať k obľúbeným pripojenie tohto príspevku nebolo také zlé. Bohužiaľ, to nie je možné vziať do úvahy všetky želania a písať viac a viac podrobností pre nedostatok času ... Ale možno to urobí tie tajomné osobnosti, ktoré mínus pôvodnú možnosť. Veľa šťastia v projektoch!

    5. Výber užitočných odkazov na sabzh

    Výrobok je veľmi často ovplyvnený témou webových rámcov - to je veľmi rozsiahla téma, pretože dokonca aj mikrofraymvory pozostávajú z mnohých komponentov mazaného spojeného s ostatnými a nebolo by potrebné, aby jeden článok, aby o týchto zložkách nepovedal. Avšak, rozhodol som sa tu priniesť malý výber odkazov (pre ktoré som išiel pri písaní tohto článku), ktorý sa nevzťahuje na tému rámcov.

    Tento príklad ukazuje, ako sa automaticky odhlásiť s predvolenou konfiguráciou kmeňovej bezpečnosti.

    Ak chcete odhlásiť, potrebujeme len prístup URL "/ Odhlásiť" s požiadavkou na príspevok.

    V tvare príspevku / odhlásenie musíme zahrnúť aj CSRF token, ktorý je ochranou proti útoku CSRF.

    Uvidíte príklad, ako to urobiť.

    Java Config Class.

    , @ Configuration @eniblewebsEcurity @eniblewebmmvc @componentscan Public Class AppConfig rozširuje WebseccurityConfigureraPer (chránená neplatná konfigurácia (httpsecurity http) hodí výnimku (http.authorizereQuests (). A () .FORMOGIN ();) @override verejnosť Void Configure (AutenticationManagerBuilder Builder) hodí výnimku (Builder.InMemoryAuthentication () .withuser ("Joe") .Password ("123")., (); ViewResolver.SetPrefix ("/ Web-Inf / Views /"); ViewResolver.sETFIX (". JSP"); RETURN viewResolver;)

    Všimnite si, že vo vyššie uvedenom konfigurácii sme tiež nakonfigurovať konfiguráciu (HTPAULT HTTP), aby sme vynechali predvolenú základnú autentifikáciu (pozri predvolenú základnú autentifikáciu (pozri pôvodný zdrojový kód metodiky) a používajte autentifikáciu založenú na formulári. Robíme tak preto, že prehliadače vyrovnávajú základné autentifikačné informácie agresívne (po prvom úspešnom prihlásení) a neexistuje žiadny spôsob, ako odhlásiť používateľa v aktuálnej relácii. Vo väčšine príkladov nebudeme používať základný autentifikačný mechanizmus.

    Regulátor

    @ Controller Public Class Examplecontroller (@reQuestMapping ("/") Public String HandlereQuest2 (Modelmap mapa) (mapa Modelmap) (mapa ModelMap) (Map.adDattribute ("Time", LOCALDATETIME.NOW (). TOSTRING ());

    Stránka JSP

    sRC / MAIN / WEBAPP / WEB-INF / VYHĽADANIE / MY-Page.JSP

    Príklad jarného zabezpečenia

    Čas: $ (Time)



    Ak chcete vyskúšať príklady, spustite vstavanú Tomcat (nakonfigurovaný v Pom.ML z príkladu projektu nižšie):

    MVN TOMCAT7: RUN-VAR

    Výkon.

    Počiatočný prístup k URI "/" bude presmerovať na "/ prihlásenie":

    Po odoslaní užívateľského mena a hesla, ako sme nastavení v našej triede AppConfig:

    Kliknutím na tlačidlo "Odhlásiť":


    Príklad projektu.

    Použité závislosti a technológie:

    • spring-Security-Web 4.2.3.Rerease: Spring-Security-Web.
    • spring-Security-Config 4.2.3.Rerease: Spring-Security-Config.
    • spring WebMVC 4.3.9.Release: Spring Web MVC.
    • javax.servlet-API 3.1.0 Java servlet API
    • JDK 1.8.
    • Maven 3.3.9.

    Upraviť súbor. uRLS.PY. Žiadosti Účet:

    z django.conf.urls import URL z. Import Views UrlPatterns \u003d [# Predchádzajúce prihlasovacie zobrazenie # URL (R "^ login / $", views.ser_login, meno \u003d "prihlásenie"), # Prihlásenie / Odhlásiť URL URL (R "^ Login / $", "django.contrib.auth.Views.Login", meno \u003d "prihlásenie"), adresa URL (R "^ logout / $", "django.contrib.auth.Views.Logout", Názov \u003d "Odhlásiť"), URL (R "^ logout-potom-login / $", "django.contrib.auth.Views.Logout_then_login", Názov \u003d "LOGOUT_THEN_LOGIN"),]

    Kondicifikujeme šablónu URL na prezentáciu user_login.predtým určené na používanie prezentácie prihlásiť sa. Dzhango.

    Vytvorte nový adresár do adresára šablóny aplikácií Účet A pomenujte ho registrácie. Vytvorte nový súbor v novom adresári, pomenujte ho login.html.

    (% Rozširuje "base.html"%) (% bloku%) Prihlásenie (% endblock%) (% bloku%)

    Prihlásiť sa

    (%, ak je form.Erors%)

    Vaše užívateľské meno a heslo idn "t zápas. Skúste to znova.

    (% Inde%)

    Použite nasledujúci formulár na prihlásenie:

    (% koniec Ak%) (% endblock%)

    Táto šablóna pre vstup je veľmi podobná vyššie vytvorenému. Dzhango používa Autentifikáciaumiestnený v django.contrib.auth.forms.. Tento formulár sa snaží overiť pravosť používateľa a vygeneruje kontrolu chýb, ak sa používateľské meno nebola pravda. V tomto prípade môžeme vyhľadávať chyby pomocou príkazu (%, ak je form.Errors%). Upozorňujeme, že sme pridali skrytý prvok. Poslať premennú hodnotu Ďalšie.

    Parameter Ďalšie Musí byť adresa URL. Ak je tento parameter zadaný, potom po prihlásení do systému je presmerovaný na zadanú adresu URL.

    Teraz vytvorte šablónu logged_out.html. Vo vnútri katalógových šablón registrácia A vložte do nej nasledujúci kód:

    (% Rozširuje "base.html"%) (% bloku%) Odhlásené (% endblock%) (% bloku%)

    Odhlasený.

    Ste boli úspešne odhlásení. Môžete sa znova prihlásiť.

    (% endblock%)

    Toto je šablóna, ktorá sa zobrazí po prihlásení používateľa.

    Po pridaní šablón URL a šablón pre zobrazenia vstupu a výstupu je stránka pripravená na prihlásenie pomocou autentifikácie DZHANGO.

    Upozorňujeme, že výkon logout_then_login.v našom uRLCONF.nepotrebuje šablónu, pretože vykonáva presmerovanie prihláste sa zobrazenia..

    Teraz si vytvorte nový pohľad na zobrazenie monitorovacieho panelu pre používateľa, aby ste vedeli, kedy užívateľ vstupuje do svojho účtu. Otvorený súbor videnia.PY. Žiadosti Účet A pridajte k nemu nasledujúci kód:

    z django.contrib.auth.Decorators Import Login_Required @login_required dEF DASHBOARD (požiadavka): Return Render (požiadavka, "účet / dashboard.html", ("Sekcia": "Dashboard"))

    Pridávame do nášho prezentačného dekorácie login_required. Autentifikačný rámec. Ozdoba login_required. Kontroluje, či aktuálny používateľ prešiel autentifikáciou. Ak používateľ prešiel autentifikáciou, sa vykonáva roping; Ak používateľ neprešiel autentifikáciou, bude presmerovaný na vstupnú stránku.

    Definovali sme aj premennú časť.. Túto premennú použijeme na sledovanie oddielu stránky, za ktorým nasleduje užívateľ.

    Teraz musíte vytvoriť šablónu za reprezentáciu monitorovacieho panelu. Vytvorte nový súbor vo vnútri šablón / účtov Šablóny / účet / A pomenujte ho dashboard.html :

    (% Rozširuje "base.html"%) (% bloku%) palubnej dosky (% endblock%) (% bloku%)

    Dashboard.

    Vitajte na vašej palubnej doske.

    (% endblock%)

    Potom pridajte nasledujúcu šablónu adresy URL na túto zmenu súboru. uRLS.PY. Žiadosti Účet:

    Urlpatterns \u003d [# ... adresa URL (R "^ $", Views.d.d.d.d.d.d.d.d.d.Dashboard, Názov \u003d "Dashboard"),]

    Teraz upravte súbor nastavenia.PY.:

    Z django.core.urlresolvers Import Reverse_Lazy Login_redirect_url \u003d Reverse_Lazy ("Dashboard") Login_url \u003d Reverse_Lazy ("Login") LOGOUT_URL \u003d Reverse_Lazy ("Odhlásiť")
    • Login_redirect_url: Správy, čo URL presmerovanie používateľa po prihlásení do systému.
    • Login_url : URL presmerovať používateľa na vstup (napríklad pomocou dekorácie login_required.)
    • Logout_url : URL pre presmerovanie používateľa

    Teraz budeme pridať do našej základnej šablóny odkazy na vstup a výstup z lokality.

    Aby ste to urobili, je potrebné určiť, či aktuálny používateľ zadal systém alebo nie je zobrazený vhodný aktuálny stav používateľa, odkaz. Aktuálny používateľ je nastavený Httpres Predmet triedy medziproduktu. Prístup k nemu možno získať Žiadosť.User.. Užívateľ sa nachádza v dotaze, aj keď užívateľ neprešiel autentifikáciou. Nezodpovedný užívateľ je nastavený v dotaze ako inštanciu Anonymoususer.. Najlepší spôsob overenia stav autentifikácie aktuálneho používateľa - volanie požiadavka.ser.is_authented ()

    Edit Base.html šablóna

    S hlavičkou ID:

    Ako vidíte, ponuka stránky sa zobrazí len pre používateľov, ktorí prešli autentifikáciou. Skontrolujeme aj aktuálnu sekciu na pridanie vybratej triedy atribútu príslušnému prvku.

  • Ak chcete zvýrazniť aktuálnu sekciu v menu pomocou CSS. Tiež zobrazí používateľské meno a odkaz na prihlásenie, ak používateľ prešiel autentifikáciou, alebo odkaz na prihlásenie.

    Otvorené v prehliadači http://127.0.0.1:8000/account/login/. Musíte vidieť vstupný prúd. Zadajte platné prihlasovacie meno a heslo. Uvidíte nasledovné:

    Môžete vidieť, že časť My Dashboard je zvýraznená CSS, ako má triedu vybraný.. Keďže užívateľ prešiel autentifikáciou, používateľské meno sa zobrazí na pravej strane hlavičky. Kliknite na odkaz Odhlásiť sa.. Uvidíte nasledujúcu stránku:

    Na tejto stránke môžete vidieť, že užívateľ vyšiel zo systému, a preto sa ponuka webových stránok už nezobrazuje. Odkaz na pravej strane Heder Prihlásiť sa.

    Ak vidíte stránku odhlásenia z lokality Administrácia DZHANGO, a nie vlastné systémové výstupné stránky, skontrolujte nastavenia nainštalovaných_Apps a uistite sa, že django.contrib.admin. je po Účet. Obe šablóny sú v tej istej relatívnej ceste a nakladač šablóny DZHANGO použije prvý nájdený.

    Django prichádza s množstvom zabudovaných zdrojov pre najbežnejšie prípady používania webovej aplikácie. Aplikácia registrácie je veľmi dobrým príkladom a dobrá vec je, že funkcie môžu byť použité mimo-of-the-box.

    S aplikáciou Registrácia DJANGO môžete mať výhody nasledujúcich funkcií:

    • Prihlásiť sa.
    • Odhlásiť sa.
    • Prihlásiť Se.
    • Resetovanie hesla.

    V tomto tutoriáli sa zameriame do funkcií prihlasovania a odhlásenia. Pre registráciu a resetovanie hesla skontrolujte nižšie uvedené tutoriály:

    Začíname.

    Predtým, ako začneme, urobíme isha v nainštalovaných_Apps a autentifikáciu Middlelled_Apps a autentifikácia Middleware správne nakonfigurovaný v nastaveniach Middleware_Classes.

    Obaja sú už nakonfigurované, keď spustíte nový projekt DJANGO pomocou príkazu StartProject. Takže ak ste neodstránili počiatočné konfigurácie, mali by ste byť nastavené.

    V prípade, že spustíte nový projekt len \u200b\u200bna to, aby ste nasledovali tento návod, vytvorte používateľa pomocou príkazového riadka, takže môžeme otestovať stránky prihlasovacieho a odhlásiť.

    $ Python manage.py CreateSuperuser

    Na konci tohto článku budem poskytnúť zdrojový kód príkladu s minimálnou konfiguráciou.

    Nakonfigurujte trasy URL

    Prvý import DJANGO.CONTRIB.AUTH.VIEWS modul a pridajte adresu URL pre zobrazenie prihlásenia a odhlásenia:

    z django.conf.urls import url z django.contrib import admin od django.contrib.auth importovať zobrazenia ako auth_views urlpatterns \u003d [adresa URL (R "^ Login / $", AUTH_VIEWS. Prihlásiť sa, názov \u003d "prihlásenie"), URL ( R "^ logout / $", auth_views. Odhlásiť, meno \u003d "Odhlásiť"), URL (R "^ admin /", admin. Stránky. URL),]

    Vytvorte prihlasovaciu šablónu

    V predvolenom nastavení, django.contrib.atth.Views.login View sa pokúsi poskytnúť registráciu / login.html šablónu. Takže základná konfigurácia by vytvorila priečinok s názvom Registry a umiestnite šablónu login.html vo vnútri.

    Nasleduje minimálna prihlasovacia šablóna:

    (% Rozširuje "base.html"%) (% bloku%) prihlásenie (% endblock%) (% bloku%)

    Prihlásiť sa.

    (% Csrf_tooken%) ((form.as_P)) (% endblock%)

    Tento jednoduchý príklad už overuje používateľské meno a heslo a správne overte používateľa.

    Prispôsobenie prihlasovacieho zobrazenia

    Existuje niekoľko parametrov, ktoré môžete prejsť na prihlasovacie zobrazenie, aby ste sa prispôsobili vášmu projektu. Ak chcete napríklad uložiť svoje prihlasovacie šablóny niekde inde, než môže prejsť názov šablóny ako parameter:

    URL (R "^ login / $", auth_views. Prihlásiť sa, ("template_name": "jadro / login.html"), meno \u003d "prihlásenie"),

    Môžete tiež prejsť vlastným autentifikačným formulárom pomocou parametrov Autentication_form, Incase ste implementovali vlastný užívateľský model.

    Teraz je veľmi dôležitá konfigurácia vykoná v súbore setting.py, čo je URL DJANGO presmerovať užívateľa po úspešnej autentifikácii.

    Vnútri settings.py súbor Pridať:

    Login_redirect_url \u003d "Domov"

    Hodnota môže byť kartónová adresa URL alebo Názov URL. Predvolená hodnota pre login_redirect_url je / účty / profil /.

    Je tiež dôležité poznamenať, že DJANGO sa pokúsi presmerovať používateľa na nasledujúci Get Param.

    Nastavenie zobrazenia odhlásenia

    Po zápisu DJANGO.CONTRIB.AUTH.VIEWS.LOGOUT View, Django urobí registráciu / logged_out.html šablóny. Podobným spôsobom, ako sme urobili v prihlasovacom pohľade, môžete prejsť inú šablónu ako tak:

    URL (R "^ logout / $", auth_views. Odhlásiť, ("template_name": "logged_out.html"), názov \u003d "Odhlásiť"),

    Zvyčajne dávam prednosť používaniu parametra NEXT_PAGE a presmerovať buď na domovskú stránku môjho projektu alebo na prihlasovaciu stránku, keď dáva zmysel.



  • Páči sa vám článok? Zdieľaj to


    RočníkProjektPopis
    , "$ Row [" Rok "].""$ Row [" miesto "].", "$ Row [" Popis "]."