Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk az 5. lépést mutatja be az oktatóanyag-sorozat című részében, A Django webes keretrendszer használata a Visual Studio.
A hitelesítés a webalkalmazások gyakori követelménye. A Django Web Project sablon a Visual Studióban biztosítja a Django-projekt settings.py fájljában található hitelesítéshez szükséges összes modult. Ebben az oktatóanyag-sorozatban a 4. lépés egy Django-webalkalmazást hoz létre ezzel a sablonnal. Az 5. lépésben megismerheti a sablon hitelesítési képességeit, és együttműködhet a futó alkalmazás funkcióival.
Az oktatóanyag 5. lépésében megtanulhatja, hogyan:
- A hitelesítési folyamat megismerése a Django Web Project-sablonban a Visual Studióban
- A hitelesítési folyamatot támogató kód vizsgálata
- Kód módosítása a Django-rendszergazdai felületekhez való hozzáférés engedélyezéséhez
- A Django webalkalmazás futtatása és hitelesítési funkciók használata
Előfeltételek
Egy Visual Studio-megoldás és egy Django-webalkalmazás a Django Web Project sablonján (DjangoWeb). 4. lépés: A django webprojekt teljes sablonjának használata az alkalmazás létrehozását ismerteti.
A Django webalkalmazásnak felügyelői (rendszergazdai) fiókkal kell rendelkeznie. 4. lépés (Django-felügyelő létrehozása) ismerteti a felügyelői hitelesítő adatok létrehozását.
Tekintse át az oktatóanyag-sorozat 1. lépésének Előfeltételek szakaszát a Django-sablonverziókkal, a Visual Studio-projektekkel és a Django-projektekkel és a Mac Python-fejlesztéssel kapcsolatos részletekért.
A hitelesítési folyamat felfedezése
Ez a szakasz a Django-webalkalmazások Django Web Project-sablon által biztosított alapértelmezett hitelesítési folyamatot ismerteti.
A Visual Studióban válassza Hibakeresés>Hibakeresés indítása (F5) lehetőséget a Django webalkalmazás elindításához (DjangoWeb).
Amikor az alkalmazás megnyílik a böngészőben, figyelje meg a navigációs sáv jobb oldalán található Bejelentkezés lehetőséget:
A futó Django alkalmazás navigációs sávja három oldalbeállítással rendelkezik, Kezdőlap, Névjegyés Kapcsolatfelvétel, valamint egy Bejelentkezés lehetőséggel. A hitelesítési konfiguráció lehetővé teszi, hogy bármely felhasználó lássa a tartalmat a "Kezdőlap", a "Névjegy" és a "Kapcsolat" lapon.
A Django webalkalmazáshoz való hitelesített hozzáféréshez egy kijelölt felügyelő használhatja a Bejelentkezés lehetőséget, amely megnyitja a "Bejelentkezés" lapot:
Miután a felügyelő bejelentkezett, hozzáférhet a webhely korlátozott oldalnézeteihez, és elvégezheti az adminisztrációs feladatokat:
A felügyelő felhasználó a Kijelentkezés lehetőséggel kijelentkezhet a Django webalkalmazásból, és hitelesítés nélküli felhasználóként visszatérhet a Django webalkalmazás Kezdőlapjára.
A következő szakaszokban a hitelesítés konfigurációját úgy módosíthatja, hogy támogassa a Django felügyeleti helyhozzáférést a felügyelő felhasználó számára.
Hitelesítési kód vizsgálata
Most, hogy megismerte a Django-webalkalmazások általános hitelesítési funkcióit, készen áll a Django Web Project -sablon által biztosított mögöttes kód vizsgálatára:
A Megoldáskezelőbontsa ki a projekt alkalmazás/sablonok/alkalmazás mappáját. Az alábbi lépések több fájlt is áttekintenek ebben a mappában.
Nyissa meg az alapsablonfájlt, layout.html. Görgessen a
<div class="navbar ...>elemhez, és keresse meg a{% include app/loginpartial.html %}címkét.A
{% include %}címke arra utasítja Django sablonrendszerét, hogy ezen a ponton kérje le a belefoglalt fájl tartalmát az azt tartalmazó sablonba.Nyissa meg a loginpartial.html fájlt. Figyelje meg, hogy ez a sablon hogyan használja a feltételes címkét
{% if user.is_authenticated %}és egy{% else %}címkét a különböző felhasználói felületi elemek megjelenítéséhez attól függően, hogy a felhasználó hitelesítése megtörtént-e:{% 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 %}Az alkalmazás indításakor a rendszer nem hitelesíti a felügyelő felhasználót, és a sablonkód csak a Bejelentkezés hivatkozást jeleníti meg. A hivatkozás a Django-projekt URL-fájljában (DjangoWeb/DjangoWeb/urls.py) megadott relatív "bejelentkezési" elérési utat célozza meg, ahogyan az 4. lépésben (URL-útvonalminták vizsgálata). A "bejelentkezési" útvonal a
django.contrib.auth.views.loginnézetre van leképezve, és a nézet a következő adatokat kapja:{ 'template_name': 'app/login.html', 'authentication_form': app.forms.BootstrapAuthenticationForm, 'extra_context': { 'title': 'Log in', 'year': datetime.now().year, } }Ez a kód három tulajdonságot határoz meg:
template_nameazonosítja a alkalmazásban/login.html fájlban definiált "Bejelentkezés" lap sablonját. Ne feledje, hogy ez a hivatkozás a webhelyhez viszonyítva működik. A mappa teljes elérési útja alkalmazás/sablonok/alkalmazás/login.html.extra_contextadatokat ad hozzá a sablonhoz megadott alapértelmezett környezeti adatokhoz. Ebben az esetben az információk tartalmazzák a "Bejelentkezés" címet, valamint a dátumot, az időpontot és az évet.authentication_forma bejelentkezési eljáráshoz használandó űrlaposztályt adja meg. A sablonban ez a tulajdonságértékformobjektumként jelenik meg. Az alapértelmezett érték aAuthenticationForm(django.contrib.auth.views), de a Visual Studio projektsablonja ehelyett a projekt alkalmazásában/forms.py fájljában definiált űrlapot használja: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'}))Az űrlaposztály a(z)
AuthenticationForm-ból származik, és felülírja a felhasználónév és a jelszó mezőket, hogy helyőrző szöveget adjon hozzá. A Visual Studio-sablon ezt az explicit kódot azzal a feltételezéssel tartalmazza, hogy valószínűleg testre szeretné szabni az űrlapot, például jelszóerősség-ellenőrzést szeretne hozzáadni.
Amikor az alkalmazás felhasználói interakciója megnyitja a "Bejelentkezés" lapot, az alkalmazás megjeleníti a login.html sablont. A változók
{{ form.username }}és{{ form.password }}renderelik aCharFieldűrlapokat aBootstrapAuthenticationFormosztályból. Van egy beépített szakasz is az érvényesítési hibák megjelenítéséhez, valamint egy kész elem a közösségi bejelentkezésekhez, ha úgy dönt, hogy hozzáadja ezeket a szolgáltatásokat:{% 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 %}Amikor a felhasználó kiválasztja Bejelentkezés a lap űrlapján, Django megkísérli hitelesíteni a hitelesítő adatokat, például a felügyelő felhasználó hitelesítő adatait:
Ha a hitelesítés sikertelen, a felhasználó a "Bejelentkezés" lapon marad, és a
form.errorscímke igaz értéket kap.
Ha a hitelesítés sikeres, a Django megnyitja a relatív URL-címet a
nextmezőben,<input type="hidden" name="next" value="/" />, amely ebben az esetben a "Kezdőlap" oldal (/).
Amikor az alkalmazás a felhasználó hitelesítése után megjeleníti a "Kezdőlap" lapot, a
user.is_authenticatedtulajdonság igaz a loginpartial.html-sablon megjelenítésekor. Ebben az esetben a navigációs sávon egy Hello (felhasználónév) üzenet jelenik meg, a Kijelentkezés beállítás pedig a Bejelentkezés lehetőséget váltja fel:
A hitelesítés ellenőrzéséhez használhatja a
user.is_authenticatedtulajdonságot az alkalmazáskód más részeiben.
A Django rendszergazdai felületeinek elérése
Annak ellenőrzéséhez, hogy a hitelesített felhasználó jogosult-e bizonyos erőforrások elérésére, le kell kérnie a felhasználóspecifikus engedélyeket az adatbázisból.
A felügyelő felhasználó vagy rendszergazda különösen jogosult a beépített Django rendszergazdai felületek elérésére a webhely relatív URL-címeinek /admin/ és /admin/doc/használatával. További információ: Django hitelesítési rendszer használata (Django-dokumentumok).
A Django rendszergazdai felületeihez való hozzáférés engedélyezéséhez kövesse az alábbi lépéseket:
Telepítse a
docutilsPython-csomagot a környezetébe. Útmutatásért lásd: Csomagok telepítése a Python-környezethez.A Megoldáskezelőablakban bontsa ki a Django projektmappát, DjangoWeb/DjangoWeb/. Az alábbi lépések több fájlt is frissítenek ebben a mappában.
Nyissa meg a Django-projekt urls.py fájlját, és módosítsa a tartalmat az alábbiak szerint:
A fájl tetején adja hozzá a következő csomagot az URL-ek importálásához az aktuális lista végéhez:
from django.conf.urls import includeAz importálási lista után adja hozzá a következő utasítást:
admin.autodiscover()Keresse meg a
urlpatternsdefiníciót, és adja hozzá a következő elérésiút-bejegyzést a'admin/'bejegyzés előtt:path('admin/doc/', include('django.contrib.admindocs.urls')),
Nyissa meg a Django-projekt settings.py fájlját, és keresse meg a
INSTALLED_APPSgyűjteményt. Adja hozzá a következő bejegyzést azonnal a bejegyzés utánapp:'django.contrib.admindocs',Állítsa le és indítsa újra a Django webalkalmazást.
A böngésző URL-cím mezőjében módosítsa az alkalmazás oldalnézetét az
/admin/vagy/admin/doc/útvonalra. Ezek az oldalak hozzáférést biztosítanak a felügyelő felhasználónak a Django felügyeleti feladataihoz, például felhasználói vagy csoportfiókok létrehozásához, a jelszó módosításához és a Django dokumentációjának megtekintéséhez:
A kijelentkezési viselkedés megismerési módja
A szuper felhasználó kétféleképpen jelentkezhet ki és fejezheti be a hitelesített folyamatot. A Django webalkalmazás a navigációs sávon a Kijelentkezés lehetőséget tartalmazza, a Django felügyeleti webhelyén pedig a Kijelentkezés lehetőséget.
Kijelentkezés a Django felügyeleti webhelyéről
Ha a felügyelő felhasználó a Django felügyeleti webhelyén tekinti meg a lapokat, kiválaszthatja a Kijelentkezés a webhely navigációs sávján. A böngésző frissül, hogy megjelenjen a webhely "Kijelentkezve" lapja:
Ezen a lapon a felhasználónak két lehetősége van: Kezdőlap és Jelentkezzen be újra. Mindkét lehetőség visszaadja a felhasználót a Django felügyeleti webhely (/rendszergazda) kezdőlapjára, ahol a rendszer kéri a felhasználót a hitelesítő adataik újbóli megadására.
Kijelentkezés a Django webalkalmazásból
Ha a szuperfelhasználó a Django webalkalmazás lapjait tekinti meg, például a "Névjegy" vagy a "Kapcsolat" lehetőséget, kiválaszthatja ki a Kijelentkezés a Django webalkalmazás navigációs sávján. A kijelentkezési viselkedés minimális. Egyszerűen befejezi a hitelesített munkamenetet, és visszaböngészi a felhasználót az alkalmazás kezdőlapjára.
A kijelentkezési viselkedést átdolgozhatja, hogy informatívabb legyen a felhasználó számára:
A Megoldáskezelőbontsa ki a projekt alkalmazás/sablonok/alkalmazás mappáját, és nyissa meg a loginpartial.html fájlt.
A sablonfájlban figyelje meg, hogy a Kijelentkezés hivatkozás egyszerűen egy HTTP POST (
action="/logout" method="post") műveletet hajt végre a webhely relatív URL-címének "/login" (href="{% url 'login' %}") elérési útjára.{% 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 %}A beépített nézet
django.contrib.auth.views.logoutfüggvény kezeli ezt a kijelentkezés folyamatát.Az aktuális viselkedés nem jelenít meg olyan felhasználói felületet, amely tudatja a felhasználóval, hogy ki van jelentkezve. A folyamat egyszerűen böngészi a felhasználót vissza a Django webalkalmazás kezdőlapjára a Django-projekt URL-fájljában (DjangoWeb/DjangoWeb/urls.py) definiált
'logout/'útvonalminta szerint:path('logout/', LogoutView.as_view(next_page='/'), name='logout'),Az informatívabb kijelentkezés megerősítéséhez létrehozhat egy "Kijelentkezés" oldalt az alkalmazáshoz.
Az alkalmazás/sablonok/alkalmazás mappában hozzon létre egy új, loggedoff.htmlnevű HTML-sablonfájlt.
Adja hozzá a következő tartalmat az új sablonfájlhoz:
{% extends "app/layout.html" %} {% block content %} <h3>You have been logged off</h3> {% endblock %}A Django-projekt URL-fájljában DjangoWeb/DjangoWeb/urls.pymódosítsa a
'logout/'útvonal URL-mintázatát az alábbiak szerint:path('logout/', LogoutView.as_view(template_name='app/loggedoff.html'), name='logout'),A frissített kód hozzáad egy
template_nametulajdonságot a "Kijelentkezve" lap új HTML-sablonjának használatához.Állítsa le és indítsa újra a Django webalkalmazást. Jelentkezzen be újra, majd válassza Kijelentkezéslehetőséget. Az alkalmazás ezúttal egy informatívabb üzenetet jelenít meg a felhasználónak, amely megerősíti, hogy kijelentkeztek:
Állítsa le a kiszolgálót, és zárja be az alkalmazásböngésző ablakait.
Projekt mentése a forrásvezérlőbe
Ha az oktatóanyag-sorozat során a Visual Studio-megoldást véglegesíti a forrásvezérlésre, most érdemes újabb véglegesítést végeznie. Kövesse az utasításokat az 2. lépésben (a változások véglegesítése a forráskövetésben) ebben az oktatóanyag-sorozatban.
A megoldásnak meg kell egyeznie a GitHubon található oktatóanyag forráskódjának: Microsoft/python-sample-vs-learning-django.
{% csrf_token %} címke használata űrlapelemekben
A {% csrf_token %} címke tartalmazza a Django beépített keresztwebhely-kérelem-helyettesítés (csrf) védelmi (Django dokumentáció). Ezt a címkét általában minden olyan elemhez hozzáadja, amely POST, PUT vagy DELETE kérési metódusokat, például űrlapokat tartalmaz. A sablonmegjelenítési függvény (render) ezután beszúrja a szükséges védelmet.
Oktatóanyag áttekintése
Gratulálunk, hogy elvégezte ezt az oktatóanyagot a Django-ról a Visual Studióban.
Ebben az oktatóanyagban megtanulta, hogyan:
- Különböző típusú Django-projektek létrehozása különböző sablonok használatával a Visual Studióban
- Django-webalkalmazás létrehozása több oldallal
- Különböző útvonalak és oldalnézetek létrehozása sablonok használatával
- Statikus fájlok kiszolgálása, lapok hozzáadása és sablonöröklés használata
- Hitelesített hozzáférés biztosítása korlátozott alkalmazáslapokhoz és funkciókhoz, valamint Django felügyeleti felületekhez