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

Django视图-HttpRequest请求对象和HttpResponse响应对象

文章目录

  • HttpRequest
  • HttpResponse
  • 实践
    • request对象的属性和方法
    • 响应


def index(request):  这个request其实就是内部已经封装好的Http请求HttpRequest,它是一个请求对象Django中的视图主要用来接受Web请求,并做出响应。
视图的本质就是一个Python中的函数
视图的响应分为两大类1) 以json数据形式返回(JsonResponse)2) 以网页的形式返回2.1) 重定向到另一个网页(HttpResponseRedirect)2.2) 错误视图(4xx,5xx)(HttpResponseNotFound,HttpResponseForbidden,HttpResponseNotAllowed等)
视图响应过程:浏览器输入-> urls 路由匹配  -> 视图响应 -> 回馈到浏览器
视图参数:1)一个HttpRequest的实例,一般命名为request2)通过ur1正则表达式传递过来的参数
位置:通常在应用下的views.py中定义错误视图:1404视图(页面没找到)2400视图(客户操作错误)3) 500视图 (服务器内部错误)

HttpRequest

服务器在接收到Http请求后,会根据报文创建HttpRequest对象
视图中的第一个参数就是HttpRequest对象
Django框架接收到http请求之后会将http请求包装为HttpRequest对象,之后传递给视图。

request常用属性和方法属性:path	请求的完整路径method 	请求的方法,常用GET,POSTGET		类似字典的参数,包含了get的所有参数POST	类似字典的参数,包含了post所有参数FILES	类似字典的参数,包含了上传的文件COOKIES	字典,包含了所有COOKIEsession	类似字典,表示会话META['REMOTE_ADDR']方法:is_ajax()	判断是否是ajax(),通常用在移动端和JS中get_full_path()	返回包含参数字符串的请求路径
QueryDict:	类字典的对象类似字典的数据结构。与字典的区别:可以存在相同的键。QueryDict中数据获取方式dict['uname']dict.get('uname')获取指定key对应的所有值dict.getlist('uname')

HttpResponse

服务器返回给客户端的数据
HttpResponse由程序员自己创建1)不使用模板,直接调用HttpResponse(),返回HttpResponse对象。2)调用模板,进行渲染。使用renderrender(request,template_name[,context])request			请求体对象template_name	模板路径context			字典参数,用来填坑属性: 	content		返回的内容charset		编码格式status_code	响应状态码(2xx,3xx,4xx,5xx)方法:write(xxx)		直接写出文本flush()			冲刷缓冲区set_cookie(key,value='xxx',max_age=None)	设置cookiedelete_cookie(key)		删除cookieHttpResponse子类HttpResponseRedirect响应重定向:可以实现服务器内部跳转return HttpResponseRedict('/grade/2030')使用的时候推荐使用反向解析JsonResponse返回Json数据的请求,通常用在异步请求上JsonResponse(dict)返回json数据时,Content-type是application/json

实践

新建一个项目 Day05DjangoPro,创建一个应用 叫App

在这里插入图片描述
不写子路由啦,直接写根路由Day05DjangoPro\urls.py

from django.contrib import admin
from django.urls import path
from App.views import *urlpatterns = [path('myrequest/',my_request),path('admin/', admin.site.urls),
]

App\views.py

from django.shortcuts import render, HttpResponse# 请求
def my_request(request):print(request)   # 请求对象# <WSGIRequest: GET '/myrequest/'>return HttpResponse('ok')

http://127.0.0.1:8000/myrequest/

打印得到的是<WSGIRequest: GET ‘/myrequest/’>
WSGIRequest是什么?我们可以看一下
在这里插入图片描述
WSGIRequest 继承 HttpRequest ,HttpRequest 再点开看一下
在这里插入图片描述
QueryDict 继承 MultiValueDict,MultiValueDict继承 dict字典,所以QueryDict 可以当成字典来用。QueryDict 是一个 类字典对象。

request对象的属性和方法

App\views.py

from django.shortcuts import render, HttpResponse# 请求
def my_request(request):print(request)  # 请求对象# <WSGIRequest: GET '/myrequest/'># request对象的属性和方法print(request.method)  # 请求方式,GET,POST...print(request.GET)  # GET请求的参数 <QueryDict: {'name': ['清风'], 'age': ['18']}>print(request.GET['name'])  # 第一种方式,如果没有就会报错print(request.GET.get('name', default='匿名用户'))  # 第二种方式,如果没有就会返回None或者默认值(跟字典一样dict),不会报错,推荐使用这种方式print(request.GET.getlist('name'))  # 第三种,如果name有多个值,则都会获取,以列表[]的形式返回,没有数据就返回空列表[]# print(request.POST)  # POST请求的参数 <QueryDict: {}># print(request.POST.get('name', default='匿名用户')) # 也是一样的print(request.path)  # 路径,就是我们写的路由 /myrequest/print(request.get_full_path())  # 整个路径  /myrequest/?age=18&name=%E6%B8%85%E9%A3%8E&name=%E5%BE%AE%E6%B3%ABreturn HttpResponse('ok')

http://127.0.0.1:8000/myrequest/?age=18&name=清风&name=微泫

在这里插入图片描述

此外还有…

# 请求
def my_request(request):print(request)  # 请求对象print(request.COOKIES)  # cookie 会话技术# {'csrftoken': 'lvQaYuMDgiemswhYomZXc1msPaoSS35J'}print(request.session)  # session 会话# <django.contrib.sessions.backends.db.SessionStore object at 0x0000023890CB3890>print(request.FILES)  # 文件,前端上传的文件对象print(request.META['REMOTE_ADDR'])  # 客户端的IP地址return HttpResponse('ok')

响应

Day05DjangoPro\urls.py

path('myresponse/', my_response),

App\views.py

from django.http import JsonResponse
from django.shortcuts import render, HttpResponse, redirect, reverse, HttpResponseRedirectdef my_response(request):# 1. 返回字符串:企业项目中使用很少# return HttpResponse('ok')# 2. 返回模板:前后端不分离的时候使用# return render(request, 'index.html', {'key1': 'value1', 'key2': 'value2'})# 3. 重定向: 页面跳转用的,路径的跳转# redirect 和 HttpResponseRedirect是一样的# return redirect("https://blog.csdn.net/weixin_59633478/category_12401835.html")# return redirect("/request/")# return HttpResponseRedirect("/request/")# redirect(reverse("命名空间:userdetail", args=(2,)))# return redirect(reverse("App:userdetail", kwargs={'uid': 2}))# 4. 返回JSON: 前后端分离的情况使用return JsonResponse({'data': 123})# 请求
def my_request(request):print(request)  # 请求对象# <WSGIRequest: GET '/myrequest/'># request对象的属性和方法# print(request.method)  # 请求方式,GET,POST...# print(request.GET)  # GET请求的参数 <QueryDict: {'name': ['清风'], 'age': ['18']}># print(request.GET['name'])  # 第一种方式,如果没有就会报错# print(request.GET.get('name', default='匿名用户'))  # 第二种方式,如果没有就会返回None或者默认值(跟字典一样dict),不会报错,推荐使用这种方式# print(request.GET.getlist('name'))  # 第三种,如果name有多个值,则都会获取,以列表[]的形式返回,没有数据就返回空列表[]# # print(request.POST)  # POST请求的参数 <QueryDict: {}># # print(request.POST.get('name', default='匿名用户')) # 也是一样的## print(request.path)  # 路径,就是我们写的路由 /myrequest/# print(request.get_full_path())  # 整个路径  /myrequest/?age=18&name=%E6%B8%85%E9%A3%8E&name=%E5%BE%AE%E6%B3%ABprint(request.COOKIES)  # cookie 会话技术# {'csrftoken': 'lvQaYuMDgiemswhYomZXc1msPaoSS35J'}print(request.session)  # session 会话# <django.contrib.sessions.backends.db.SessionStore object at 0x0000023890CB3890>print(request.FILES)  # 文件,前端上传的文件对象print(request.META['REMOTE_ADDR'])  # 客户端的IP地址return HttpResponse('ok')

在这里插入图片描述


在这里插入图片描述
其实render返回的也是HttpResponse,只不过我们通过render_to_string方法将我们模板也就是html和内容加进去,在它内部会将html内容、模板语法 和 发过去的数据 进行结合做渲染,渲染之后得到的content其实是一个可能很长的html数据,所以返回的也是一个字符串。


App\views.py

def my_response(request):response = HttpResponse('ok')response.content = 'hello'response.status_code = 400return response

在这里插入图片描述

相关文章:

Django视图-HttpRequest请求对象和HttpResponse响应对象

文章目录 HttpRequestHttpResponse实践request对象的属性和方法响应 def index(request): 这个request其实就是内部已经封装好的Http请求HttpRequest&#xff0c;它是一个请求对象Django中的视图主要用来接受Web请求&#xff0c;并做出响应。 视图的本质就是一个Python中的函数…...

原来Lambda表达式是这样写的

原来Lambda表达式是这样写的 lambda 是一个匿名函数&#xff0c;我们可以把 lambda 表达式理解为是一段可以传递的代码。 lambda 简明地将代码或方法作为参数传递进去执行。 函数式编程&#xff1a;核心是把函数作为值。 函数式接口 &#xff1a;只有一个抽象方法的接口称之…...

smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...

下载地址:百度网盘 请输入提取码 SQL操作返回历史记录&#xff1a; 2023-08-21 20:42:08:220 输入&#xff1a;select version as 版本号 2023-08-21 20:42:08:223 输出&#xff1a;当前数据库实例版本号&#xff1a;Microsoft SQL Server 2012 - 11.0.2100.60 (X64) …...

智影 R100:首款三维Mesh建模的SLAM激光扫描仪

近年来&#xff0c;激光SLAM系统凭借其更加快速且准确获取更丰富信息的优势&#xff0c;迅速风靡测绘领域&#xff0c;让原本耗时耗力的外业测量变得更加高效。手持激光扫描仪作为基于激光SLAM技术衍生的众多产品之一&#xff0c;相较于架站式激光扫描仪更加轻巧便利&#xff0…...

Next.js - Loading UI and Streaming

特殊文件 loading.js 可帮助您使用 React Suspense 创建有意义的加载用户界面。使用此约定&#xff0c;您可以在加载路由段内容时显示来自服务器的即时加载状态。渲染完成后&#xff0c;新的内容会自动切换进来。 即时加载状态 即时加载状态是在导航时立即显示的后备用户界面…...

快速解决Ubuntu 中 wine 程序 中文显示为方块/显示错误/无法显示中文(2023)

解决办法就是在创建prefix的命令行里加上LANG“zh_CN.UTF8” 或 LC_ALL“zh_CN.UTF8”&#xff0c;并安装cjkfonts&#xff0c;即可。 1、生成prefix、安装cjk字体 以下是基本流程&#xff1a; 现在假定wine和winetricks已经装好&#xff0c; // 先创建一个prefix&#xff0…...

漏洞指北-VulFocus靶场专栏-中级02

漏洞指北-VulFocus靶场专栏-中级02 中级005 &#x1f338;thinkphp lang 命令执行&#xff08;thinkphp:6.0.12&#xff09;&#x1f338;step1&#xff1a;burp suite 抓包 修改请求头step2 修改成功&#xff0c;访问shell.php 中级006 &#x1f338;Metabase geojson任意文件…...

【开源三方库】bignumber.js:一个大数数学库

OpenHarmony&#xff08;OpenAtom OpenHarmony简称“OpenHarmony”&#xff09;三方库&#xff0c;是经过验证可在OpenHarmony系统上可重复使用的软件组件&#xff0c;可帮助开发者快速开发OpenHarmony应用。如果是发布到开源社区&#xff0c;称为开源三方库&#xff0c;开发者…...

【C++】iota函数 + sort函数实现基于一个数组的多数组对应下标绑定排序

目录 一、iota函数 1. 函数解析 ​① 迭代器类型(补充) ② 头文件 ③ 参数 2. 函数用途与实例 二、sort函数 1、 函数解读 2、实现倒序排列 2.1 greater 与 less 模板参数 2.2 lambda表达式 三、下标绑定排序&#xff08;zip&#xff09; --- 833.字符串中的查找与替换 一、…...

C# window forms 进度条实现

在 C# Windows Forms 应用程序中&#xff0c;如果在后台执行长时间运行的任务&#xff0c;并希望同时更新进度条&#xff0c;可以使用多线程来实现。这将确保进度条的更新不会阻塞主线程&#xff0c;从而保持界面的响应性。以下是一个示例&#xff0c;演示了如何在后台执行任务…...

ListNode相关

目录 2. 链表相关题目 2.1 合并两个有序链表&#xff08;简单&#xff09;&#xff1a;递归 2.2 删除排序链表中的重复元素&#xff08;简单&#xff09;&#xff1a;一次遍历 2.3 两链表相加&#xff08;中等&#xff09;&#xff1a;递归 2.4 删除链表倒数第N个节点&…...

docker的资源控制及docker数据管理

目录 一.docker的资源控制 1.CPU 资源控制 1.1 资源控制工具 1.2 cgroups有四大功能 1.3 设置CPU使用率上限 1.4 进行CPU压力测试 1.5 设置50%的比例分配CPU使用时间上限 1.6 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 1.6.1 两个容器测试cpu 2&…...

通过请求头传数据向后端发请求

axios &#xff08;get post请求、头部参数添加&#xff09;傻瓜式入门axios_axiospost请求参数_web_blog的博客-CSDN博客...

产品流程图是什么?怎么做?

产品流程图是什么&#xff1f; 产品流程图是一种图形化的表达方式&#xff0c;用于描述产品开发、制造、销售、使用等各个阶段中涉及的流程、步骤和关系。它通过图形符号、箭头、文本等元素&#xff0c;展示了产品的各个环节之间的关联和顺序&#xff0c;通常被用于可视化产…...

面试之快速学习STL-map

关联式容器 包括 map、multimap、set 以及 multiset 这 4 种容器。和序列式容器区别&#xff1a; a . 关联式容器在存储元素时还会为每个元素在配备一个键&#xff0c;整体以键值对的方式存储到容器中。 b . 相比前者&#xff0c;关联式容器可以通过键值直接找到对应的元素&am…...

ES的索引结构与算法解析

提到ES&#xff0c;大多数爱好者想到的都是搜索引擎&#xff0c;但是明确一点&#xff0c;ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎&#xff0c;还是有明确搜索目的的搜索行为&#xff0c;如各大…...

32.Netty源码之服务端如何处理客户端新建连接

highlight: arduino-light 服务端如何处理客户端新建连接 Netty 服务端完全启动后&#xff0c;就可以对外工作了。接下来 Netty 服务端是如何处理客户端新建连接的呢&#xff1f; 主要分为四步&#xff1a; md Boss NioEventLoop 线程轮询客户端新连接 OP_ACCEPT 事件&#xff…...

代码随想录day11

20. 有效的括号 ● 力扣题目链接 ● 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串&#xff0c;判断字符串是否有效。 ● 有效字符串需满足&#xff1a; ● 左括号必须用相同类型的右括号闭合。 ● 左…...

RabbitMQ实习面试题

RabbitMQ实习面试题 在 RabbitMQ 中&#xff0c;确保生产者消息正确发布以及确保消费者已经消费是非常重要的任务。以下是一些方法和策略&#xff0c;可以帮助您在 RabbitMQ 中实现这些目标&#xff1a; 确保生产者消息正确发布&#xff1a; 持久化消息&#xff1a;将消息设…...

Electron入门,项目运行,只需四步轻松搞定。

electron 简单介绍&#xff1a; 实现&#xff1a;HTML/CSS/JS桌面程序&#xff0c;搭建跨平台桌面应用。 electron 官方文档&#xff1a; [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的&#xff0c;可行性真实有效。 文章1&#xff1a; https://www.cnbl…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...