После перенаправления файла login.html как URL, представления и шаблоны узнают, с каким пользователем они имеют дело? - PullRequest
0 голосов
/ 02 февраля 2019

Я использую login.html, предоставленный в django.auth (по умолчанию он находится в шаблонах / registration / login.html, верно?) Вот login.html:

<!-- templates/registration/login.html -->
{% extends 'base.html' %}

{% block title %}Login{% endblock %}

{% block content %}
<h2>Login</h2>
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Login</button>
</form>
{% endblock %}

Обратите внимание, что я не уведомляллюбая информация (например, user.username) для передачи на следующий URL.Я изменяю LOGIN_REDIRECT_URL на URL-адрес в приложении:

app_name = 'ride'

urlpatterns = [
    path('', views.home, name='home'),
]

Обратите внимание, что в URL-адресе еще нет.Затем он перейдет к views.py:

def home(request):
    return render(request,'ride/home.html')

И есть только объект запроса для передачи в шаблон.А вот поездка / home.html:

<!-- ride/templates/ride/home.html -->

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

{% block title %}HOmeeeeeeeeeee {% endblock %}

{% block content %}
{% if user.is_authenticated %}
  Hi {{ user.username }}
{% else %}
  <p>Welcome to CJ & XY's Ride Sharing Service!</p>
  <a href="{% url 'login' %}">login</a> |
  <a href="{% url 'login:signup' %}">signup</a>
{% endif %}
{% endblock %}

Я использую user.username в этом шаблоне, и он отлично отображается.

Итак, мой вопрос, как этот окончательный шаблон узнает, какой пользовательпроходит аутентификацию и имя пользователя какого пользователя?Потому что с самого начала я не передавал какую-либо информацию о пользователе, такую ​​как user.id или что-то еще при перенаправлении, URL-адресах и просмотрах.Это так волшебно.

Может кто-нибудь дать мне ключ?Спасибо!

1 Ответ

0 голосов
/ 02 февраля 2019

Здесь есть несколько шагов.

Когда вы регистрируетесь , Django сохраняет идентификатор аутентифицированного пользователя и серверную часть, которая аутентифицировала его, в сеансе.Сеанс в основном представляет собой словарь значений, хранящихся в базе данных и связанных с конкретным пользователем через идентификатор, хранящийся в файле cookie на компьютере пользователя.(Обратите внимание, что идентификатор в файле cookie не связан с идентификатором пользователя.)

При каждом запросе AuthenticationMiddleware проверяет этот идентификатор и выбирает соответствующего пользователя издБ, делая его доступным как request.user.(На самом деле, это делается лениво, поэтому БД не попадет, если вы не обращаетесь к пользователю.)

Когда вы визуализируете шаблон, процессор контекста auth получаетпользователь из запроса и делает его доступным в шаблоне в виде переменной user;

...