前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django 设置中间件(middleware),禁止某些用户访问站点

django 设置中间件(middleware),禁止某些用户访问站点

作者头像
卓越笔记
发布2023-02-18 10:38:36
4240
发布2023-02-18 10:38:36
举报
文章被收录于专栏:卓越笔记

想要实现 IP 或者 用户 黑名单(小黑屋)功能,需要用到 django 的 middleware

# 环境

1. django 1.11.x

2. python 3.6.x

# 步骤

1. blog (app 名称) 下新建 中间件 middleware.py

代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'yinzhuoqun'

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
from blog.models import UserIP  # 用户访问的 IP 记录
from logger.logger import logger


class BlockVisit(MiddlewareMixin):
    def process_request(self, request):
        # values_list 如果只传递一个字段,你还可以传递flat 参数。如果为True,它表示返回的结果为单个值而不是元组。
        blcok_ip = UserIP.objects.filter(is_deleted=True).values_list("ip", flat=True)
        logger.debug(blcok_ip)
        logger.debug(request.META['REMOTE_ADDR'])
        if request.META['REMOTE_ADDR'] in blcok_ip:
            return HttpResponse(
                '<h1>对不起, 您被关小黑屋了!</h1><h4>如有疑问请邮箱联系:<a href="mailto:name@email.com">admin@xieboke.net</a></h4>'
                '<h1>Sorry,Your access is restricted!</h1>'
                '<h4>If you have any questions, please contact us by email:<a href="mailto:name@email.com">admin@xieboke.net</a></h4>')

    def process_response(self, request, response):
        return response

2. settings.py 中的 MIDDLEWARE_CLASSES 注册 BlockVisit,BlockVisit 要放在最前面

代码语言:javascript
复制
MIDDLEWARE_CLASSES = (
    'blog.middleware.BlockVisit',  # 注册 BlockVisit 中间件,放最前面
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-9-23 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档