您好,登錄后才能下訂單哦!
這篇文章主要講解了Django實現(xiàn)用戶登陸訪問限制的方法,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。
在網(wǎng)站開發(fā)過程中,經(jīng)常會遇到這樣的需求:用戶登陸系統(tǒng)才可以訪問某些頁面,如果用戶沒有登陸而直接訪問就會跳轉(zhuǎn)到登陸界面。
要實現(xiàn)這樣的需求其實很簡單:
1、在相應(yīng)的 view 方法的前面添加 django 自帶的裝飾器 @login_required
2、在 settings.py 中配置 LOGIN_URL 參數(shù)
3、修改 login.html 表單中的 action 參數(shù)
# views.py from djanco.contrib.auth.decorators import login_required from django.shortcuts import render_to_response @login_required def index(request): return render_to_response('index.html')
# settings.py .... LOGIN_URL = '/accounts/login/' # 根據(jù)你網(wǎng)站的實際登陸地址來設(shè)置 ....
如果要使用 django 默認(rèn)登陸地址,則可以通過在 urls.py 中添加如此配置:
# urls.py .... url(r'^accounts/login/', views.login), ....
# login.html <div class="container"> <form class="form-signin" action="/accounts/login/" method="post"> {% csrf_token %} <!--csrf_token:生成令牌--> <h3 class="form-signin-heading" align="center">登錄系統(tǒng)</h3> <label for="inputUsername" class="sr-only">username</label> <input type="text" name="username" id="inputUsername" class="form-control" placeholder="username" required autofocus> <label for="inputPassword" class="sr-only">Password</label> <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required> <div class="checkbox"> <label> <input type="checkbox" value="remember-me"> 記住密碼 </label> </div> <br /> <button class="btn btn-lg btn-primary btn-block" type="submit">登錄</button> <br /> <span >{{ login_err }}</span> </form> </div> <!-- /container -->
補充知識:Django 之禁止特定的 IP訪問系統(tǒng)
有時候我們上一些網(wǎng)站,或者用爬蟲技術(shù)去爬,使用的次數(shù)很頻繁,會被網(wǎng)站記錄加入黑名單,當(dāng)我們再次訪問的時候會被提示,你不能訪問該網(wǎng)址。
那么這個技術(shù)在 Django 里面如何實現(xiàn)呢?
我搜索了一些方法,找到的資料不多,有一些可能有效,但是沒有可以直接運行 demo,那么這里就提供一種使用中間件的 demo,親測有效。
自定義一個 middleware.py 文件,這個文件要在 Django 的 settings.py 配置文件中被引用,所以我放在與 settings.py 同文件夾的目錄下。
middleware.py
from django.http import HttpResponse from django.utils.deprecation import MiddlewareMixin # 1.10.x class TestMiddleware(MiddlewareMixin): def process_view(self,request,view_func,*view_args,**view_kwargs): EXCLUDE_IPS = ['192.168.1.54'] if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META['HTTP_X_FORWARDED_FOR'] else: ip = request.META['REMOTE_ADDR'] if ip in EXCLUDE_IPS: return HttpResponse('<h2>您的ip被禁止</h2>')
其中,關(guān)于自定義中間件的函數(shù)名稱例如 process_view() ,還有其它的例如 _init_ 之類在文檔中有具體解釋,這里只用到這個。
然后在 settings.py 中引入這個中間件:
settings.py
[ 'hunter.middleware.TestMiddleware', ]
其中 hunter 是我的系統(tǒng)的名稱,在末尾添加即可。
然后重啟我們的 Django 系統(tǒng),就可以實現(xiàn)禁止特定 IP 訪問的功能。
注意
這個 EXCLUDE_IPS 是我手動添加的一個列表,如果想對這個 IP 進(jìn)行可持續(xù)發(fā)展的管理,可以在用戶訪問系統(tǒng)的時候記錄下他們的 IP ,然后記錄在 MySQL 數(shù)據(jù)庫中,對其中的異常數(shù)據(jù)進(jìn)行禁止的處理。
對于訪問用戶頻繁訪問、添加黑名單有很好的療效,這里值得推薦。
看完上述內(nèi)容,是不是對Django實現(xiàn)用戶登陸訪問限制的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。