創建app
`startapp account`
settings增加配置
~~~
'account'
~~~
新建forms.py
~~~
# _*_ coding:utf-8 _*_
__author__ = 'canmeng'
__date__ = '2018/1/8 12:54'
from django import forms
class LoginFrom(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
~~~
view配置
~~~
# _*_ coding:utf-8 * _*_
from django.shortcuts import render
#引入系統模塊
from django.http import HttpResponse
#引入內置用戶管理
from django.contrib.auth import authenticate, login
#引入forms類
from .forms import LoginFrom
# Create your views here.
def user_login(request):
#method是HttpRequest對象的一個常用屬性,可返回POST、GET
if request.method == "POST":
login_form = LoginFrom(request.POST)
#is_valid驗證傳入數據是否合法性
if login_form.is_valid():
#cleaned_data引用一個字典類型數據
cd = login_form.cleaned_data
#authenticate檢驗數據庫帳號密碼是否正確
user = authenticate(username=cd['username'], password=cd['password'])
#login引入的login()函數,已語句user實例對象作為參數,實現用戶登錄,登錄后調用session
if user:
#判斷正確返回HttpResponse
login(request, user)
#redirect跳轉
#return redirect("blog:blog_title")
return HttpResponse("Wellcome YOU")
else:
return HttpResponse("Sorry")
if request.method == "GET":
login_form = LoginFrom()
return render(request, "account/login.html", {"form":login_form})
~~~
login.html樣板
~~~
{% extends "base.html" %}
{% block title %}登錄頁面{% endblock %}
{% block content %}
<h1>系統登錄</h1>
<p>用戶登錄</p>
<form class="form-horizontal" action="." method="post">{% csrf_token %}
{# {{ form.as_p }}#}
<label for="{{ form.username.id_for_lab }}">帳號</label>
<div>{{ form.username }}</div>
<label for="{{ form.password.id_for_lab }}">密碼</label>
<div>{{ form.password }}</div>
<input type="submit" value="登錄">
</form>
{% endblock %}
~~~
配置app urls
~~~
# _*_ coding:utf-8 _*_
__author__ = 'canmeng'
__date__ = '2018/1/7 19:16'
from django.conf.urls import url
#引入app項目 view
from .import views
from django.conf import settings
urlpatterns = [
url(r'^login/$', views.user_login, name="user_login"),
]
~~~
配置項目urls
~~~
urlpatterns = [
#url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
url(r'^blog/', include('blog.urls', namespace='blog')),
url(r'^accout/', include('account.urls', namespace='account')),
]
~~~
判斷用戶登錄后顯示文件
header.html樣板
~~~
{% load staticfiles %}
<div class="container">
<nav class="navbar navbar-default" role="navigation">
<div class="nav-header">
<a class="navbar-brand" href="http://www.baidu.com"><img src="{% static '/static/images/logo.jpg' %}" width="100px"></a>
</div>
<div>
<ul class="nav navbar-nav" role="navigation">
<li><a href="{% url 'blog:blog_title' %}">BLOG</a> </li>
</ul>
<ul class="nav navbar-nav navbar-right">
{# <li><a href="{% url 'account:user_login' %}">Login</a> </li>#}
{# #判斷用戶登錄后顯示內容is_authenticated內置函數#}
{% if user.is_authenticated %}
<li><a href="#">{{ user.username }}</a> </li>
{# #account:user_logout用戶退出#}
<li><a href="{% url 'account:user_logout' %}">Logout</a> </li>
{% else %}
{# #account:user_login用戶登錄#}
<li><a href="{% url 'account:user_login' %}">Login</a> </li>
{% endif %}
</ul>
</div>
</nav>
</div>
~~~
**第二版本引用系統自帶登錄、退出**
**配置項目urls**
~~~
# _*_ coding:utf-8 _*_
__author__ = 'canmeng'
__date__ = '2018/1/7 19:16'
from django.conf.urls import url
#引入app項目 view
from .import views
from django.conf import settings
#引入系統自動登錄views
from django.contrib.auth import views as auth_views
urlpatterns = [
#url(r'^login/$', views.user_login, name="user_login"),#自建系統登錄
url(r'^login/$', auth_views.login, name="user_login"),#引入系統自帶views登錄
# url(r'^logout/$', auth_views.logout, name="user_logout"),#引入系統自帶views退出
#用戶退出,定義連接"template_name": "account/logout.html"
url(r'^logout/$', auth_views.logout, {"template_name": "account/logout.html"}, name="user_logout"),
]
~~~
logout.html樣板
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
安全退出
<a href="{% url 'blog:blog_title' %}">返回首頁</a>
</body>
</html>
~~~
settings.py配置增加
~~~
#判斷用戶登錄后重定向訪問地址
LOGIN_REDIRECT_URL = '/blog/'
~~~
**備注:因為引用的auth_views.login,所以需要根據系統自帶配置修改 registration/login.html文件**