我想知道__init__和__call__方法之间的区别.
例如:
class test:
def __init__(self):
self.a = 10
def __call__(self):
b = 20
Run Code Online (Sandbox Code Playgroud) 我已经用1.10样式编写了自定义Django中间件的代码,类似于:
class MyMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# some initialization stuff here
def __call__(self, request):
# Code executed before view functions are called.
# Purpose of this middeware is to add new attribute to request
# In brief:
request.new_attribute = some_function_returning_some_object()
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
Run Code Online (Sandbox Code Playgroud)
请注意,该中间件正受到威胁,因为它是一个单独的Python模块,不属于我的项目中的任何特定应用程序,而是驻留在外部,并像其他任何软件包一样通过pip安装。它本身不起作用,只有安装在Django应用中才起作用。
它工作正常,但是,我想对其进行测试。到目前为止,我所做的是这样的my_tests.py:
from my_middleware_module import MyMiddleware
# some @patches
def test_mymiddleware():
request = Mock() …Run Code Online (Sandbox Code Playgroud)