Megosztás a következőn keresztül:


Oktatóanyag: Felhasználók hitelesítése a Django használatával a Visual Studióban

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.

  1. 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).

  2. 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:

    Képernyőkép, amelyen a Bejelentkezés lehetőség látható a futó Django webalkalmazás navigációs sávján.

    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.

  3. 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:

    Képernyőkép, amely a felügyelő felhasználó bejelentkezési hitelesítési oldalát jeleníti meg a futó Django-webalkalmazásban.

  4. Miután a felügyelő bejelentkezett, hozzáférhet a webhely korlátozott oldalnézeteihez, és elvégezheti az adminisztrációs feladatokat:

    Képernyőkép, amely a Django-felügyelő számára elérhető lapmegtekintések egyikét és a frissített navigációs sávot jeleníti meg a Kijelentkezés lehetőséggel.

  5. 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:

  1. 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.

  2. 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.

  3. 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 %}
    
  4. 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.login né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_name azonosí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_context adatokat 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_form a bejelentkezési eljáráshoz használandó űrlaposztályt adja meg. A sablonban ez a tulajdonságérték form objektumként jelenik meg. Az alapértelmezett érték a AuthenticationForm (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.

  5. 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 a CharField űrlapokat a BootstrapAuthenticationForm osztá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 %}
    
  6. 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.errors címke igaz értéket kap.

      Képernyőkép, amely azt az üzenetet jeleníti meg, amikor a felhasználó helytelen hitelesítő adatokat ad meg a Django bejelentkezési folyamatában.

    • Ha a hitelesítés sikeres, a Django megnyitja a relatív URL-címet a next mezőben, <input type="hidden" name="next" value="/" />, amely ebben az esetben a "Kezdőlap" oldal (/).

  7. Amikor az alkalmazás a felhasználó hitelesítése után megjeleníti a "Kezdőlap" lapot, a user.is_authenticated tulajdonsá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:

    Képernyőkép, amely a hitelesített felhasználó frissített navigációs sávját jeleníti meg a Hello üzenettel és a Kijelentkezés lehetőséggel.

    A hitelesítés ellenőrzéséhez használhatja a user.is_authenticated tulajdonsá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:

  1. Telepítse a docutils Python-csomagot a környezetébe. Útmutatásért lásd: Csomagok telepítése a Python-környezethez.

  2. 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.

  3. Nyissa meg a Django-projekt urls.py fájlját, és módosítsa a tartalmat az alábbiak szerint:

    1. 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 include
      
    2. Az importálási lista után adja hozzá a következő utasítást:

      admin.autodiscover()
      
    3. Keresse meg a urlpatterns definí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')),
      
  4. Nyissa meg a Django-projekt settings.py fájlját, és keresse meg a INSTALLED_APPS gyűjteményt. Adja hozzá a következő bejegyzést azonnal a bejegyzés után app:

    'django.contrib.admindocs',
    
  5. Állítsa le és indítsa újra a Django webalkalmazást.

  6. 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:

    Képernyőkép a Django-webalkalmazás hitelesített szuperfelhasználójának Django-dokumentációjára vonatkozó példalapnézetről.

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:

Képernyőkép a Kijelentkezés lapról, miután a felügyelő kijelentkezik a Django felügyeleti webhelyéről.

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.

Képernyőkép a Django felügyeleti webhely bejelentkezési párbeszédpaneléről.

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:

  1. A Megoldáskezelőbontsa ki a projekt alkalmazás/sablonok/alkalmazás mappáját, és nyissa meg a loginpartial.html fájlt.

  2. 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.logout fü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.

  3. Az alkalmazás/sablonok/alkalmazás mappában hozzon létre egy új, loggedoff.htmlnevű HTML-sablonfájlt.

  4. Adja hozzá a következő tartalmat az új sablonfájlhoz:

    {% extends "app/layout.html" %}
    {% block content %}
    <h3>You have been logged off</h3>
    {% endblock %}
    
  5. 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_name tulajdonságot a "Kijelentkezve" lap új HTML-sablonjának használatához.

  6. Á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:

    Képernyőkép a Django webalkalmazás frissített kijelentkezési viselkedéséről a Kijelentkezés lapon megjelenő üzenettel.

  7. Á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