使用django自帶的驗證子產品
1、首先使用python manage.py startapp models為目前項目添加一個應用。
2、在setting.py中INSTALLED_APPS後面添加'models',
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'models',
]
3、配置并同步資料庫
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
#'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'gangdou',
'USER': 'root',
'PASSWORD': '1',
'HOST':'ip',
'PORT':'3306',
}
}
同步資料庫
python manage.py migrate
4、使用python manage.py createsuperuser --username=gangdou [email protected]建立一個超級管理者使用者,記得密碼必須大于8位
5、在urls.py中添加
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/$',views.home),#通過url跳轉到登陸頁面
url(r'^index/',views.index),#通過url跳轉到首頁
url(r'^login_view$',views.login_view),#填寫完資訊後送出登陸驗證
url(r'^logout_view$',views.logout_view),#退出登陸
]
6、在views.py中添加
# -*- coding:utf-8 -*-
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate
from django.contrib.auth import login,logout
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
def home(request):
return render(request,"login.html")
@login_required#使用者登陸校驗,必須登陸之後才能通路,如果沒有登陸,就自動跳轉到setting.py裡面LOGIN_URL='/home'設定的位址
def index(request):
return render(request,"index.html")#同一個頁面的跳轉可以使用render
def login_view(request):
context = {}
if request.method == 'POST':#此處必須校驗是post方法送出過來的請求
username = request.POST.get("username")
password = request.POST.get("password")
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)#這個時候Django認證子產品會在資料庫django_session表中添加一條session資料
request.session['username']=username
return HttpResponseRedirect("/index")#這裡不使用render的方式是由于render方式跳轉後,浏覽器位址欄的url不會随之變化,可能影響後面的url跳轉
else:
context["msg"] = "使用者已被鎖定,請聯系管理者"
return render_to_response("login.html",context)
else:
context["msg"] = "使用者名或密碼錯誤"
return render_to_response("login.html",context)
@login_required
def logout_view(request):
logout(request)#此時Django認證子產品會将資料庫的session資料給清空
return HttpResponseRedirect("/home")
7、login.html
<form role="form" action="/login_view" method="post"><!--此處method中的url一定要前面一定要加/,後面/是否要加取決于urls.py的配置-->
<input name="username" type="text" autofocus>
<input name="password" type="password" value="">
<div class="form-group">{{ msg }}</div>
<button>登陸</button>
</form>
8、logout
<a href="/logout_view">登出</a>
9、清理session資料,自此django的認證登陸登出功能完成,但是此處有個問題,就是當使用者在手動關閉浏覽器的時候,session資料不會自動失效,資料庫的session資料也不會自動删除,是以需要在setting.py中加一些配置,然後寫一個定時清理該表過期session資料的腳本
SESSION_COOKIE_AGE = 60*30#設定session過期時間為30分鐘
SESSION_EXPIRE_AT_BROWSER_CLOSE = True#當浏覽器被關閉的時候将session失效,但是不能删除資料庫的session資料
SESSION_SAVE_EVERY_REQUEST = True#每次請求都要儲存一下session
轉載于:https://www.cnblogs.com/gangdou/p/7900264.html