django-request 自定义插件开发指南:3步打造专属流量统计面板
django-request 是一款开源的 Django 流量统计模块,它会自动把每一次请求存入数据库,并在后台管理界面生成访问量、在线人数等可视化报表。很多开发者用它做网站流量统计后,还想按自己的业务需求定制展示内容,而最优雅的方式就是开发自定义插件。本指南将带你从零开始,快速掌握 django-request 插件开发的完整流程,轻松打造专属流量统计面板。
为什么需要自定义插件?🤔
django-request 默认自带 8 个统计插件,包括流量概况、最新请求、热门路径、错误路径、来源网站、搜索关键词、浏览器占比、在线用户等。但实际业务中,你可能需要:
- 统计某个特定接口的调用频率
- 只展示登录用户的请求记录
- 把 API 请求和网页请求分开统计
此时自定义插件就是最灵活的解决方案,无需修改核心代码,即插即用。
认识插件的加载机制
django-request 通过 REQUEST_PLUGINS 配置项声明插件列表,默认值定义在 request/settings.py 中。插件加载器会逐个导入这些模块路径并实例化,核心逻辑位于 request/plugins.py。
换句话说,你只需要:写一个 Python 类 + 一个模板文件 + 注册到配置里,插件就会自动出现在后台的 Overview 统计面板上。
自定义插件开发三步走
第一步:编写插件类
在任意 app 下创建插件类,继承 request.plugins.Plugin。基类定义在 request/plugins.py,它负责自动生成标题、渲染模板。
最简单的插件只需重写 template_context() 方法,返回模板需要的上下文数据:
from request.plugins import Plugin
from request.models import Request
class PostRequests(Plugin):
verbose_name = "POST 请求统计"
def template_context(self):
requests = Request.objects.filter(method="POST")[:10]
return {"requests": requests}
第二步:创建插件模板
django-request 会优先查找 request/plugins/插件类名小写.html 这个模板,找不到则回退到 request/plugins/base.html。你还可以在类中显式指定 template 属性。
推荐复用自带的表格模板,例如参考 request/templates/request/plugins/toppaths.html 的写法,继承 request/plugins/table.html 并重写 table 代码块,几行代码就能做出专业样式的统计表格。
第三步:注册并刷新面板
把插件路径加入 REQUEST_PLUGINS 配置,例如:
REQUEST_PLUGINS = (
"request.plugins.TrafficInformation",
"request.plugins.LatestRequests",
"yourapp.plugins.PostRequests",
)
保存后刷新后台 Overview 页面,你的自定义面板就上线了!🎉
进阶技巧:复用模型查询能力
django-request 的 Request 模型(见 request/models.py)提供了丰富的字段,如 method、path、response、referer、user_agent 等。结合 request/managers.py 中的查询方法,你可以统计在线用户、唯一访客、搜索来源等数据。
参考自带插件 request/plugins.py 的实现,你会发现 TopPaths 用 annotate 聚合路径访问量,TopBrowsers 用 set_count 统计浏览器占比,这些模式都可以直接套用。
常见问题与调优建议 💡
- 只想记录错误请求:开启
REQUEST_ONLY_ERRORS,把 django-request 当错误监控用 - 忽略爬虫流量:通过
REQUEST_IGNORE_USER_AGENTS配置正则过滤 - 插件不显示:检查类名和模板文件名是否完全对应(类名转小写)
详细的配置项说明见 docs/settings.txt,模板标签用法见 docs/templatetags.txt。
结语
通过自定义插件,你可以把 django-request 从通用流量统计模块升级为贴合业务的数据面板。从简单的 POST 请求统计,到复杂的多维度分析,整个过程只需三步,是不是很简单?快动手试试吧!
如果你还没安装 django-request,可通过 git clone https://gitcode.com/gh_mirrors/dj/django-request 获取源码,更多开发细节可参考项目文档。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



