تسجيل الخروج
جزء من قسم المستخدمون والحسابات في رحلة Django على Coddy. الدرس 3 من 16.
لا توجد طريقة للمستخدم الذي سجّل الدخول لتسجيل الخروج. أضافت include() نفسها /accounts/logout/، وسمّته logout: فهو ينهي الجلسة، لذا لم تعد ملفّة تعريف الارتباط تشير إلى مستخدم.
لن يكفي رابط عادي. يرسل الرابط طلب GET، ويجب ألا يغيّر طلب GET أي شيء مطلقًا: فقد تخفي صفحة صورةً عنوانها هو عنوان URL لتسجيل الخروج، فتسجّل خروجك. لذلك لا يقبل LogoutView إلا POST، ويؤدي طلب GET إلى 405 الطريقة غير مسموح بها.
الزر الذي يغيّر شيئًا هو نموذج 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.
التحدي
سهلأضف زر «تسجيل الخروج».
- في
base.html، أسفلSigned in as، أضف نموذجًا يرسل البيانات إلى{% url 'logout' %}، مع{% csrf_token %}وزرLog out. - في
settings.py، اضبطLOGOUT_REDIRECT_URLعلى"/".
سجّل الدخول باسم ada (كلمة المرور coddy-pass-123) واضغط على «تسجيل الخروج»: سيظهر في الترويسة 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>
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المستخدمون والحسابات
تدرّب بنفسك: Playground لـ Django