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.

challenge icon

التحدي

سهل
  • في base.html، أسفل Signed in as ...، يتيح زر Log out للمستخدم تسجيل الخروج.
  • بعد تسجيل الخروج، يصل الزائر إلى /.

اضغط على تشغيل، وسجّل الدخول باسم ada (كلمة المرور coddy-pass-123)، ثم اضغط على تسجيل الخروج.

جرّب بنفسك

{% 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