Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: Custom Middleware results in NoneType Error

Tags:

i got this Error:


     Internal Server Error: /
    Traceback (most recent call last):
      File "/home/cena/AjiiMajii/.venv/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
        response = get_response(request)
      File "/home/cena/AjiiMajii/.venv/local/lib/python2.7/site-packages/django/utils/deprecation.py", line 142, in __call__
        response = self.process_response(request, response)
      File "/home/cena/AjiiMajii/.venv/local/lib/python2.7/site-packages/django/middleware/clickjacking.py", line 32, in process_response
        if response.get('X-Frame-Options') is not None:
    AttributeError: 'NoneType' object has no attribute 'get'
    [04/Dec/2017 20:08:25] "GET / HTTP/1.1" 500 65880

    

my middleware is :


MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'cms.Middleware.Visits',
]

</pre>

and my custom middleware 'cms.Middleware.Visits'

class Visits(MiddlewareMixin): def __init__(self,get_response): self.get_response = get_response def __call__(self, request): print '*'*22 print self.get_client_ip(request) print '*'*22 def get_client_ip(self,request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[-1].strip() else: ip = request.META.get('REMOTE_ADDR') return ip def RedisConnection(self): Connection=redis.Redis(host='localhost',port='6379') self.Connection=Connection return self.Connection def IpCheker(self): # just set and count of visit[s] for ever ip print '%'*30 print self.get_client_ip() print '%'*30 self.RedisConnection() if self.Connection.get(self.CliReq): HashPattern=self.HashSetter(self.CliReq) UserId=self.Connection.get(self.CliReq) UserPattern="User:Id:{}".format(UserId) print UserPattern self.Connection.hincrby(UserPattern,'vcount') else: IDnum=self.IdGenerator(self.CliReq) self.Connection.set(self.CliReq,IDnum) HashPattern=self.HashSetter(self.CliReq) Location=self.GetLoc(self.CliReq) self.Connection.hset(HashPattern,'ip',self.CliReq) self.Connection.hset(HashPattern,'vcount',1) self.Connection.hset(HashPattern,'loc',Location) def HashSetter(self,ip): id=self.IdGenerator(ip) IdStyle='User:Id:{}'.format(id) return IdStyle def IdGenerator(self,ip): Count=self.Connection.keys('User:Id:*') id= len(Count) + 1 return id def GetLoc(self,ip): #GetLocation oF ip's print 'f' * 80 ApiLoc='http://www.freegeoip.net/json/' ABSLOC=requests.get('http://www.freegeoip.net/json/{}'.format(ip)) LocInfo=json.loads(ABSLOC.content) return LocInfo['country_name'] </pre>

i cant resolve or debug this, why this happen?

like image 711
Sina hy Avatar asked Dec 04 '17 17:12

Sina hy


1 Answers

I think in the middleware call method you should return the response. Please check the document for reference:

Writing custom middleware

The error seems to happen since you are not returning the response in the call() method.

like image 105
rajkris Avatar answered Sep 21 '22 12:09

rajkris