DjangoRF-14-创建request子应用

注意,本应该是requests模块,为了区分,避免错误,用request

1、进入apps,创建request django-admin startapp request

2、因为只发送请求,没有数据库相关,不需要model。

3、进行序列化

from rest_framework import serializers

这里没u有进行引入ModeSer

class SingleRequestSerializer(serializers.Serializer):

method_choices = [

('get', 'get'),

('post', 'post'),

('delete', 'delete'),

('put', 'put'),

('patch', 'patch'),

]

url = serializers.CharField(help_text='url', label='url')

method = serializers.ChoiceField(choices=method_choices, help_text='请求方法', label='请求方法')

request = serializers.JSONField(help_text='请求参数', required=False, label='请求参数', default={})

复制代码
def validate_request(self, value):
    """解决json数据为空的问题"""
    if value.get('json') == {}:
        value.pop('json')
    return value

4views代码

from django.shortcuts import render

Create your views here.

import base64

import requests

from rest_framework.decorators import api_view

from rest_framework.response import Response

from .serializers import SingleRequestSerializer

@api_view(http_method_names=['POST'])

def request_view(request, format=None):

1. 接受请求数据并校验

serializer = SingleRequestSerializer(data=request.data)

serializer.is_valid(raise_exception=True)

2. 发送请求

data = serializer.validated_data

res = requests.request(method=data['method'], url=data['url'], **data['request'])

3. 组织响应数据并返回

res_data = {

'status_code': res.status_code,

'headers': dict(res.headers),

'cookies': dict(res.cookies)

}

content_type = res_data['headers'].get('Content-Type')

if content_type:

根据不同类型构造数据

if 'html' in content_type:

res_data['text'] = res.text

elif 'json' in content_type:

res_data['json'] = res.json()

else:

res_data['content'] = base64.b64encode(res.content).decode()

else:

res_data['content'] = base64.b64encode(res.content).decode()

复制代码
return Response(res_data, status=200)

5、urls的代码

from django.urls import path

from .views import request_view

urlpatterns = [

path('', request_view, name='request')

]

6.进行调试

相关推荐
计算机毕设匠心工作室5 分钟前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
别叫我->学废了->lol在线等15 分钟前
演示 hasattr 和 ** 解包操作符
开发语言·前端·python
VX:Fegn089529 分钟前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
free-elcmacom30 分钟前
机器学习入门<6>BP神经网络揭秘:从自行车摔跤到吃一堑长一智的AI智慧
人工智能·python·深度学习·神经网络·机器学习
Hi2024021741 分钟前
如何录制浏览器播放的音频?虚拟音频线与Python采集步骤
python·音视频
荔枝hu41 分钟前
springboot和shiro组合引入SseEmitter的一些坑
java·spring boot·后端·sseeitter
老华带你飞1 小时前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
JIngJaneIL1 小时前
基于Java酒店预约系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
programer_331 小时前
本地手动创建一个MCP(windows环境)
windows·python·ai·mcp·cherry studio
编程小Y1 小时前
php.ini 的核心作用与全面解析
开发语言·php