ミドルウェアを使用する場合は、エラー 例外TypeError:オブジェクトは、()パラメータを受け取りません 。
オリジナルのコードは :(特定のIPブラウザアクセスの禁止を達成します
from django.http import HttpResponse
class BlockedIPSMiddleware(object):
'''中间件类'''
EXCLUDE_IPS = ['192.168.43.28'] # 禁止访问的地址列表
def process_view(self, request, view_func, *view_args, **view_kwargs):
'''视图函数调用之前会调用'''
user_ip = request.META['REMOTE_ADDR']
print(user_ip)
if user_ip in BlockedIPSMiddleware.EXCLUDE_IPS: # 运行验证时,启动服务时指明ip,设置ALLOWED_HOSTS = ['*']
return HttpResponse('<h1>Forbidden</h1>')
正しく前提活性化ミドルウェア・コンポーネントに登録され、エラー:例外TypeError:オブジェクト()パラメータNOをとり。
理由:Djangoのバージョンアップ、ミドルウェアの新しいセットを使用するには、ミドルウェアクラスは、GET_RESPONSEパラメータを受け取る必要があります。公式ドキュメントと例を参照してください:あなた自身のミドルウェアを書きます。
解決方法1:関数の定義とミドルウェアカテゴリで__call__ __init__機能などの公式サイト、一例として。GET_RESPONSE受信パラメータ。
from django.http import HttpResponse
class BlockedIPSMiddleware(object):
'''中间件类'''
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
EXCLUDE_IPS = ['192.168.43.28'] # 禁止访问的地址列表
def process_view(self, request, view_func, *view_args, **view_kwargs):
#...省略
解決策2:使用することもでき MiddlewareMixinは、 Djangoが前に1.10と1.10にそれ以降のバージョンと互換性のミドルウェア: 1.10ミドルウェアDjangoの前にアップグレード
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class BlockedIPSMiddleware(MiddlewareMixin):
EXCLUDE_IPS = ['192.168.43.28'] # 禁止访问的地址列表
def process_view(self, request, view_func, *view_args, **view_kwargs):
'''视图函数调用之前会调用'''
user_ip = request.META['REMOTE_ADDR']
print(user_ip)
if user_ip in BlockedIPSMiddleware.EXCLUDE_IPS: # 运行验证时,启动服务时指明ip,设置ALLOWED_HOSTS = ['*']
return HttpResponse('<h1>Forbidden</h1>')