拦截我的Django应用中的每个请求

时间:2018-07-27 14:46:54

标签: django

我想统计我的网站访问量。我的想法是使用cookie并设置超时时间。如果一个小时内没有请求(例如),然后有一个请求,我会将其视为一次新访问。 有没有一种方法可以拦截Django中的每个请求,而无需在每个视图函数中重复我的代码?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用 Django中间件
例如: 我会在名为my_app的应用中创建名为my_middleware.py的文件,并创建Django网站中定义的函数

public class Owner {
    private Long id;

    private String firstName;
    private String secondName;
}

并在您的settings.py中添加中间件

def StatisticsMiddleware(get_response):
    def middleware(request):

        # Code to be executed for each request/response after
        # the view is called.

        return response #response should be defined before

    return middleware

不要忘记将结果保存在数据库中。您可以创建模型并使用Cookie。因此,如果您的状况还可以,请保存到数据库中
设置Cookie:

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',
    ......
    ......
    'my_app.my_middleware.StatisticsMiddleware' #here your middleware
]

有关更多详细信息 https://docs.djangoproject.com/en/2.0/topics/http/middleware/