【django framework】ModelSerializer+GenericAPIView,如何获取HTTP请求头中的信息(远程IP、UA等)

news2024/9/25 21:23:07

【django framework】ModelSerializer+GenericAPIView,如何获取HTTP请求头中的信息(远程IP、UA等)

某些时候,我们不得不获取调用当前接口的客户端IP、UA等信息,如果是第一次用Django Restframework,可能会有点懵逼,那么如何generics的时候获取请求头中的信息呢,让我们来看看吧。


在这里插入图片描述


1 创建接口,继承generics.CreateAPIView时获取

当继承generics.CreateAPIView时,根据RESTful接口标准,意味着我们要用它来创建一条记录,此时我们可以使用以下代码来获取请求头信息。
要在Django的generics.CreateAPIView中获取客户端的IP地址和User-Agent等信息,可以使用django的HttpRequest对象HttpRequest对象包含了关于当前请求的所有信息,包括客户端IP地址和User-Agent等。

views.py中:

from rest_framework import generics
from django.http import HttpRequest

class YourCreateAPIView(generics.CreateAPIView):
    def post(self, request, *args, **kwargs):
        # 获取客户端IP地址
        client_ip = self.get_client_ip(request)

        # 获取User-Agent
        user_agent = request.META.get('HTTP_USER_AGENT')

        # 现在可以使用client_ip和user_agent了
        # 具体处理逻辑...

        return super().post(request, *args, **kwargs)

    def get_client_ip(self, request: HttpRequest) -> str:
        """
        获取客户端IP地址的方法
        // 注意:也可以在此获取其他的参数,然后一并返回
        """
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            # 如果使用了代理服务器,X-Forwarded-For会有多个IP,取第一个
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip

2 读取接口,generics.ListAPIView时获取

在ListAPIView中获取客户端的IP地址和User-Agent等信息的方法与CreateAPIView中类似。你可以通过重写get()方法或者list()方法来获取这些信息。

from rest_framework import generics
from django.http import HttpRequest

class YourListAPIView(generics.ListAPIView):
    def get(self, request, *args, **kwargs):
        # 获取客户端IP地址
        client_ip = self.get_client_ip(request)

        # 获取User-Agent
        user_agent = request.META.get('HTTP_USER_AGENT')

        # 现在可以使用client_ip和user_agent了
        # 具体处理逻辑...

        return super().get(request, *args, **kwargs)

    def get_client_ip(self, request: HttpRequest) -> str:
        """
        获取客户端IP地址的方法
        // 注意:也可以在此获取其他的参数,然后一并返回
        """
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            # 如果使用了代理服务器,X-Forwarded-For会有多个IP,取第一个
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【分布式websocket】群聊中的各种难点以及解决推拉结合【第16期】

前言 群聊中未读消息如何设计,以及是推消息还是拉去消息如何选择是需要讨论的。推送消息是推送全量消息还是推送信号消息让客户端再去拉取。其中方案如何选型会比较纠结。 首先基本的推拉结合思路是在线用户推送消息。用户离线的话上线去拉取消息。这是简单的推拉结…

Nginx、LVS、HAProxy工作原理和负载均衡架构

当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。 在实际应用…

Camtasia Studio 编辑好的视频如何生成MP4

Camtasia Studio 是一款功能强大的屏幕录像和视频编辑软件,由 TechSmith 公司开发。它可以帮助用户轻松地录制屏幕和音频、添加注释和特效、剪辑和编辑视频,并导出高质量的视频文件。作为一款非常流行的视频制作工具,Camtasia Studio 在教育、…

论文阅读-federated unlearning via class-discriminative pruning

论文阅读-federated unlearning via class-discriminative pruning FUCP 通过类别区分性剪枝进行联邦遗忘 综述中描述:属于面向全局模型中的局部参数调整 利用卷积层的结构特定进行联邦忘却学习,wang等人提出了针对图像分类任务的联邦忘却学习算法FUCP&…

Oracle with as用法

一、简介 with…as关键字,是以‘with’关键字开头的sql语句,在实际工作中,我们经常会遇到同一个查询sql会同时查询多个相同的结果集,即sql一模一样,这时候我们可以将这些相同的sql抽取出来,使用with…as定…

ETH共识升级之路

简介 根据我们之前的介绍,了解到ETH网络的共识方式,已经从 PoW 切换到了 PoS,今天我们就回顾下升级之路,以及升级带来的影响 最早的共识机制 PoW 以太坊创建之初采用了类似比特币的工作量证明机制,即矿工通过计算哈希函…

【排序算法】-- 深入理解桶排序算法

概述 在计算机科学中,排序算法是一种对数据进行有序排列的重要技术。桶排序(Bucket Sort)是一种常见的排序算法,它通过将数据分到有限数量的桶中,并对每个桶中的数据分别排序,最后按照顺序将所有桶中的数据…

PBKDF2算法:保障密码安全的利器

title: PBKDF2算法:保障密码安全的利器 date: 2024/3/14 16:40:05 updated: 2024/3/14 16:40:05 tags: PBKDF2算法密码安全性迭代盐值密钥 PBKDF2算法起源: PBKDF2(Password-Based Key Derivation Function 2)算法是一种基于密码…

远程办公、企业内网服务器的Code-Server上如何配置使用CodeGeeX插件

很多小伙伴都会在工作中使用code-server,比如说远程办公,当你需要在家访问你的工作环境,亦或者是你们公司的Docker是放入服务器中。code-server 无疑是最好的选择,它可以让你通过互联网安全地连接到远程服务器上的开发环境并且使用…

import gdal 报错

1.下载gdal https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal 2.安装正确版本 (1)查看python版本 python -v我的版本Python 3.7.9 建议下载 GDAL-3.4.2-cp37-cp37m-win_amd64.whl (2)放到Scripts文件夹下 执行 pip install GD…

【mask】根据bbox提示同一张图片生成多个矩形框掩码

前提:使用labelimg得到bbox 1.代码 import cv2 import numpy as np# 读取图片 image cv2.imread("D:\Desktop\mult_test\images\SL03509990_1694761223500.jpg")# 假设我们有多个目标的ROI(感兴趣区域) rois [(565,635,1006,85…

1.绪论

目录 1.1 Web原理基础 1.1.1 Internet与万维网 1.1.2 Web架构 1.2 Web前端技术基础 1.2.1 HTML技术 1.2.2 CSS技术 1.2.3 JavaScript技术 1.3 Web前端新技术 1.3.1 HTML5技术 1.3.2 CSS3技术 1.3.3 jQuery技术 1.4 Web开发工具 1.1 Web原理基础 1.1.1 Internet与万…

浅谈路由器基本结构与工作原理

目录 一、结构 1.1 输入端口 1.2 交换结构 1.3 输出端口 1.4 路由选择处理器 二、输入端口处理和基于目的地转发 三、交换 四、输出端口处理 五、何时出现排队 5.1 输入排队 5.2 输出排队 一、结构 下图是一个通用路由器体系结构的总体试图视图,其主要由…

mysql中动态行转列

场景:不确定转换完有多少列且转换完以后要存入临时表以供其他查询使用。 原始数据如下: 一张生产卡号对应多种添加剂,有多少种添加剂就有多少行数据 转换后数据如下: 一张生产卡号对应多种添加剂,有多少种添加剂就有…

2023版IDEA永久破解教程带patch.exe破解程序

2023版IDEA永久破解教程带patch.exe破解程序 第零步:百度云盘获取程序第一步:关闭电脑的病毒和危险防护(目的是避免电脑自动清除破解程序)1.找到电脑的 病毒和威胁防护2.蓝色按钮表示防护处于开启状态3.关闭成功会展示“实时保护已…

聊聊vue的nextTick方法

前言 nextTick是面试常考的vue中的一个重要知识点,但是很多小伙伴常常无法真正的理解nextTick的执行机制,并且背后包含的许多vue的重要知识。本文会把nextTick聊的非常细,让大家彻底搞懂它。 正文 那么在nextTick正式登场之前呢&#xff0…

深度解析Elasticsearch索引数据量过大的优化与部署策略

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 1. 分片和副本策略 1.1分片策略 1.1.1 数据量 1.1.…

Gitee 服务器

Git 服务器集成 1. 创建仓库 2. 远程仓库简易操作指令 # Git 全局设置,修改成自己的信息 git config --global user.name "Muko" git config --global user.email "txk0x7d2163.com" # 创建 git 仓库,基本操作指令和其他远程仓库一…

边缘计算与物联网的核心 —— 低功耗芯片

一、低功耗芯片 在边缘计算与物联网(IoT)中,低功耗芯片扮演了至关重要的角色,主要体现在以下几个方面: 延长设备寿命:物联网设备通常需要部署在难以更换电池或不方便进行频繁维护的环境中,比如…

「Paraverse平行云」受邀参与编写国内首个3D数字内容生产技术白皮书

1月26日,2024中关村论坛系列活动——数据(数字)资产高质量发展大会在银保国际会议中心成功举办。本届数据(数字)资产高质量发展大会由市科委中关村管委会、市经济和信息化局、石景山区人民政府主办,3D/XR产…