Перейти к содержанию

Пример реализации входа на сайт на шаблонах

Шаг 1. Настраиваем сайт

Создайте главную страницу по примеру из документации.

Шаг 2. Включите в .env вход:

# ...

ENABLE_GARPIX_AUTH=True

Это включает следующие точки:

  • /login/ - вход для сайтов на шаблонах, выдает сессию;
  • /logout/ - выйти из системы, удалить токен, сессию;
  • /api/auth/login/ - вход для SPA сайтов.
  • /api/auth/refresh/ - обновление токена SPA сайтов.
  • /api/auth/logout/ - выход для SPA сайтов.

Шаг 3. Создаем страницу входа

Добавим новую модель и создадим тип страницы.

В директории content/models создаем файл login_page.py.

from garpix_page.models import BasePage


class LoginPage(BasePage):

    template = 'garpixcms/pages/login.html'

    class Meta:
        verbose_name = "Страница входа"
        verbose_name_plural = "Страницы входа"
        ordering = ('-created_at',)

Изменяем файл content/models/__init__.py:

# ...
from .login_page import LoginPage

В директории content/admin создаем файл login_page.py:

from ..models.login_page import LoginPage
from django.contrib import admin
from garpix_page.admin import BasePageAdmin


@admin.register(LoginPage)
class LoginPageAdmin(BasePageAdmin):
    pass

Изменяем файл content/admin/__init__.py:

# ...
from .login_page import LoginPageAdmin

В директории content/translation создаем файл login_page.py:

from modeltranslation.translator import TranslationOptions, register
from ..models import LoginPage


@register(LoginPage)
class LoginPageTranslationOptions(TranslationOptions):
    pass

Изменяем файл content/translation/__init__.py:

# ...
from .login_page import LoginPageTranslationOptions

Теперь опять создаем миграции и применяем их:

python3 manage.py makemigrations
python3 manage.py migrate

Также, вы можете реализовать другой шаблон. Ниже пример обычного шаблона garpixcms/pages/login.html:

{% extends 'garpixcms/base.html' %}

{% block content %}
<h1>{{object.title}}</h1>

<h2>Вход</h2>
<p>Чтобы форма входа работала, включите в <code>.env</code> переменную <code>ENABLE_GARPIX_AUTH=True</code></p>
<div>
    {% include 'garpixcms/include/login.html' %}
</div>

{% endblock %}

И файла garpixcms/include/login.html:

{% if request.user.is_authenticated %}
    User is authenticated ({{request.user.username}}) | <a href="{% url 'logout' %}">Logout</a>
{% else %}
    <form action="{% url 'authorize' %}?next=/" method="post">
        {% csrf_token %}
        <div><input type="text" name="username"></div>
        <div><input type="password" name="password"></div>
        <div><button type="submit">Login</button></div>
    </form>
{% endif %}

Шаг 4. Создайте в админ-панели страницу входа

Создайте в "Структуре страниц" новую страницу и заполните необходимые поля. Обратите внимание, что ЧПУ не должен совпадать с обработчиком логина (URL: /login/)

Шаг 5. Попробуйте войти

Перейдите на страницу http://localhost:8000/ и попробуйте войти с помощью формы по умолчанию.