使用者登入與登出

依慣例直接使用內建的應用程式 django.contrib.auth 來處理身分認證的作業。

新增路徑規則

開啟專案路徑規則檔 forum/forum/urls.py,新增第 24 行規則:

urlpatterns = [ path('admin/', admin.site.urls), path('topic/', include('topic.urls')), path('', RedirectView.as_view(url='topic/')), path('user/', include('django.contrib.auth.urls')), ]

修改網站設定值

開啟專案設定檔 forum/forum/settings.py,在檔案最後新增以下設定值來指定登入後要導向的頁面路徑:

LOGIN_REDIRECT_URL = '/' # 登入成功後導向首頁

新增頁面範本

先新增資料夾 forum/pagetmpl/registration,再新增登入頁面範本檔案 forum/pagetmpl/registration/login.html,其內容如下:

{% extends "base.html" %} {% block content %} {% if form.errors %} <p class="alert alert-danger">帳號或密碼不符合,請再試一次。</p> {% endif %} <form method="post" action="{% url 'login' %}"> {% csrf_token %} <table class="table table-sm"> {{ form.as_table }} </table> <div> <input type="submit" class="btn btn-primary" value="登入" /> </div> </form> {% endblock %}

然後新增登出頁面範本檔案 forum/pagetmpl/registration/logged_out.html

{% extends "base.html" %} {% block content %} <p class="alert alert-info">您已登出!!</p> <a href="{% url 'login' %}" class="btn btn-primary">請按此處重新登入</a> {% endblock %}

修改導覽列範本 forum/pagetmpl/navbar.html ,修改為以下程式碼:

<!-- Navbar begin //--> <nav class="navbar navbar-expand-sm navbar-dark bg-primary mb-2"> <!-- 網站標誌 --> <div class="navbar-brand"> <i class="far fa-comment-alt"></i> 討論區 </div> <!-- 在小螢幕的設備上顯示可展開/收合導覽選單的按鈕 --> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"> <span class="navbar-toggler-icon"></span> </button> <!-- 導覽列選單內容(可收合) --> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item"> <a href="{% url 'topic_list' %}" class="nav-link"> <i class="fas fa-list"></i> 所有主題 </a> </li> <li class="nav-item"> <a href="{% url 'topic_new' %}" class="nav-link"> <i class="fas fa-edit"></i> 發起討論 </a> </li> <li class="nav-item"> {% if user.is_authenticated %} <a href="{% url 'logout' %}" class="nav-link"> <i class="fas fa-sign-out-alt"></i> 登出{{ user.username }} </a> {% else %} <a href="{% url 'login' %}" class="nav-link"> <i class="fas fa-sign-in-alt"></i> 登入 </a> {% endif %} </li> </ul> </div> </nav> <!-- Navbar end //-->