Django專案——應用程式users和登入
阿新 • • 發佈:2018-12-08
一 將應用程式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 %}
四 登入測試