1.在 views 中添加登錄方法
在 Django 中底扳,我們用 AuthenticationForm 來處理用戶登錄信息(即填寫用戶名和密碼)泼掠,用 authenticate 來驗證登錄信息是否和已存在用戶相對應(yīng),最后用 login 方法來進行用戶登錄的操作拘鞋。
from django.shortcuts import render, redirect
# 填寫用戶登錄信息的表單,可處理用戶名和密碼
from django.contrib.auth.forms import AuthenticationForm
# 登錄和校驗?zāi)K
from django.contrib.auth import login, authenticate
# 登錄
def user_login(request):
context = {}
# 登錄信息表單
if request.method == 'GET':
form = AuthenticationForm
# 處理登錄數(shù)據(jù)
if request.method == 'POST':
# 獲取用戶填寫的登錄信息,并進行校驗
form = AuthenticationForm(data=request.POST)
if form.is_valid():
# 登錄操作
login(request, form.get_user())
return redirect(to='user_info')
context['form'] = form
return render(request, 'loginPage.html', context)
# 用戶個人信息
def user_info(request):
return render(request, 'userInfo.html')
2.分配 url
Django 的登出模塊 logout 模塊直接在 url 層引用即可使用
from django.conf.urls import url
from django.contrib import admin
from myApp.views import user_login, user_info
# 登出模塊
from django.contrib.auth.views import logout
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 登錄頁
url(r'^user_login/$', user_login, name='user_login'),
# 個人信息頁
url(r'^user_info/$', user_info, name='user_info'),
# 登出, next_page 表示跳轉(zhuǎn)到 user_login
url(r'^logout/$', logout,{'next_page': '/user_login'}, name='logout'),
]
3.編寫前端
登錄頁 loginPage.html:
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<title>login</title>
</head>
<body>
<!-- 填寫用戶登錄信息的表單 -->
<form method="post" action="{% url 'user_login' %}">
{% for field in form %}
<divstyle="padding: 10px">
{{ field.label }}
{{ field }}
</div>
{% endfor %}
{% csrf_token %}
<button type="submit">登錄</button>
</form>
<!-- 錯誤信息 -->
{% if form.errors %}
<p>該用戶不存在或密碼錯誤唧垦,請正確輸入</p>
{% endif %}
</body>
</html>
用戶個人信息頁 userInfo.html:
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<title>user_info</title>
</head>
<body>
<p>用戶名: {{ request.user.username }}</p>
<a href={% url 'logout' %}>
<button>退出</button>
</a>
</body>
</html>
4.測試
打開:http://127.0.0.1:8000/user_login/ ,可以看到登錄界面:
輸入用戶名和賬號密碼:
再點擊退出液样,就能回到登陸頁振亮。
如果填寫了錯誤的用戶名或密碼,則會返回錯誤信息: