美文网首页
Django中间件时出现TypeError: BlockedIP

Django中间件时出现TypeError: BlockedIP

作者: 丙吉 | 来源:发表于2022-06-17 14:43 被阅读0次
在学习Django中间件是出现两种错误:
(1)TypeError: BlockedIPSMiddleware() takes no arguments
image.png
(2)TypeError: init() takes 1 positional argument but 2 were given
image.png
这两种错误,都是Django升级所致,解决方法有两种:加载包或在函数中加入参数。
加载包示例:
原始代码如下:
from django.http import HttpResponse
class BlockedIPSMiddleware(object):
    EXCLUDE_IPS = ['127.0.0.1']

    def process_view(self, request, view_func, *view_args, **view_kwargs):
        '''视图函数调用之前会调用'''
        user_ip = request.META['REMOTE_ADDR']
        if user_ip in BlockedIPSMiddleware.EXCLUDE_IPS:
            return HttpResponse('<h1>IP受限了哟,请更换IP</h1>')
报错中间件函数没有包含任何参数。

因为少了参数所致,所以要导入一个函数,并把让自定义函数继承这个类。
修改后的代码为:

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin

class BlockedIPSMiddleware(MiddlewareMixin):
    EXCLUDE_IPS = ['127.0.0.1']

    def process_view(self, request, view_func, *view_args, **view_kwargs):
        '''视图函数调用之前会调用'''
        user_ip = request.META['REMOTE_ADDR']
        if user_ip in BlockedIPSMiddleware.EXCLUDE_IPS:
            return HttpResponse('<h1>IP受限了哟,请更换IP</h1>')
image.png
第二个错误,自定义TestMiddleware时,加载包解决不了此问题,得在init中加入参数。

修改后的代码:

class TestMiddleware(MiddlewareMixin):
    '''中间件类'''
    def __init__(self, get_response):
        '''服务器重启之后,接收第一个请求时调用'''
        print('----init---')
        self.get_response = get_response

    def process_request(self, request):
        '''产生request对象之后,url匹配之前调用'''
        print('----process_request---')

    def process_view(self, request, view_func, *view_args, **view_kwargs):
        '''在url匹配之后,视图函数调用之前'''
        print('----process_view---')

    def process_response(self, request, response):
        '''在view视图函数调用之后,内容返回浏览器调用之前'''
        print('----process_response---')
        return response
image.png
最后再调用即可
image.png

详细参考:
https://blog.csdn.net/xiaojin21cen/article/details/108400794

相关文章

网友评论

      本文标题:Django中间件时出现TypeError: BlockedIP

      本文链接:https://www.haomeiwen.com/subject/xofhvrtx.html