REST framework 控制接收的 Content-Type

REST framework的Parser classes允许开发者控制接受的Content-Type。默认情况下,它接受application/x-www-form-urlencoded,但可通过设置REST_FRAMEWORK.DEFAULT_PARSER_CLASSES在settings.py中全局更改,如仅接受application/json。此外,也可针对特定视图或viewsets在views.py中设定parser_classes。除了JSONParser,还有FormParser和MultiPartParser等选项。更多信息见官方文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 REST framework 中有一個 Parser classes ,這個 Parser classes 主要是能控制接收的 Content-Type ,

例如說我規定 Content-Type 只接受 application/json ,這樣你就不能傳其他的 Content-Type ( 舉例 : text/plain ) 。

通常如果沒有特別去設定 ,一般預設是使用 application / x-www-form-urlencode ,不過預設的可能不是你想要的或是

說你想要設計只允許規範一種 Content-Type 。

設定 Parsers 也很簡單,如果你希望全域的設定,可以加在settings.py

例如:
REST_FRAMEWORK = {

'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', )

}

這樣就代表我只允許 Content-Type 是 application/json 。

 

也可以針對特定 view 或 viewsets 加以設定 ,直接在 views.py 加上 parser_classes 即可

例如:

class MusicViewSet(viewsets.ModelViewSet):
    queryset = Music.objects.all()
    serializer_class = MusicSerializer
    permission_classes = (IsAuthenticated,)
    parser_classes = (JSONParser,)

當然,parser_classes 不只有 JSONParser,還有 FormParser , MultiPartParser 等等

更多資訊可參考 http://www.django-rest-framework.org/api-guide/parsers/#parsersr

 

### 修改 HTTP 响应头中的 `Content-Type` 为 `text/plain` 当需要调整 HTTP 请求或响应的头部信息时,具体操作取决于所使用的编程语言和技术栈。以下是几种常见方式来设置 HTTP 响应头中的 `Content-Type` 为 `text/plain`。 #### 使用 Spring Boot 和 RestTemplate 在 Java 中使用 Spring Boot 可以通过配置 `HttpHeaders` 来实现这一点: ```java import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.web.client.RestTemplate; public class Example { public void setContentType() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(org.springframework.http.MediaType.TEXT_PLAIN); HttpEntity<String> entity = new HttpEntity<>("body", headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class); } } ``` 此代码片段展示了如何创建带有特定 `Content-Type` 头部的消息实体并将其用于 REST 调用[^1]。 #### 微信小程序服务器端处理 对于微信小程序的服务端开发,在返回给客户端的数据前可以手动指定响应的内容类型: ```php header('Content-Type: text/plain; charset=utf-8'); echo json_encode($data); // 即使是JSON数据也作为纯文本发送出去 ``` 这种方式适用于 PHP 或其他支持类似语法的语言环境下的 API 接口设计[^2]。 #### JavaScript (Fetch API) 如果是在浏览器环境中利用 Fetch 进行跨域请求,则可以在发起请求之前定义好预期接收的数据格式: ```javascript fetch('/api/endpoint', { method: 'POST', mode: 'cors', headers: {'Accept': 'text/plain'}, body: JSON.stringify({key:'value'}) }) .then(response => response.text()) // 解析成字符串而非默认的json() .catch(error => console.error('Error:', error)); ``` 注意这里我们将接受字段设为了 `text/plain` 并且解析函数选择了 `.text()` 方法而不是常见的`.json()` ,这有助于确保即使实际收到的是 JSON 数据也能被当作普通文本对待[^3]. #### Java HttpClient 设置编码与字符集 针对某些特殊情况下可能出现中文乱码等问题,可以通过自定义解码逻辑解决问题: ```java CloseableHttpClient client = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://example.com"); HttpResponse httpResponse = client.execute(httpGet); String result = EntityUtils.toString(httpResponse.getEntity(), "GBK"); System.out.println(result); client.close(); ``` 这段例子说明了怎样强制指定了 GBK 编码读取网页内容,从而避免因默认 UTF-8 导致的文字显示错误情况发生[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值