django入门教程之request和reponse【二】

news2025/3/25 21:53:12

接上节:入门【一】

再创建一个orders子应用,python manager.py startapp orders,orders目录中新建一个urls.py文件。结构如图:

通过上节课,我们知道在views.py文件中编写函数时,有一个默认入参request,通过它我们可以获取前端传进来的数据。

获取request请求参数

一、获取url后的查询参数

在orders/views.py中新增index函数,直接打印request的内容及其它输出方法。

浏览器中访问如下地址:

http://127.0.0.1:1992/orders/index/?name=testyan&class=yuwen&class=englist
# orders/views.py
from django.http import HttpResponse, JsonResponse

def index(request):
    print(request)  # <WSGIRequest: GET '/orders/index/?name=testyan&class=yuwen&class=englist'>
    print(request.GET)  # <QueryDict: {'name': ['testyan'], 'class': ['yuwen', 'englist']}> 
    print(request.GET.get('name'))  # testyan
    print(request.GET.getlist('class'))  # ['yuwen', 'englist']
    print(request.GET.get('sex', 'F'))  # F 当无字段值时,第二个字段为默认值

request.GET仅获取url后拼接的数据,在浏览器中通过地址栏访问是GET方法,但其实无论是何种请求方式都能通过request.GET获取,比如你可以在postman中选择POST发送请求,也能获取到请求url后拼接的查询参数。

二、获取请求数据
    print(request.POST)
    print(request.POST.get('fruit'))
    print(request.POST.getlist('num'))

request.POST只能接收post方法的请求体,不能接受put或patch方法,而且只能针对form-data 和x-www-form-urlencoded格式才能获取到。如果是json等其它格式,可以通过request.body获取。

如下代码是在postman中传入json格式的入参获取的结果: 

    print(request.body)  # b'{"fruit":"apple",\r\n"num":10\r\n}'
    print(json.loads(request.body))  # {'fruit': 'apple', 'num': 10}

接受post、put或patch方法的请求体都可用request.body,如果是表单请求,数据格式比较冗余,建议使用json格式的请求数据。

三、获取请求头信息

在postman中请求时,可以自定义请求头字段,通过以下方式获取。

    # 获取原生请求头信息
    print(request.META)
    # 获取处理后的请求头信息
    print(request.headers)
    # 获取自定义头信息
    print(request.headers.get('define'))
四、获取请求体中的文件
from django.views.decorators.http import require_http_methods

# Create your views here.
@require_http_methods(['POST'])
def index(request): 
    # 获取请求中的文件,只有POST请求才可以获取
    file = request.FILES
    print(file)  # <MultiValueDict: {'fruit': [<InMemoryUploadedFile: windows秘钥.txt (text/plain)>]}>
    print(file.get('fruit').read())  # 读取文件内容
    return HttpResponse('<h1>orders的index页面</h1>', content_type='text/html')

注意,只有POST请求才能获取文件数据。

获取response响应参数

以上代码示例都是返回一个普通的文字或样式,除此外,还可以返回json数据、图片、压缩包等。

一、返回json数据
from django.http import HttpResponse, JsonResponse

def index2(request):
    # 可以定义content_type、status和响应头
    # return HttpResponse(content='<h1>orders2</h1>', content_type='text/html', status=201, headers={'token': 80})

    data = {'name': 'siwan', 'age': 10}
    # return HttpResponse(content=json.dumps(data), content_type='text/json')
    # return JsonResponse(data)  # 同上一行的效果

    data2 = [{'name': 'siwan', 'age': 10}, {'name': 'bawan', 'age': 20}]
    # 因为data2其实是列表,当用JsonResponse返回时,需要关闭安全检测。
    return JsonResponse(data2, safe=False)
二、返回图片或压缩文件
def index3(request):
    # 返回图片、压缩文件等
    with open('./image-1.png', 'rb') as f:
        img = f.read()
    return HttpResponse(img, content_type='image/png')
    # with open('./zip.zip', 'rb') as f:
    #     zip = f.read()
    # return HttpResponse(zip, content_type='application/zip')

 重定向功能实现

 一、外部重定向
def index4(request):
    # 外部重定向,302临时重定向
    # res = HttpResponse(status=302)
    # res['location'] = 'https://www.qq.com'
    # return res
    # 相当于
    # return HttpResponseRedirect('https://www.qq.com')

当访问 http://127.0.0.1:1992/orders/index4/时,就自动跳转到qq网站。

二、内部重定向
# 内部重定向, 基于redirect直接指定内部跳转路由

def index4(request):  
    from django.shortcuts import redirect
    return redirect('/orders/index3/')

以上设置,会讲index4的访问重定向到index3。但是当正则路由时,这样写就不太方便,需要给路由设置个别名。正则路由指的是路由地址不是固定的,而是需要用正则来匹配。

# 首先在orders/urls.py中给index3设置路由别名,并给orders设置app_name
from . import views
from django.urls import path

app_name = 'orders_alias'

urlpatterns = [
    path('index/', views.index),
    path('index2/', views.index2),
    path('index3/', views.index3, name='alias3'),  # 路由别名
    path('index4/', views.index4)
]

# 然后在跟urls.py中给orders设置命名空间,要和app_name一致
from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('app01/', include('app01.urls')),
    path('orders/', include('orders.urls', namespace='orders_alias')) 
]

# 然后orders/views.py中
def index4(request):
    # 内部重定向,基于redirect+reverse对路由别名反向解析进行跳转
    from django.shortcuts import redirect, reverse
    url = reverse('orders_alias:alias3')
    print(url)
    return redirect(url)

这样,当访问http://127.0.0.1:1992/orders/index4/      时就会重定向到 http://127.0.0.1:1992/orders/index3/

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

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

相关文章

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

【Linux】VMware17 安装 Ubuntu24.04 虚拟机

目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址&#xff1a;ubuntu-24.04.2-des…

WPS宏开发手册——JSA语法

目录 系列文章2、JSA语法2.1、打印输出2.2、注释2.3、变量2.4、数据类型2.5、函数2.6、运算符2.7、比较2.8、if else条件语句2.9、for循环2.10、Math对象&#xff08;数字常用方法&#xff09;2.11、字符串常用方法2.12、数组常用方法 系列文章 使用、工程、模块介绍 JSA语…

word中指定页面开始添加页码

第一步&#xff1a; 插入页码 第二步&#xff1a; 把光标放到指定起始页码处 第三步&#xff1a; 取消链接到前一节 此时关掉页脚先添加分节符 添加完分节符后恢复点击 第四步&#xff1a; 设置页码格式&#xff0c;从1开始 第五步&#xff1a; 删掉不要的页码&#xff0c…

Python实现deepseek接口的调用

简介&#xff1a;DeepSeek 是一个强大的大语言模型&#xff0c;提供 API 接口供开发者调用。在 Python 中&#xff0c;可以使用 requests 或 httpx 库向 DeepSeek API 发送请求&#xff0c;实现文本生成、代码补全&#xff0c;知识问答等功能。本文将介绍如何在 Python 中调用 …

文档处理控件Aspose.Words 教程:.NET版中增强的 AI 文档摘要功能

Aspose.Words是一个功能强大的 Word 文档处理库。它可以帮助开发人员自动编辑、转换和处理文档。 自 24.11 版以来&#xff0c;Aspose.Words for .NET 提供了 AI 驱动的文档摘要功能&#xff0c;使用户能够从冗长的文本中快速提取关键见解。在 25.2 版中&#xff0c;我们通过使…

19,C++——11

目录 一、 C11简介 二、 新增的列表初始化 三、 新增的STL容器 四、 简化声明 1&#xff0c;auto 2&#xff0c;decltype 3&#xff0c;nullptr 五、右值引用 1&#xff0c;左值引用和右值引用 2&#xff0c;两种引用的比较 3&#xff0c;左值引用的使用场景 4&…

风尚云网|前端|前后端分离架构深度剖析:技术革新还是过度设计?

前后端分离架构深度剖析&#xff1a;技术革新还是过度设计&#xff1f; 作者&#xff1a;风尚云网 在数字化转型浪潮中&#xff0c;前后端分离架构已成为现代Web开发的主流模式。但这项技术真的是银弹吗&#xff1f;本文将从工程实践角度&#xff0c;剖析其优势与潜在风险&am…

CMS网站模板设计与用户定制化实战评测

内容概要 在数字化转型背景下&#xff0c;CMS平台作为企业内容管理的核心载体&#xff0c;其模板架构的灵活性与用户定制能力直接影响运营效率。通过对WordPress、Baklib等主流系统的技术解构发现&#xff0c;模块化设计理念已成为行业基准——WordPress依托超过6万款主题库实…

搭建个人博客教程(Hexo)

如何快速搭建一套本地的博客系统呢&#xff1f;这里有一套gitNode.jsHexo的部署方案来进行解决。 安装git Git 是一款免费开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年为 Linux 内核开发设计。它通过本地仓库和远程仓库实现代码管理&#xff0c;支持分支…

Docker 可视化工具 Portainer

Docker 可视化工具 Portainer安装 官方安装地址&#xff1a;https://docs.portainer.io/start/install-ce/server/docker/wsl 一&#xff0c;首先&#xff0c;创建 Portainer Server 用来存储数据库的卷&#xff1a; docker volume create portainer_data二&#xff0c;然后…

数据库基础知识点(系列二)

1&#xff0e;关系数据模型由哪三个要素组成。 答&#xff1a;关系数据模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。 2&#xff0e;简述关系的性质。&#xff08;关系就是一张二维表格&#xff0c;但不是任何二维表都叫关系&#xff09; 答&#xff1a;(1…

如何进行灌区闸门自动化改造-闸门远程控制系统建设

改造背景 操作效率低‌&#xff1a;人工启闭耗时耗力&#xff0c;单次操作需2-3人配合&#xff0c;耗时长。 ‌水资源浪费‌&#xff1a;依赖经验估算放水量&#xff0c;易导致漫灌或供水不足。 ‌管理滞后‌&#xff1a;无法实时监控水位、流量&#xff0c;故障响应延迟。 …

【算法笔记】图论基础(二):最短路、判环、二分图

目录 最短路松弛操作Dijkstra朴素Dijkstra时间复杂度算法过程例题 堆优化Dijkstra时间按复杂度算法过程例题 bellman-ford时间复杂度为什么dijkstra不能处理负权边&#xff1f;dijkstra的三个步骤&#xff1a;反例失效的原因 算法过程例题 spfa时间复杂度算法过程例题spfa求最短…

EMS小车技术特点与优势:高效灵活的自动化输送解决方案

北成新控伺服技术丨EMS小车调试视频 EMS小车是一种基于单轨运行的电动输送系统&#xff0c;通过电力驱动实现物料的高效搬运和输送&#xff0c;具有高效灵活、节能环保、多功能集成、行业适配性强等特性&#xff0c;广泛应用于汽车制造、工程机械、家电生产、仓储物流等行业自动…

uniapp运行到支付宝开发者工具

使用uniapp编写专有钉钉和浙政钉出现的样式问题 在支付宝开发者工具中启用2.0构建的时候&#xff0c;在开发工具中页面样式正常 但是在真机调试和线上的时候不正常 页面没问题&#xff0c;所有组件样式丢失 解决 在manifest.json mp-alipay中加入 "styleIsolation&qu…

C++ 性能优化隐藏陷阱:从系统调用到并发开销的深度反思

作为一名C++技术专家,我深知性能优化不仅是代码层面的艺术,更是理解硬件与语言交互的科学。在现代计算中,C++的抽象为开发者提供了便利,却也隐藏了硬件的复杂性。如何揭开这些“谎言”,让代码与硬件协同工作?本文将以小案例为载体,通过优化前后的对比,深入剖析每个章节…

Unity 使用 Protobuf(Pb2)二进制数据全流程工具详解

前言 在Unity游戏开发中&#xff0c;高效、快速、安全地读取配置数据是一项重要需求。本文介绍一种完整的解决方案——使用Protobuf二进制格式&#xff08;Pb2&#xff09;存储和读取游戏数据&#xff0c;并详细分享实现全流程的Unity工具。 一、技术流程概览 实现Unity读取…

基于QT(C++)实现绘图程序

绘图程序 1 核心算法 1.1 图元生成 1.1.1 直线 画直线的算法采用了课上讲到的 Bresenhan 算法&#xff0c;采用整数增量运算&#xff0c;精确而有效的光栅设备生成算法。 基本思想是&#xff1a;当直线斜率的绝对值小于 1 时&#xff0c;从左端点开始作为起点&#…

深入剖析ReLU激活函数:特性、优势与梯度消失问题的解决之道,以及Leaky ReLU 和 Parametric ReLU

深入剖析ReLU激活函数&#xff1a;特性、优势与梯度消失问题的解决之道 在深度学习领域&#xff0c;激活函数的选择直接影响神经网络的训练效果和性能。整流线性单元&#xff08;Rectified Linear Unit&#xff0c;简称ReLU&#xff09;因其简单性、高效性以及对梯度消失问题的…