天天看點

基于控制權限和登入驗證跳轉的django登入界面的實作 - 風言楓語

基于控制權限和登入驗證跳轉的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) 

編輯 

收藏 

舉報

基于控制權限和登入驗證跳轉的django登入界面的實作 - 風言楓語