訪問者は誰?
CoddyのDjangoジャーニー「ユーザーとアカウント」セクションの一部。レッスン 1/16。
このメモアプリを開いた人は、誰でもすべてのメモを見ることができます。一人ひとりが自分のメモを持てるようにするには、まずサイトが誰が訪問しているのかを知る必要があります。
Djangoのアプリdjango.contrib.authは、ユーザー名、ハッシュ化されたパスワード、メールアドレスをUserモデルに保存します。誰かがログインすると、Djangoはセッションを使ってその人を記憶します。ブラウザーはリクエストごとにCookieという小さな値を送り返し、その値はサーバー上の行を指しています。
リクエストのたびに、Djangoは訪問者をrequest.userに設定し、テンプレートではuserとして利用できます。ログインしていない訪問者はAnonymousUserなので、is_authenticatedで確認します。あるショップでは、訪問者にだけバナーを表示します。
{% if not user.is_authenticated %}
<p class="banner">Make an account to save your cart.</p>
{% endif %}チャレンジ
簡単base.html の <div class="account"> 内に、訪問者が誰なのかを表示します。ログインしている場合、ボックスには Signed in as とユーザー名が表示されます。たとえば Signed in as ada のようになります。それ以外の場合は You are not signed in. と表示されます。
/ を開くと、You are not signed in. と表示されます。ada として /admin/ でログインし(パスワードは coddy-pass-123)、その後 / を開くと、Signed in as ada と表示されます。
自分で試してみよう
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{% block title %}Notes{% endblock %}</title>
<link rel="stylesheet" href="{% static 'notes/style.css' %}">
</head>
<body>
<header>
<a class="brand" href="{% url 'notes:list' %}">Notes</a>
<nav>
<a href="{% url 'notes:create' %}">New note</a>
</nav>
<div class="account">
</div>
</header>
<main>
{% block content %}{% endblock %}
</main>
</body>
</html>
ユーザーとアカウントのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド