django - 拦截我的 Django 应用程序中的每个请求

标签 django

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

最佳答案

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

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

并在 settings.py 中添加中间件

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
]

不要忘记将结果保存到数据库中。您可以创建模型并使用 cookie。因此,如果您的条件正常,则保存到数据库
设置 cookie:

response = get_response(request)
response.set_cookie('name_of_cookie', 'info_inside_the_cookie', 
    max_age=age_of_the_cookie)

了解更多详情 https://docs.djangoproject.com/en/2.0/topics/http/middleware/

关于django - 拦截我的 Django 应用程序中的每个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560445/

相关文章:

python - 如何最好地跨多个模型使用多个字段?

python - 如何将 python 字典的键显示为 HTML 表头,并将每个键的值显示为该表头下的一行?

django - Heroku 未从 requirements.txt 安装 psycopg2

django - 如何正确配置 djcelery 结果后端到数据库

python - Django:数据库关系 - 一个用户许多其他对象

python - 错误设置 django 的 ALLOWED_HOSTS 设置不会产生可理解的错误

javascript - 未捕获的类型错误 : $. ajax 不是函数 |在使用最新的完整 jQuery 版本时

python - 时间戳转换关闭一小时

javascript - 使用 Django 和 extjs 进行分页

python - 'str' 对象不可调用,如何处理?