【Djangoは】階段状のピットミドルウェアエラー:例外TypeError:オブジェクトは、()は、パラメータは解決できない取り

 

ミドルウェアを使用する場合は、エラー 例外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>')

 

 

 

公開された50元の記事 ウォン称賛10 ビュー6588

おすすめ

転載: blog.csdn.net/qq_23996069/article/details/104922501