Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek představuje krok 5 v sérii kurzů Práce s webovým rozhraním Django v sadě Visual Studio.
Ověřování je běžným požadavkem pro webové aplikace. Šablona Webového projektu Django v sadě Visual Studio poskytuje všechny potřebné moduly pro ověřování v souboru settings.py projektu Django. Krok 4 v této sérii kurzů vytvoří webovou aplikaci Django pomocí této šablony. V kroku 5 prozkoumáte možnosti ověřování šablony a budete pracovat s funkcemi spuštěné aplikace.
V kroku 5 kurzu se naučíte:
- Prozkoumejte tok ověřování v šabloně webového projektu Django v sadě Visual Studio
- Prozkoumání kódu, který podporuje proces ověřování
- Úprava kódu pro povolení přístupu k rozhraním správce Django
- Spusťte webovou aplikaci Django a použijte funkce ověřování.
Požadavky
Řešení sady Visual Studio a webová aplikace Django založené na šabloně webového projektu Django (DjangoWeb). krok 4: Použijte úplnou šablonu webového projektu Django popisuje, jak vytvořit tuto aplikaci.
Webová aplikace Django musí mít účet superuživatele (správce). krok 4 (vytvoření superuživatele Django) popisuje, jak vytvořit přihlašovací údaje superuživatele.
V části Požadavky v kroku 1 této série kurzů najdete podrobnosti o verzích šablon Django, projektech sady Visual Studio a projektech Django a vývoji v Pythonu na Macu.
Prozkoumání toku ověřování
Tato část vysvětluje výchozí tok ověřování, který poskytuje šablona webového projektu Django pro webovou aplikaci Django.
V sadě Visual Studio vyberte Ladit>Zahájit ladění (F5) pro spuštění webové aplikace Django (DjangoWeb).
Když se aplikace otevře v prohlížeči, všimněte si možnosti Přihlásit se vpravo na navigačním panelu:
Spuštěná aplikace Django má navigační panel se třemi možnostmi stránky: Domů, O nás, Kontakt, a možnost Přihlásit se. Konfigurace ověřování umožňuje všem uživatelům zobrazit obsah na stránkách "Domů", "O aplikaci" a "Kontakt".
Pro ověřený přístup k webové aplikaci Django může určený superuživatel použít možnost Přihlášení, která otevře stránku Přihlášení:
Jakmile se superuživatel přihlásí, bude mít přístup k omezeným zobrazením stránek pro web a dokončí úlohy správy:
Superuživatel může použít možnost Odhlásit odhlásit se z webové aplikace Django a vrátit se na domovskou stránku webové aplikace Django jako neověřený uživatel.
V následujících částech upravíte konfiguraci ověřování tak, aby podporovala přístup k webu pro správu Django pro superuživatele.
Prozkoumání ověřovacího kódu
Teď, když rozumíte obecným funkcím ověřování webové aplikace Django, jste připraveni prozkoumat základní kód poskytnutý šablonou Django Web Projectu:
V Průzkumníku řešenírozbalte složku app/templates/app projektu. Následující kroky zkontrolují několik souborů v této složce.
Otevřete soubor základní šablony layout.html. Posuňte se k elementu
<div class="navbar ...>a vyhledejte značku{% include app/loginpartial.html %}.Značka
{% include %}dává systému šablon Django pokyn, aby v tomto okamžiku v obsahující šabloně stáhl obsah zahrnutého souboru.Otevřete soubor loginpartial.html. Podívejte se, jak tato šablona používá podmíněnou značku
{% if user.is_authenticated %}spolu se značkou{% else %}k vykreslení různých prvků uživatelského rozhraní v závislosti na tom, jestli je uživatel ověřený:{% if user.is_authenticated %} <form id="logoutForm" action="/logout" method="post" class="navbar-right"> {% csrf_token %} <ul class="nav navbar-nav navbar-right"> <li><span class="navbar-brand">Hello {{ user.username }}!</span></li> <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li> </ul> </form> {% else %} <ul class="nav navbar-nav navbar-right"> <li><a href="{% url 'login' %}">Log in</a></li> </ul> {% endif %}Při spuštění aplikace se neověří žádný superuživatel a kód šablony vykreslí pouze přihlášení odkaz. Odkaz cílí na relativní cestu "login" zadanou v souboru URL projektu Django (DjangoWeb/DjangoWeb/urls.py), jak je popsáno v kroku 4 (Prozkoumání vzorů tras URL). Trasa "login" je mapována na zobrazení
django.contrib.auth.views.login, a toto zobrazení obdrží následující data:{ 'template_name': 'app/login.html', 'authentication_form': app.forms.BootstrapAuthenticationForm, 'extra_context': { 'title': 'Log in', 'year': datetime.now().year, } }Tento kód definuje tři vlastnosti:
template_nameidentifikuje šablonu pro stránku Přihlášení definovanou v souboru aplikace nebologin.html. Nezapomeňte, že tento odkaz je relativní k webu. Úplná cesta ke složce je app/templates/app/login.html.extra_contextpřidá informace do výchozích kontextových dat zadaných šabloně. V tomto případě informace obsahují název "Přihlásit se" spolu s datem, časem a rokem.authentication_formurčuje třídu formuláře, která se má použít s přihlašovací procedurou. V šabloně se tato hodnota vlastnosti zobrazí jako objektform. Výchozí hodnota jeAuthenticationForm(zdjango.contrib.auth.views), ale šablona projektu sady Visual Studio místo toho používá formulář definovaný v souboru aplikace nebo forms.py projektu:from django import forms from django.contrib.auth.forms import AuthenticationForm from django.utils.translation import ugettext_lazy as _ class BootstrapAuthenticationForm(AuthenticationForm): """Authentication form which uses bootstrap CSS.""" username = forms.CharField(max_length=254, widget=forms.TextInput({ 'class': 'form-control', 'placeholder': 'User name'})) password = forms.CharField(label=_("Password"), widget=forms.PasswordInput({ 'class': 'form-control', 'placeholder':'Password'}))Třída formuláře je odvozena z
AuthenticationForma konkrétně přepíše pole uživatelského jména a hesla pro přidání zástupného textu. Šablona sady Visual Studio obsahuje tento explicitní kód na předpokladu, že budete pravděpodobně chtít přizpůsobit formulář, například přidat ověření síly hesla.
Když interakce uživatele s aplikací otevře stránku Přihlásit se, aplikace vykreslí šablonu login.html. Proměnné
{{ form.username }}a{{ form.password }}vykreslují formulářeCharFieldz třídyBootstrapAuthenticationForm. K dispozici je také integrovaná část, která zobrazuje chyby ověřování a připravený prvek pro přihlášení k sociálních sítích, pokud se rozhodnete tyto služby přidat:{% extends "app/layout.html" %} {% block content %} <h2>{{ title }}</h2> <div class="row"> <div class="col-md-8"> <section id="loginForm"> <form action="." method="post" class="form-horizontal"> {% csrf_token %} <h4>Use a local account to log in.</h4> <hr /> <div class="form-group"> <label for="id_username" class="col-md-2 control-label">User name</label> <div class="col-md-10"> {{ form.username }} </div> </div> <div class="form-group"> <label for="id_password" class="col-md-2 control-label">Password</label> <div class="col-md-10"> {{ form.password }} </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="hidden" name="next" value="/" /> <input type="submit" value="Log in" class="btn btn-default" /> </div> </div> {% if form.errors %} <p class="validation-summary-errors">Please enter a correct user name and password.</p> {% endif %} </form> </section> </div> <div class="col-md-4"> <section id="socialLoginForm"></section> </div> </div> {% endblock %}Když uživatel vybere přihlášení ve formuláři stránky, Django se pokusí ověřit přihlašovací údaje, například přihlašovací údaje superuživatele:
Pokud ověřování selže, uživatel zůstane na stránce Přihlášení a značka
form.errorsje nastavená na hodnotu true:
Pokud ověřování proběhne úspěšně, Django otevře relativní adresu URL v poli
next,<input type="hidden" name="next" value="/" />, což je v tomto případě domovská stránka (/).
Když aplikace po ověření uživatele vykreslí stránku "Domů", je vlastnost
user.is_authenticatedpravdivá, když je vykreslena šablona loginpartial.html. V tomto případě se na navigačním panelu zobrazí zpráva Hello (uživatelské jméno) a možnost Odhlásit se nahradí možnost Přihlášení:
Ke kontrole ověřování můžete použít vlastnost
user.is_authenticatedv jiných částech kódu aplikace.
Přístup k rozhraním správce Django
Pokud chcete zkontrolovat, jestli má ověřený uživatel oprávnění pro přístup ke konkrétním prostředkům, musíte z databáze načíst oprávnění specifická pro uživatele.
Zejména superuživatel nebo správce má oprávnění pro přístup k integrovaným rozhraním správce Django pomocí relativních adres URL webu /admin/ a /admin/doc/. Další informace najdete v tématu Použití ověřovacího systému Django (dokumentace Django).
Pokud chcete povolit přístup k rozhraním správce Django, postupujte takto:
Nainstalujte balíček
docutilsPythonu do svého prostředí. Pokyny najdete v tématu Instalace balíčků pro prostředí Pythonu.V Průzkumníku řešenírozbalte složku projektu Django, DjangoWeb/DjangoWeb/. Následující kroky aktualizují několik souborů v této složce.
Otevřete soubor urls.py projektu Django a následujícím způsobem upravte jeho obsah:
Do horní části souboru přidejte následující import balíčku pro adresy URL na konec aktuálního seznamu:
from django.conf.urls import includeZa seznam importu přidejte následující příkaz:
admin.autodiscover()Vyhledejte definici
urlpatternsa před položku'admin/'přidejte následující položku cesty:path('admin/doc/', include('django.contrib.admindocs.urls')),
Otevřete soubor settings.py projektu Django a vyhledejte kolekci
INSTALLED_APPS. Ihned za položkuapppřidejte následující položku.'django.contrib.admindocs',Zastavte a restartujte webovou aplikaci Django.
V poli pro zadání adresy URL prohlížeče změňte zobrazení stránky aplikace na trasu
/admin/nebo/admin/doc/. Tyto stránky poskytují superuživateli přístup k úlohám správy Django, jako je vytváření uživatelských nebo skupinových účtů, změna hesla a zobrazení dokumentace Django:
Prozkoumání chování při odhlášení
Existují dva způsoby, jak se superuživatel může odhlásit a ukončit ověřenou relaci. Webová aplikace Django obsahuje možnost Odhlásit se na navigačním panelu a web pro správu Django poskytuje možnost Odhlásit se.
Odhlášení z webu pro správu Django
Pokud superuživatel zobrazuje stránky na webu pro správu Django, může vybrat Odhlásit se na navigačním panelu webu. Prohlížeč se aktualizuje, aby zobrazil stránku "Odhlášeno" pro tento web.
Na této stránce má uživatel dvě možnosti, domů a znovu se přihlásit. Obě možnosti vrátí uživatele na domovskou stránku webu pro správu Django (/admin), kde se uživateli zobrazí výzva k opětovnému zadání přihlašovacích údajů.
Odhlášení z webové aplikace Django
Pokud superuživatel zobrazuje stránky ve webové aplikaci Django, například "O aplikaci" nebo "Kontakt", může vybrat Odhlásit se na navigačním panelu webové aplikace Django. Chování při odhlášení je minimální. Jednoduše ukončí ověřenou relaci a automaticky přesměruje uživatele zpět na domovskou stránku aplikace.
Chování při odhlášení můžete přepracovat, aby byl pro uživatele informativnější:
V Průzkumníku řešenírozbalte složku projektu app/templates/app a otevřete soubor loginpartial.html.
V souboru šablony si všimněte, že odkaz Odhlásit se jednoduše provede operaci HTTP POST (
action="/logout" method="post") na relativní URL cestu webu "/login" (href="{% url 'login' %}").{% if user.is_authenticated %} <form id="logoutForm" action="/logout" method="post" class="navbar-right"> {% csrf_token %} <ul class="nav navbar-nav navbar-right"> <li><span class="navbar-brand">Hello {{ user.username }}!</span></li> <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li> </ul> </form> {% else %} <ul class="nav navbar-nav navbar-right"> <li><a href="{% url 'login' %}">Log in</a></li> </ul> {% endif %}Vestavěná funkce zobrazení
django.contrib.auth.views.logoutzpracovává tento proces odhlášení.Aktuální chování nezobrazuje žádné uživatelské rozhraní, které uživateli umožní zjistit, že je odhlášený. Proces jednoduše naviguje uživatele zpět na domovskou stránku webové aplikace Django podle vzoru cesty
'logout/'definovaného v souboru URL projektu Django (DjangoWeb/DjangoWeb/urls.py):path('logout/', LogoutView.as_view(next_page='/'), name='logout'),Pokud chcete zobrazit informativnější potvrzení odhlášení, můžete pro aplikaci vytvořit stránku Odhlásit se.
Ve složce app/templates/app vytvořte nový soubor šablony HTML s názvem loggedoff.html.
Do nového souboru šablony přidejte následující obsah:
{% extends "app/layout.html" %} {% block content %} <h3>You have been logged off</h3> {% endblock %}V souboru URL projektu Django DjangoWeb/DjangoWeb/DjangoWeb/urls.pyzměňte vzor adresy URL pro cestu
'logout/'následujícím způsobem:path('logout/', LogoutView.as_view(template_name='app/loggedoff.html'), name='logout'),Aktualizovaný kód přidá vlastnost
template_namepro práci s novou šablonou HTML pro stránku "Odhlášení".Zastavte a restartujte webovou aplikaci Django. Znovu se přihlaste a pak vyberte Odhlásit se. Tentokrát se uživateli zobrazí informativnější zpráva, která uživateli potvrdí, že je odhlášený:
Zastavte server a zavřete okna prohlížeče aplikací.
Uložení projektu do správy zdrojového kódu
Pokud jste během této série tutoriálů pravidelně ukládali své řešení sady Visual Studio do systému správy verzí, nyní je vhodný čas provést další uložení. Postupujte podle pokynů v kroku 2 (potvrzení změn ve správě zdrojového kódu) v této sérii návodů.
Vaše řešení by mělo odpovídat zdrojovému kódu kurzu na GitHubu: Microsoft/python-sample-vs-learning-django.
Použití značky {% csrf_token %} v elementech formuláře
Značka {% csrf_token %} zahrnuje integrovanou ochranu proti padělání mezi weby (csrf) od Django () () (dokumenty Django). Tuto značku obvykle přidáte do libovolného prvku, který zahrnuje metody požadavku POST, PUT nebo DELETE, jako je například formulář. Funkce vykreslování šablon (render) pak vloží potřebnou ochranu.
Recenze tutoriálu
Blahopřejeme k dokončení tohoto kurzu v Django v sadě Visual Studio.
V tomto kurzu jste se naučili:
- Vytváření různých typů projektů Django pomocí různých šablon v sadě Visual Studio
- Vytvoření webové aplikace Django s více stránkami
- Vytváření různých tras a zobrazení stránek pomocí šablon
- Provozovat statické soubory, přidávat stránky a používat dědičnost šablon
- Poskytnutí ověřeného přístupu k omezeným stránkám a funkcím aplikace a rozhraním pro správu Django
Související obsah
- Ověřování uživatelů v Django (docs.djangoproject.com)
- Výukový program zdrojového kódu na GitHubu (Microsoft/python-sample-vs-learning-django)