1. 程式人生 > >Django專案——應用程式users和登入

Django專案——應用程式users和登入

一 將應用程式users新增到settings.py中

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # 我的應用程式
    'learning_logs',
    'users',
)

二 包含應用程式users的URL

# -*- coding: utf-8 -*-

from django.conf.urls import include, url
from django.contrib import admin
'''
這行程式碼與任何以單詞 users 打頭的 URL (如 http://localhost:8000/users/login/ )都匹配。
我們還建立了名稱空間 'users' ,以便將應用程式 learning_logs 的 URL 同應用程式 users 的 URL 區分開來。
'''
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^users/', include('users.urls', namespace='users')),
    url(r'', include('learning_logs.urls', namespace='learning_logs')),
]

三 登入頁面

1 使用者應用的url

# -*- coding: utf-8 -*-

from django.conf.urls import url
# 匯入views中login
from django.contrib.auth.views import login

from . import views

'''
1 第一個url解析
登入頁面的 URL 模式與 URL http://localhost:8000/users/login/ 匹配。
這個 URL 中的單詞 users 讓 Django 在 users/urls.py 中查詢,而單詞login 讓它將請求傳送給 Django 預設檢視 login
(注意,檢視實參為 login ,而不是 views.login )。
鑑於我們沒有編寫自己的檢視函式,我們傳遞了一個字典,告訴 Django去哪裡查詢我們將編寫的模板。
這個模板包含在應用程式 users 而不是 learning_logs 中。
'''
urlpatterns = [
    # 登入頁面.
    url(r'^login/$', login, {'template_name': 'users/login.html'},
        name='login'),
        
]

2 登入模板

<!--一個應用程式中的模板可繼承另一個應用程式中的模板。-->
{% extends "learning_logs/base.html" %}

{% block content %}
  <!--如果表單的 errors 屬性被設定,我們就顯示一條錯誤訊息,
    指出輸入的使用者名稱 — 密碼對與資料庫中儲存的任何使用者名稱 — 密碼對都不匹配。-->
  {% if form.errors %}
  <p>使用者名稱和密碼不匹配,請重試!</p>
  {% endif %}
  <!--讓登入檢視處理表單,因此將實參 action 設定為登入頁面的 URL -->
  <form method="post" action="{% url 'users:login' %}">
  {% csrf_token %}
    <!--登入檢視將一個表單傳送給模板,在模板中,我們顯示這個表單-->
  {{ form.as_p }}
    
  <button name="submit">log in</button>
  <!--我們包含了一個隱藏的表單元素 —— 'next' ,其中的實參 value 告訴 Django 在使用者成功登入後將其重定向到什麼地方
     —— 在這裡是主頁-->
  <input type="hidden" name="next" value="{% url 'learning_logs:index' %}" />
  </form>
    
{% endblock content %}

3 連結到登入頁面

<p>
  <a href="{% url 'learning_logs:index' %}">學習筆記</a> -
  <a href="{% url 'learning_logs:topics' %}">主題</a> -
  <!--在 Django 身份驗證系統中,每個模板都可使用變數 user ,
  這個變數有一個 is_authenticated 屬性:如果使用者已登入,
  該屬性將為 True ,否則為 False 。-->
  {% if user.is_authenticated %}
  <!--對於已通過身份驗證的使用者,還設定了屬性 username ,
  我們使用這個屬性來個性化問候語,讓使用者知道他已登入-->
    你好, {{ user.username }}.
    <a href="{% url 'users:logout' %}">退出</a>
  {% else %}
  <!--對於還未通過身份驗證的使用者,我們再顯示一個到登入頁面的連結-->
    <a href="{% url 'users:register' %}">註冊</a> -
    <a href="{% url 'users:login' %}">登入</a>
  {% endif %}
</p>

{% block content %}{% endblock %}

四 登入測試