Django 视图函数中的 `response` 对象及类型扩写

news/2025/2/26 7:41:06/

Django 视图函数中的 response 对象及类型扩写

在 Django 中,视图函数不仅负责处理请求,还负责生成响应。响应可以是以多种格式返回给客户端的数据,包括 HTML 页面、重定向、JSON 数据、文件等。以下是关于 Django 中几种常见响应类型的详细扩写。

HttpResponse

HttpResponse 是 Django 中最基本的响应类型,用于返回一个纯文本或 HTML 内容的响应。

from django.http import HttpResponsedef my_view(request):# 返回一个简单的文本响应return HttpResponse("Hello, World!")# 返回一个 HTML 内容的响应# html_content = "<html><body><h1>Hello, World!</h1></body></html>"# return HttpResponse(html_content, content_type="text/html")

你还可以设置响应的状态码和字符集。

# 返回一个自定义状态码的响应
return HttpResponse("Not Found", status=404)# 返回一个指定字符集的响应
return HttpResponse("Hello, World!", charset="utf-8")
render 函数

render 函数是 Django 的一个快捷函数,用于渲染一个模板并返回一个 HttpResponse 对象。

from django.shortcuts import renderdef my_template_view(request):# 传递一个字典给模板context = {'message': 'Hello, Template!'}# 渲染模板并返回响应return render(request, 'my_template.html', context)

模板文件 my_template.html 应该位于你配置的模板目录中,并且可以这样使用传递的上下文数据:

<!DOCTYPE html>
<html>
<head><title>My Template</title>
</head>
<body><h1>{{ message }}</h1>
</body>
</html>
redirect 函数 / HttpResponseRedirect

redirect 函数用于生成一个重定向响应。它会向客户端返回一个 302(临时重定向)或 301(永久重定向)状态码,以及一个新的 URL。

from django.shortcuts import redirectdef my_redirect_view(request):# 重定向到一个新的 URLreturn redirect('/new-url/')# 使用命名 URL 模式重定向,并传递参数# return redirect('named_url_pattern', arg1=value1, arg2=value2)# 永久重定向# return redirect('/new-url/', permanent=True)
JsonResponse

JsonResponse 用于返回 JSON 格式的响应。它自动设置 Content-Typeapplication/json

from django.http import JsonResponsedef my_json_view(request):data = {'message': 'Hello, JSON!'}return JsonResponse(data)# 如果需要自定义 JSON 序列化行为,可以传递 encoder 参数# from django.core.serializers.json import DjangoJSONEncoder# class MyEncoder(DjangoJSONEncoder):#     # 自定义序列化行为#     pass# return JsonResponse(data, encoder=MyEncoder)# 如果需要返回非字典类型的数据,可以将 safe 设置为 False# data = ['Hello', 'World']# return JsonResponse(data, safe=False)
FileResponse

FileResponse 用于返回文件内容的响应。它接受一个文件对象或文件路径,并自动设置适当的 Content-TypeContent-Disposition 头。

from django.http import FileResponse
import osdef my_file_view(request):# 假设文件位于项目的 media 目录下file_path = os.path.join(BASE_DIR, 'media', 'myfile.txt')# 打开文件并创建 FileResponsewith open(file_path, 'rb') as file:response = FileResponse(file)# 可以设置 Content-Disposition 为 attachment 以提示浏览器下载文件# response['Content-Disposition'] = 'attachment; filename="myfile.txt"'return response

POST 提交 403 禁止访问 的解决方案

在 Django 中,为了防止跨站请求伪造(CSRF)攻击,默认情况下会对所有使用 POSTPUTPATCHDELETE 等方法的表单进行 CSRF 保护。如果你的表单或 AJAX 请求遇到了 403 禁止访问的错误,通常是因为缺少了 CSRF 令牌。

  • 方式一:在表单中添加 {% csrf_token %} 标签。
<form method="post">{% csrf_token %}<!-- 表单的其他字段 --><button type="submit">Submit</button>
</form>
  • 方式二:在视图函数上使用 @csrf_exempt 装饰器来免除 CSRF 保护(不推荐,除非在特定情况下确实需要)。
from django.views.decorators.csrf import csrf_exempt@csrf_exempt
def my_exempt_view(request):# 处理请求pass
  • 方式三:在 settings.py 中注释掉 CsrfViewMiddleware 中间件(这是非常不安全的做法,不推荐)。
# MIDDLEWARE = [
#     # ...
#     'django.middleware.csrf.CsrfViewMiddleware',
#     # ...
# ]

通常,推荐使用第一种方式,即在表单中添加 {% csrf_token %} 标签,以确保 CSRF 保护的有效性。对于 AJAX 请求,你可以在发送请求时包含 CSRF 令牌,通常是通过在请求头中添加 X-CSRFToken


http://www.ppmy.cn/news/1574972.html

相关文章

Spring Boot定时任务原理

Spring Boot定时任务原理 在现代应用中&#xff0c;定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持&#xff0c;通过注解驱动的方式&#xff0c;开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…

计算机毕业设计SpringBoot+Vue.js母婴商城(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南

本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型&#xff08;14B、32B&#xff09;全过程与测试结果。 NPU&#xff1a;910B3 (65GB) * 8 &#xff08;910B 有三个版本 910B1、2、3&#xff09; 模型&#xff1a;DeepSeek-R1-Distill-Qwen-14B、DeepSeek…

大模型训练中的数据不平衡问题及其解决策略

目录 大模型训练中的数据不平衡问题及其解决策略 一、数据不平衡问题的影响 二、处理数据不平衡问题的方法 1. 过采样&#xff08;Oversampling&#xff09; 2. 欠采样&#xff08;Undersampling&#xff09; 3. 代价敏感学习&#xff08;Cost-Sensitive Learning&#xf…

【CI/CD】Jenkinsfile管理+参数化构建+邮件通知以及Jenkins + SonarQube 代码审查

文章目录 一、管理 Jenkinsfile 脚本文件将 Pipeline 脚本放入项目示例&#xff1a;提交代码&#xff1a; Jenkins 引用 Jenkinsfile 二、Jenkins 参数化构建配置参数化构建示例&#xff1a;提交代码&#xff1a; 2. 测试参数化构建 三、配置邮箱服务器发送构建结果安装插件配置…

QT零基础学习之路(四)--信号和槽机制

源码&#xff08;更新更快&#xff09;&#xff1a;https://mp.weixin.qq.com/s/LvcjGiK6KSyoAB55qosgIQ

3.1部署filebeat:5044

beats是ELK体系中新增的一个工具&#xff0c;, 属于一个轻量的日志采集器。 1.安装&#xff08;每台&#xff09; # tar xf filebeat-6.4.1-linux-x86_64.tar.gz # mv filebeat-6.4.1-linux-x86_64 /usr/local/filebeat #yum -y install httpd #systemctl start httpd 2.测试…

VS2022配置FFMPEG库基础教程

1 简介 1.1 起源与发展历程 FFmpeg诞生于2000年&#xff0c;由法国工程师Fabrice Bellard主导开发&#xff0c;其名称源自"Fast Forward MPEG"&#xff0c;初期定位为多媒体编解码工具。2004年后由Michael Niedermayer接任维护&#xff0c;逐步发展成为包含音视频采…