התנתקות
חלק מהיחידה משתמשים וחשבונות במסלול ה-Django של Coddy. שיעור 3 מתוך 16.
למשתמש מחובר אין דרך להתנתק. אותה include() הוסיפה את /accounts/logout/, ששמו logout: היא מסיימת את ההפעלה, כך שהעוגייה כבר לא מצביעה על משתמש.
קישור רגיל לא יעזור. קישור שולח בקשת GET, ובקשת GET לעולם לא אמורה לשנות דבר: דף יכול להסתיר תמונה שהכתובת שלה היא כתובת ההתנתקות שלך, וכך לנתק אותך. לכן LogoutView מקבלת רק POST, ובקשת GET מקבלת 405 Method not allowed.
כפתור שמשנה משהו הוא טופס POST קטן, גם בלי שדות. המאפיין action מציין את כתובת ה-URL שאליה הטופס שולח את הבקשה, ולכן אפשר להציב אותו בכל דף:
<form method="post" action="{% url 'cart:empty' %}">
{% csrf_token %}
<button type="submit">Empty cart</button>
</form>לאחר ההתנתקות, Django מפנה אל LOGOUT_REDIRECT_URL. אין לו ערך ברירת מחדל: בלעדיו תראו את דף ההתנתקות של ממשק הניהול. הגדירו אותו ל-"/" ב-settings.py.
אתגר
קלהוסף לחצן Log out.
- ב־
base.html, מתחת ל־Signed in as, הוסף טופס ששולח בקשת POST אל{% url 'logout' %}עם{% csrf_token %}ולחצןLog out. - ב־
settings.py, הגדר אתLOGOUT_REDIRECT_URLלערך"/".
התחבר בתור ada (הסיסמה coddy-pass-123) ולחץ על Log out: בכותרת מופיע You are not signed in.
נסו בעצמכם
{% 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">
{% if user.is_authenticated %}
<p>Signed in as {{ user.username }}</p>
{% else %}
<p>You are not signed in.</p>
<a href="{% url 'login' %}">Log in</a>
{% endif %}
</div>
</header>
<main>
{% block content %}{% endblock %}
</main>
</body>
</html>
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה משתמשים וחשבונות
תרגלו בעצמכם: Django אונליין