Sdílet prostřednictvím


Krok 5: Ověření uživatelů v Django

Předchozí krok: Použití úplné šablony webového projektu Django

Šablona "Django Web Project" obsahuje základní ověřovací tok, protože ověřování je běžnou potřebou webových aplikací. Pokud používáte některou z šablon projektů Django, visual Studio obsahuje všechny potřebné moduly pro ověřování v souboru settings.py projektu Django.

V tomto kroku se naučíte:

  • Jak používat tok ověřování poskytnutý v šablonách sady Visual Studio (krok 5–1)

Krok 5–1: Použití toku ověřování

Následující kroky procvičí tok ověřování a popíše části projektu:

  1. Pokud jste ještě nepostupovali podle pokynů v souboru readme.html v kořenovém adresáři projektu a vytvořili účet superuživatele (správce), udělejte to teď.

  2. Spusťte aplikaci ze sady Visual Studio pomocí ladění>Spustit ladění (F5). Když se aplikace zobrazí v prohlížeči, podívejte se, že se v pravém horním rohu navigačního panelu zobrazí přihlášení .

    Login control on the Django Web Project app page.

  3. Otevřete templates/app/layout.html a všimněte si, že <div class="navbar ...> prvek obsahuje {% include app/loginpartial.html %} značku. Značka {% include %} dává Django systému šablon pokyn, aby v tuto chvíli v obsahující šabloně načítá obsah zahrnutého souboru.

  4. Otevřete templates/app/loginpartial.html a podívejte se, jak 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 %}
    
  5. Vzhledem k tomu, že se při prvním spuštění aplikace neověří žádný uživatel, kód šablony vykreslí pouze odkaz "Přihlásit se" na relativní cestu "login". Jak je uvedeno v urls.py (jak je znázorněno v předchozí části), tato trasa je namapovaná na django.contrib.auth.views.login zobrazení a zobrazení přijímá následující data:

    {
        'template_name': 'app/login.html',
        'authentication_form': app.forms.BootstrapAuthenticationForm,
        'extra_context':
        {
            'title': 'Log in',
            'year': datetime.now().year,
        }
    }
    

    template_name Tady identifikuje šablonu přihlašovací stránky, v tomto případě templates/app/login.html. Vlastnost extra_context se přidá do výchozích kontextových dat zadaných šabloně. Nakonec určuje třídu formuláře, authentication_form která se má použít s přihlášením. V šabloně se zobrazí jako form objekt. Výchozí hodnota je AuthenticationForm (oddjango.contrib.auth.views); šablona projektu sady Visual Studio místo toho používá formulář definovaný v souboru forms.py aplikace:

    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 boostrap 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'}))
    

    Jak vidíte, třída formuláře je odvozena a AuthenticationForm 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.

  6. Když přejdete na přihlašovací stránku, aplikace vykreslí šablonu login.html . Proměnné {{ form.username }} a vykreslení CharField formulářů z BootstrapAuthenticationForm{{ form.password }} . 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 %}
    
  7. Při odeslání formuláře se Django pokusí ověřit vaše přihlašovací údaje (například přihlašovací údaje superuživatele). Pokud ověřování selže, zůstanete na aktuální stránce nastavená form.errors na hodnotu True. Pokud je ověření úspěšné, Django přejde do relativní adresy URL v poli "další", <input type="hidden" name="next" value="/" />což je v tomto případě domovská stránka (/).

  8. Když se domovská stránka vykresluje znovu, je vlastnost true při user.is_authenticatedvykreslení šablony loginpartial.html . V důsledku toho se zobrazí zpráva Hello (uživatelské jméno) a odhlásit se. Ověřování můžete zkontrolovat user.is_authenticated v jiných částech aplikace.

    Hello message and logoff control on the Django Web Project app page.

  9. Abyste zkontrolovali, jestli má ověřený uživatel oprávnění pro přístup k určitým prostředkům, musíte z databáze načíst oprávnění konkrétního uživatele. Další informace naleznete v tématu Použití ověřovacího systému Django (dokumentace Django).

  10. 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 /admin/a /admin/doc/. Pokud chcete tato rozhraní povolit, postupujte následovně:

    1. Nainstalujte balíček Docutils Python do svého prostředí. Skvělým způsobem instalace je přidání nástrojů "docutils" do souboru requirements.txt . Potom přejděte na Průzkumník řešení, rozbalte projekt, rozbalte uzel Prostředí Pythonu a potom klikněte pravým tlačítkem na prostředí, které používáte, a vyberte Nainstalovat z requirements.txt.

    2. Otevřete soubor urls.py projektu Django a přidejte následující:

      from django.conf.urls import include
      from django.contrib import admin
      admin.autodiscover()
      
      urlpatterns = [
          path('admin/doc/', include('django.contrib.admindocs.urls'))
      ]
      
    3. V souboru settings.py projektu Django přejděte do INSTALLED_APPS kolekce a přidejte 'django.contrib.admindocs'.

    4. Když aplikaci restartujete, můžete přejít na /admin/, /admin/doc/ a provádět úlohy, jako je vytváření dalších uživatelských účtů.

      Django administrator interface.

  11. Poslední část toku ověřování se odhlásí. Jak můžete vidět v loginpartial.html, odhlásit odkaz jednoduše provádí POST na relativní adresu URL "/login", která je zpracována integrovaným zobrazením django.contrib.auth.views.logout. Toto zobrazení nezobrazuje žádné uživatelské rozhraní a jednoduše přejde na domovskou stránku (jak je znázorněno v urls.py pro vzor ^logout$). Pokud chcete zobrazit stránku s logem, nejprve změňte vzor adresy URL následujícím způsobem, abyste přidali vlastnost "template_name" a odebrali vlastnost "next_page":

    path('logout/',
        django.contrib.auth.views.logout,
        {
            'template_name': 'app/loggedoff.html',
            # 'next_page': '/',
        },
        name='logout')
    

    Pak vytvořte templates/app/loggedoff.html s následujícím (minimálním) obsahem:

    {% extends "app/layout.html" %}
    {% block content %}
    <h3>You have been logged off</h3>
    {% endblock %}
    

    Výsledek se zobrazí takto:

    Added logged off page.

  12. Až budete hotovi, zastavte server a znovu potvrďte změny do správy zdrojového kódu.

Otázka: Jaký je účel značky {% csrf_token %}, která se zobrazí v <prvech formuláře> ?

Odpověď: Značka {% csrf_token %} zahrnuje integrovanou ochranu žádosti o multi-site Django (csrf) ochrany (dokumentace 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í šablony (render) pak vloží potřebnou ochranu.

Další kroky

Poznámka:

Pokud v průběhu tohoto kurzu potvrdíte své řešení sady Visual Studio ke správě zdrojového kódu, je teď vhodná doba k dalšímu potvrzení. Vaše řešení by mělo odpovídat zdrojovému kódu kurzu na GitHubu: Microsoft/python-sample-vs-learning-django.

Nyní jste prozkoumali celou část šablon "Prázdný webový projekt Django" a "Django Web Project" v sadě Visual Studio. Seznámili jste se se všemi základy Django, jako je použití zobrazení a šablon. Prozkoumali jste také modely směrování, ověřování a používané databáze. Teď byste měli být schopni vytvořit vlastní webovou aplikaci s libovolnými zobrazeními a modely, které potřebujete.

Spuštění webové aplikace na vývojovém počítači je jen jedním krokem při zpřístupnění aplikace vašim zákazníkům. Další kroky můžou zahrnovat následující úlohy:

  • Stránku 404 můžete přizpůsobit vytvořením šablony s názvem templates/404.html. Když je k dispozici, Django používá tuto šablonu místo výchozí šablony. Další informace naleznete v části Zobrazení chyb v dokumentaci Django.

  • Psaní testů jednotek v tests.py; šablony projektů sady Visual Studio poskytují výchozí body pro tyto a další informace najdete v tématu Psaní první aplikace Django, část 5 – testování a testování v Django v dokumentaci Django.

  • Změňte aplikaci z SQLite na úložiště dat na úrovni produkčního prostředí, jako je PostgreSQL, MySQL a SQL Server (z nichž všechny je možné hostovat v Azure). Jak je popsáno v tématu Kdy použít SQLite (sqlite.org), SQLite funguje dobře u lokalit s nízkým až středním provozem s méně než 100 K hity za den. Pro vyšší svazky se ale nedoporučuje používat SQLite. SQLite je také omezený na jeden počítač, takže ho nejde použít v žádném scénáři s více servery, jako je vyrovnávání zatížení a geografická replikace. Informace o podpoře Django pro jiné databáze naleznete v tématu Nastavení databáze. Sadu Azure SDK pro Python můžete použít také k práci se službami úložiště Azure, jako jsou tabulky a objekty blob.

  • Nastavte kanál průběžné integrace nebo průběžného nasazování ve službě, jako je Azure DevOps. Kromě práce se správou zdrojového kódu (prostřednictvím Azure Repos nebo GitHubu nebo jinde) můžete nakonfigurovat Projekt Azure DevOps tak, aby automaticky spouštět testy jednotek jako předpoklad pro vydání. Kanál můžete také nakonfigurovat tak, aby se nasadil na přípravný server pro další testy před nasazením do produkčního prostředí. Azure DevOps se navíc integruje s monitorovacími řešeními, jako je App Přehledy, a celý cyklus zavře pomocí agilních nástrojů pro plánování. Další informace najdete v tématu Vytvoření kanálu CI/CD pro Python pomocí projektu Azure DevOps a také obecné dokumentace k Azure DevOps.

Přejít hlouběji