Menu
CoddyTech

تسجيل الخروج

جزء من قسم المستخدمون والحسابات في رحلة 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.

challenge icon

التحدي

سهل

أضف زر «تسجيل الخروج».

  1. في base.html، أسفل Signed in as، أضف نموذجًا يرسل البيانات إلى {% url 'logout' %}، مع {% csrf_token %} وزر Log out.
  2. في 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>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المستخدمون والحسابات

تدرّب بنفسك: Playground لـ Django