当前位置: 首页 > news >正文

Django框架——请求与响应

上篇文章我们学习了Django框架——配置文件和视图函数,这篇文章我们学习Django框架——请求与响应。

客户端和服务端的请求与响应过程:客户端访问某个网站并发出URL请求,服务器接受到请求后,根据请求内容来返回响应,如下图所示:

请求对象

在视图函数中,接收了request参数,通过该参数获取到URL路径,请求方式,请求参数,会话,上传文件信息等等,这里我们主要讲解获取请求参数,会话、文件信息会有单独的文章讲解,获取GET请求和POST请求参数一样,这里讲解获取GET请求参数,示例代码如下:

### views.py文件
from django.http import HttpResponse
def Get_Request(request):print(request.GET)      # 获取GET请求的参数return HttpResponse('OK')### urls.py文件
from Product.views import *
from django.urls import path
urlpatterns = [path('admin/', admin.site.urls),path('Get_Request/',Get_Request)
]

启动程序并访问http://127.0.0.1:5000/Get_Request/和http://127.0.0.1:5000/Get_Request?name=lisi,后端打印结果为:

<QueryDict: {}>
<QueryDict: {'name': ['lisi']}>

GET方法返回的是QueryDict类字典对象,获取QueryDict类字典对象里面数据的方法如下:

print(request.GET.get('name',default='张三'))  # 方法一
print(request.GET['name'])   # 方法二

在方法一中,当get获取的name不存在时,返回default设置的默认值(张三),这里我们建立使用方法一,因为在方法二中,当name不存在时,程序会报错。

访问http://127.0.0.1:5000/Get_Request?name=lisi&name=zhangsan,后端打印结果为:

<QueryDict: {'name': ['lisi', 'zhangsan']}>
zhangsan
zhangsan

当请求出现了两个name参数时,get只会返回最后一个name,当请求参数有几个相同的键时,可以通过getlist方法获取name的所有数据并返回为列表,示例代码如下:

print(request.GET.getlist('name')) 

后端打印结果为:

['lisi', 'zhangsan']

获取请求方式、URL路径、cookie、session、上传文件信息,示例代码如下:

print(request.method)       # 获取请求方式
print(request.path)     # url路径
print(request.get_full_path())      # url完整路径
print(request.COOKIES)      # COOKIES会话技术
print(request.session)      # session会话技术
print(request.FILES)        # 上传文件,前端上传的文件对象

访问http://127.0.0.1:5000/Get_Request/?name=lisi,后端打印结果如下:

GET
/Get_Request/
/Get_Request/?name=lisi
{'csrftoken': 'j86YmXNrJzEqAmtuBwfKV2KnoxlCX6JQ'}
<django.contrib.sessions.backends.db.SessionStore object at 0x00000243ACF3E260>
<MultiValueDict: {}>

响应对象

视图函数的响应主要有四种类型,分别为返回字符串(HttpResponse),返回模版(render),重定向(redirect或HttpResponseRedirect)和返回JSON(JsonResponse)。

HttpResponse

返回字符串主要使用HttpResponse方法,示例代码如下:

## views.py文件
from django.http import HttpResponse
def return_HttpResponse(request)return HttpResponse('return_HttpResponse')## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *urlpatterns = [path('admin/', admin.site.urls),path('return_HttpResponse/',return_HttpResponse),
]

访问http://127.0.0.1:5000/return_HttpResponse,浏览器显示return_HttpResponse。返回字符串简单了解一下就行,在开发中很少用到。

render

返回模版主要使用render方法,在使用render方法返回模版时,可以根据需求,将数据传递给模版,示例代码如下:

## views.py文件
from django.shortcuts import render
def return_render(request)content='你好'return render(request,'Hello World.html',{ 'content':content })## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *urlpatterns = [path('admin/', admin.site.urls),path('return_render/',return_render),
]

在Product文件夹创建templates文件夹并创建Hello World.html文件,该文件内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>{{ content }}</h1>
</body>
</html>

访问http://127.0.0.1:5000/return_render,浏览器显示你好。返回模版主要应用在前后端不分离的情况。

redirect或HttpResponseRedirect

重定向主要使用redirect或HttpResponseRedirect,两者没多大区别,示例代码如下:

## views.py文件
from django.shortcuts import redirect
def return_redirect(request)return redirect('/return_HttpResponse/')  # return HttpResponseRedirect('/return_HttpResponse/')## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *urlpatterns = [path('admin/', admin.site.urls),path('return_HttpResponse/',return_HttpResponse),path('return_redirect/',return_redirect),
]

访问http://127.0.0.1:5000/return_redirect,就会重定向return_HttpResponse/路由中,浏览器显示return_HttpResponse路由的内容(return_HttpResponse)。

注意:在重定向的URL路径中,前后都需要写斜杠。

JsonResponse

返回JSON类型数据,主要用JsonResponse方法,示例代码如下:

## views.py文件
from django.http import JsonResponse
def return_JsonResponse(request)return JsonResponse({'data':'JsonResponse'})  ## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *urlpatterns = [path('admin/', admin.site.urls),path('return_JsonResponse/',return_JsonResponse),
]

访问http://127.0.0.1:5000/return_JsonResponse/,浏览器显示{"data": "JsonResponse"},返回JSON主要用于前后端分离的情况。

好了,Django框架——请求与响应就学习到这里,下篇文章我们学习Django框架——路由。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!

- END -

相关文章:

Django框架——请求与响应

上篇文章我们学习了Django框架——配置文件和视图函数&#xff0c;这篇文章我们学习Django框架——请求与响应。 客户端和服务端的请求与响应过程&#xff1a;客户端访问某个网站并发出URL请求&#xff0c;服务器接受到请求后&#xff0c;根据请求内容来返回响应&#xff0c;如…...

rearrangement-challenge-2022环境使用学习(一)

搭建了rearrangement-challenge-2022的环境&#xff1a; https://github.com/facebookresearch/habitat-challenge/tree/rearrangement-challenge-2022 habitat最大的缺点是对不同的版本非常的敏感。本文只是针对rearrangement-challenge-2022的学习。 文档一开始会很不完善&a…...

[Uniapp]携带参数跳转界面(两种方法)

一、方法1&#xff1a;路由携参 假设现在有两个界面&#xff1a;界面A和界面B。并要由界面A跳转到界面B&#xff0c;则我们可以使用 uni.navigateTo({}) 跳转界面时&#xff0c;将参数附加在URL后&#xff0c…...

Scrapy与分布式开发(2.1.2):python常用网络请求库httpx

Python httpx 模块详细讲解 一、引言 httpx 是一个用于发送 HTTP 请求的 Python 库&#xff0c;它提供了简单易用的 API&#xff0c;支持同步和异步请求&#xff0c;并且具有出色的性能和灵活性。httpx 是 requests 的一个现代替代品&#xff0c;它使用 httpcore 作为底层传输…...

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡&#xff1f; 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡&#xff1f; Nginx负载均衡可以大…...

windows/linux下其他位置调用指定nodejs脚本报错Error: Cannot find module ‘esm’

问题&#xff1a; 有一个nodejs脚本名为html2word,同目录下还有它对应的package.json&#xff0c;正常在html2word所在目录下执行脚本没问题&#xff0c;但是在其他目录执行时报错&#xff1a;Error: Cannot find module ‘esm’ 原因&#xff1a; 在其他位置执行node脚本时…...

2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。

一、这两天一直纠结一个问题&#xff0c;无论怎么修改&#xff0c;linux 分区老显示满&#xff0c;Use 100%&#xff0c;全部沾满。如下图的oem分区。 二、导致出现上面的原因是&#xff1a;SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…...

蓝桥杯倒计时 41天 - KMP 算法

KMP算法 KMP算法是一种字符串匹配算法&#xff0c;用于匹配模式串P在文本串S中出现的所有位置。 例如S“ababac&#xff0c;P“aba”&#xff0c;那么出现的所有位置是13。 在初学KMP时&#xff0c;我们只需要记住和学会使用模板即可&#xff0c;对其原理只需简单理解&#xff…...

《汇编语言》- 读书笔记 - 第13章-int 指令

《汇编语言》- 读书笔记 - 第13章-int 指令 13.1 int 指令13.2 编写供应用程序调用的中断例程中断例程&#xff1a;求一 word 型数据的平方主程序中断处理程序执行效果 中断例程&#xff1a;将一个全是字母&#xff0c;以0结尾的字符串&#xff0c;转化为大写主程序中断处理程序…...

深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例

条件语句 用于根据不同的条件执行不同的操作。Go中的条件可以是真或假。Go支持数学中常见的比较运算符&#xff1a; 小于 < 小于等于 < 大于 > 大于等于 > 等于 不等于 ! 此外&#xff0c;Go还支持常见的逻辑运算符&#xff1a; 逻辑与 && 逻辑或…...

大数据和机器学习在气象预报中的应用-张平文院士

报告链接&#xff1a;张平文院士 -- 大数据和机器学习在气象预报中的应用_哔哩哔哩_bilibili...

C#高级:Winform桌面开发中DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…...

java八股文复习-----2024/03/05----基础---反射,动态代理。序列化

来源一 大彬八股文 来源二 2023 20W字八股文 2024秋招八股文 1.Java创建对象有几种方式&#xff1f; Java创建对象有以下几种方式&#xff1a; 用new语句创建对象。使用反射&#xff0c;使用Class.newInstance()创建对象。调用对象的clone()方法。运用反序列化手段&#x…...

【人工智能】Anthropic发布强大的Claude3对齐GPT-4,大模型杂谈个人感想

北京时间3月5日&#xff0c;人工智能创业公司Anthropic宣布&#xff0c;推出其突破性的Claude 3系列模型。Claude 3系列包含三个子模型&#xff0c;分别为Claude 3 Haiku、Claude 3 Sonnet和Claude 3 Opus&#xff0c;它们提供不同程度的智能、速度和成本选择&#xff0c;以满足…...

基于openKylin与RISC-V的MindSpore AI项目实践

项目目标&#xff1a; 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型&#xff0c;并在RISC-V平台上进行训练和推理。根据RISC-V的特性&#xff0c;对MindSpore框架进行必要的优化。 目录 项目目标&#xff1a; 训练模型 编写训练代码&#xff0c;设…...

【牛客】VL64 时钟切换

描述 题目描述&#xff1a; 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频&#xff0c;现在要设计一个切换电路&#xff0c;sel选择时候进行切换&#xff0c;要求没有毛刺。 信号示意图&#xff1a; 波形示意图&#xff1a; 输入描述&#xff1a; clk0 clk1为时…...

Java设计模式——桥连模式

桥接模式简单来说就是通过将抽象部分和具体部分分离&#xff0c;使它们可以独立地变化。如果你的一个类存在多个变化维度&#xff08;如抽象和具体的实现&#xff09;。若使用继承来处理这些变化&#xff0c;将会导致类层次结构的急剧增加&#xff0c;难以管理和维护。并且&…...

数据结构与算法:堆排序和TOP-K问题

朋友们大家好&#xff0c;本节内容来到堆的应用&#xff1a;堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序&#xff0c;冒泡排序&#xff0c;快速排序&#xff08;qsor…...

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备&#xff08;UE&#xff09; …...

文件操作与IO(3) 文件内容的读写——数据流

目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本&#xff1a; 第二个带有byte数组的版本&#xff1a; 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本&#xff1a; 第二个写入整个数组版本&#xff1a; …...

从被动响应到主动行动:AI Agent的自主性革命

从被动响应到主动行动:AI Agent的自主性革命 标题选项 《从被动响应到主动行动:AI Agent如何开启下一代人工智能的自主性革命》 《告别“一问一答”:拆解AI Agent的自主决策逻辑,看懂下一代AI的核心方向》 《从ChatGPT到自主Agent:人工智能的下一个拐点,到底革了谁的命?…...

Steam Economy Enhancer:终极Steam市场自动化管理完整指南

Steam Economy Enhancer&#xff1a;终极Steam市场自动化管理完整指南 【免费下载链接】Steam-Economy-Enhancer 中文版&#xff1a;Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/ste/Steam-Economy-Enhancer Steam Econo…...

EASY-HWID-SPOOFER:Windows硬件指纹保护终极方案

EASY-HWID-SPOOFER&#xff1a;Windows硬件指纹保护终极方案 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字时代&#xff0c;您的电脑硬件信息正在被悄无声息地追踪。无论是…...

论云原生层次架构在自动驾驶云控平台中的应用

【摘要】2024年3月&#xff0c;我作为核心系统架构师&#xff0c;主导了某新能源车企“新一代自动驾驶云控与数据平台”的重构与研发工作。该平台主要负责接入现役50万辆在线车辆&#xff0c;处理海量的多模态工况数据&#xff0c;并支撑大规模自动驾驶算法的并行仿真与实时监控…...

宣传片微电影制作拍摄

荣誉见证实力・匠心铸就品牌&#xff5c;国隆映像传媒&#xff0c;6 年深耕乌鲁木齐&#xff0c;斩获全国影像盛典、脱贫攻坚、文旅代言等多项大奖&#xff0c;为企事业单位提供一站式影视制作服务。...

如何免费解决BT下载速度慢问题?终极trackerslist配置指南

如何免费解决BT下载速度慢问题&#xff1f;终极trackerslist配置指南 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 你是否曾为BT下载的龟速而烦恼&#xff1f;种子明明显…...

【限时解密】ElevenLabs未公开的马来文SSML扩展语法:支持“Johor-Riau变体”、“Kedah重音标记”及连读停顿控制

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs马来文语音合成的技术演进与本地化挑战 ElevenLabs自2022年推出多语言TTS服务以来&#xff0c;持续扩展其语音模型对东南亚语言的支持能力。马来文&#xff08;Bahasa Melayu&#xff09;作为…...

内网终端安全管控:筑牢企业内部网络入侵防火墙

内网终端安全管控的核心目标内网终端安全管控旨在通过技术和管理手段&#xff0c;防止未经授权的访问、数据泄露及恶意攻击&#xff0c;确保企业内部网络资源的机密性、完整性和可用性。终端设备准入控制部署网络准入控制&#xff08;NAC&#xff09;系统&#xff0c;强制终端设…...

高效解包Godot游戏资源:PCK文件解析与自动化提取实战指南

高效解包Godot游戏资源&#xff1a;PCK文件解析与自动化提取实战指南 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker Godot游戏资源解包是游戏开发者和逆向工程师经常面临的技术挑战。本文将深入介绍…...

别再傻傻重启了!用JRebel插件实现Spring Boot项目秒级热更新(附2024最新激活与配置避坑指南)

解锁Spring Boot开发新姿势&#xff1a;JRebel热更新实战全攻略 每次修改完代码后&#xff0c;那个漫长的等待重启进度条的过程&#xff0c;是不是让你忍不住想砸键盘&#xff1f;作为经历过数百次Spring Boot项目重启的老司机&#xff0c;我完全理解这种抓狂感。直到遇见了JR…...