基于控制權限和登入驗證跳轉的django登入界面的實作
django架構提供了出去登入和退出系統的login和logout的視圖函數,本實作中使用系統自帶的是視圖函數。需要在settings.py,urls.py,views.py和模闆檔案等幾個方面進行考慮。
settings.py
首先確定相應的配置是正确的。
将djnago.contrib.auth和django.contrib.contenttype放到INSTALLED_APPS設定中。INSTALLED_APPS和MIDDLEWARE_CLASSES的配置如下圖所示。
設定模闆檔案路徑為/liuzp/DataCrawl/djcode/website/templates和/liuzp/DataCrawl/djcode/website/css/bootstrap。
設定完成後,執行python manage.py syncdb,在資料庫中生成相應的資料表。
MIDDLEWARE_CLASSES = (
\'django.middleware.common.CommonMiddleware\',
\'django.contrib.sessions.middleware.SessionMiddleware\',
\'django.middleware.csrf.CsrfViewMiddleware\',
\'django.contrib.auth.middleware.AuthenticationMiddleware\',
\'django.contrib.messages.middleware.MessageMiddleware\',
\'django.middleware.locale.LocaleMiddleware\'
# Uncomment the next line for simple clickjacking protection:
# \'django.middleware.clickjacking.XFrameOptionsMiddleware\',
)
# Python dotted path to the WSGI application used by Django\'s runserver.
WSGI_APPLICATION = \'website.wsgi.application\'
import os.path
TEMPLATE_DIRS = (
\'/liuzp/DataCrawl/djcode/website/templates\',
\'/liuzp/DataCrawl/djcode/website/css/bootstrap\',
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don\'t forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
\'django.contrib.auth\',
\'django.contrib.contenttypes\',
\'django.contrib.sessions\',
\'django.contrib.sites\',
\'django.contrib.messages\',
\'django.contrib.staticfiles\',
# Uncomment the next line to enable the admin:
\'django.contrib.admin\',
# Uncomment the next line to enable admin documentation:
\'django.contrib.admindocs\',
)
urls.py
首先編寫urls.py檔案。如下所示,其中django.contrib.auth.views.login和django.contrib.auth.views.logout視圖函數是django架構提供的。
from django.conf.urls import patterns, include, url
from website import views
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
from django.contrib.auth.views import login,logout
admin.autodiscover()
urlpatterns = patterns(\'\',
#登陸
(r\'^accounts/login/$\',login),
#退出
(r\'^accounts/logout/$\',logout),
#主界面
(r\'^main/$\',views.main),
)
views.py
其次編寫views.py檔案。主要是編寫/main/的視圖函數。使用decorators.login_required的裝飾件,用來控制非登入使用者的通路頁面的權限,并且登入成功後,可以回到需要通路的頁面。
login_required()的用法是:首先如果使用者沒有登入,則重定向至settings.LOGIN_URL,并且在查詢字元串中傳遞目前絕對路徑;其次如果使用者已經登入,那麼就正常的執行視圖函數。
#encoding=utf-8
from django.http import HttpResponse
from django.shortcuts import render_to_response
from dboperation.user import isuserexist
from users.models import User
from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import login,logout
import datetime
@login_required(login_url=\'/accounts/login\')
def main(request):
return render_to_response(\'main.html\')
模闆檔案
模闆檔案需要和login視圖檔案相對應,是以需要在template檔案夾下建立/registration/login.html檔案,作為登入界面。本文中的登入界面使用bootstrap的樣式包。
如果賬号和密碼正确,則登入成功,頁面将會重定向到next指定的URL中。如果next沒有提供,則使用{{ next|add:"/main/" }}将頁面重定向到/main/的界面。
<html>
<link href="/css/bootstrap.css" rel=\'stylesheet\' type=\'text/css\' />
<link href="/css/main.css" rel=\'stylesheet\' type=\'text/css\'>
<body style=\'background-color:#CCFFFF\'>
<div class=\'row\'>
<div class=\'col-md-3\'>
</div>
<div class=\'col-md-6\'>
<div class=\'login_form\'>
<div class=\'login_title\'>
<span class=\'text-success\'>NCTC資料抓取平台</span>
</div>
<form class="form-horizontal" role="form" action="/accounts/login/" method="post">
{% csrf_token %}
<div class="form-group">
{% if form.errors %}
<label for="message" class="col-sm-5 control-label" style=\'margin:-10px 0px 5px 30px;color:#990033;font-size:10px\'>賬戶或者密碼錯誤</label>
{% endif %}
</div>
<div class=\'form-group\'>
<label for="username" class="col-sm-2 control-label" style=\'color:#330066\'>賬号</label>
<div class="col-sm-5">
<input class="form-control" name="username" id=\'username\' placeholder="使用者名">
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label" style=\'color:#330066\'>密碼</label>
<div class="col-sm-5">
<input type="password" class="form-control" name="password" id=\'password\' placeholder="密碼">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" style=\'color:white\' value=\'登入\'/>
{% if next %}
<input type=\'hidden\' name=\'next\' value=\'{{ next }}\'>
{% else %}
<input type=\'hidden\' name=\'next\' value=\'{{ next|add:"/main/" }}\'>
{% endif %}
</div>
</div>
</form>
</div>
</div>
</div>
</body>
Admin背景管理
進入管理背景,建立一個使用者,然後就可以使用這個使用者進行登入了。
如下圖所示,可以修改使用者的權限。
posted on
2013-09-30 21:52
風言楓語
閱讀(688)
評論(0)
編輯
收藏
舉報
