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中定义错误视图:1)404视图(页面没找到)2)400视图(客户操作错误)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,它是一个请求对象Django中的视图主要用来接受Web请求,并做出响应。 视图的本质就是一个Python中的函数…...
原来Lambda表达式是这样写的
原来Lambda表达式是这样写的 lambda 是一个匿名函数,我们可以把 lambda 表达式理解为是一段可以传递的代码。 lambda 简明地将代码或方法作为参数传递进去执行。 函数式编程:核心是把函数作为值。 函数式接口 :只有一个抽象方法的接口称之…...
smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...
下载地址:百度网盘 请输入提取码 SQL操作返回历史记录: 2023-08-21 20:42:08:220 输入:select version as 版本号 2023-08-21 20:42:08:223 输出:当前数据库实例版本号:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) …...
智影 R100:首款三维Mesh建模的SLAM激光扫描仪
近年来,激光SLAM系统凭借其更加快速且准确获取更丰富信息的优势,迅速风靡测绘领域,让原本耗时耗力的外业测量变得更加高效。手持激光扫描仪作为基于激光SLAM技术衍生的众多产品之一,相较于架站式激光扫描仪更加轻巧便利࿰…...
Next.js - Loading UI and Streaming
特殊文件 loading.js 可帮助您使用 React Suspense 创建有意义的加载用户界面。使用此约定,您可以在加载路由段内容时显示来自服务器的即时加载状态。渲染完成后,新的内容会自动切换进来。 即时加载状态 即时加载状态是在导航时立即显示的后备用户界面…...
快速解决Ubuntu 中 wine 程序 中文显示为方块/显示错误/无法显示中文(2023)
解决办法就是在创建prefix的命令行里加上LANG“zh_CN.UTF8” 或 LC_ALL“zh_CN.UTF8”,并安装cjkfonts,即可。 1、生成prefix、安装cjk字体 以下是基本流程: 现在假定wine和winetricks已经装好, // 先创建一个prefix࿰…...
漏洞指北-VulFocus靶场专栏-中级02
漏洞指北-VulFocus靶场专栏-中级02 中级005 🌸thinkphp lang 命令执行(thinkphp:6.0.12)🌸step1:burp suite 抓包 修改请求头step2 修改成功,访问shell.php 中级006 🌸Metabase geojson任意文件…...
【开源三方库】bignumber.js:一个大数数学库
OpenHarmony(OpenAtom OpenHarmony简称“OpenHarmony”)三方库,是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开发OpenHarmony应用。如果是发布到开源社区,称为开源三方库,开发者…...
【C++】iota函数 + sort函数实现基于一个数组的多数组对应下标绑定排序
目录 一、iota函数 1. 函数解析 ① 迭代器类型(补充) ② 头文件 ③ 参数 2. 函数用途与实例 二、sort函数 1、 函数解读 2、实现倒序排列 2.1 greater 与 less 模板参数 2.2 lambda表达式 三、下标绑定排序(zip) --- 833.字符串中的查找与替换 一、…...
C# window forms 进度条实现
在 C# Windows Forms 应用程序中,如果在后台执行长时间运行的任务,并希望同时更新进度条,可以使用多线程来实现。这将确保进度条的更新不会阻塞主线程,从而保持界面的响应性。以下是一个示例,演示了如何在后台执行任务…...
ListNode相关
目录 2. 链表相关题目 2.1 合并两个有序链表(简单):递归 2.2 删除排序链表中的重复元素(简单):一次遍历 2.3 两链表相加(中等):递归 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资源占用比(设置多个容器时才有效) 1.6.1 两个容器测试cpu 2&…...
通过请求头传数据向后端发请求
axios (get post请求、头部参数添加)傻瓜式入门axios_axiospost请求参数_web_blog的博客-CSDN博客...
产品流程图是什么?怎么做?
产品流程图是什么? 产品流程图是一种图形化的表达方式,用于描述产品开发、制造、销售、使用等各个阶段中涉及的流程、步骤和关系。它通过图形符号、箭头、文本等元素,展示了产品的各个环节之间的关联和顺序,通常被用于可视化产…...
面试之快速学习STL-map
关联式容器 包括 map、multimap、set 以及 multiset 这 4 种容器。和序列式容器区别: a . 关联式容器在存储元素时还会为每个元素在配备一个键,整体以键值对的方式存储到容器中。 b . 相比前者,关联式容器可以通过键值直接找到对应的元素&am…...
ES的索引结构与算法解析
提到ES,大多数爱好者想到的都是搜索引擎,但是明确一点,ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎,还是有明确搜索目的的搜索行为,如各大…...
32.Netty源码之服务端如何处理客户端新建连接
highlight: arduino-light 服务端如何处理客户端新建连接 Netty 服务端完全启动后,就可以对外工作了。接下来 Netty 服务端是如何处理客户端新建连接的呢? 主要分为四步: md Boss NioEventLoop 线程轮询客户端新连接 OP_ACCEPT 事件ÿ…...
代码随想录day11
20. 有效的括号 ● 力扣题目链接 ● 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。 ● 有效字符串需满足: ● 左括号必须用相同类型的右括号闭合。 ● 左…...
RabbitMQ实习面试题
RabbitMQ实习面试题 在 RabbitMQ 中,确保生产者消息正确发布以及确保消费者已经消费是非常重要的任务。以下是一些方法和策略,可以帮助您在 RabbitMQ 中实现这些目标: 确保生产者消息正确发布: 持久化消息:将消息设…...
Electron入门,项目运行,只需四步轻松搞定。
electron 简单介绍: 实现:HTML/CSS/JS桌面程序,搭建跨平台桌面应用。 electron 官方文档: [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的,可行性真实有效。 文章1: https://www.cnbl…...
【C++】visualstudio环境安装
记录了部分安装步骤,可能有点不全,参考下,需要的磁盘空间差不多20GB; 下载 https://visualstudio.microsoft.com/zh-hans/vs/ 下载完成: 双击进入安装状态: 根据自己的需求勾选安装项: 选择…...
使用MySQL:5.6和owncloud镜像搭建个人网盘
拉取镜像 [rootkvm ~]# docker pull mysql:5.6[rootkvm ~]# docker pull owncloud启动mysql容器 [rootkvm ~]# docker run -d --name db1 -e MYSQL_ROOT_PASSWORDroot mysql:5.6 db832e4e4333a0e9a7c152a67272721fdbe5381054090c5eb24f90455390a852 [rootkvm ~]# docker ps …...
php中创建对象时传递的参数是构造方法
PHP中创建对象时,可以通过构造方法的参数来传递参数值。构造方法是一个特殊的方法,在创建对象时会自动调用,用于进行对象的初始化操作。 以下是一个示例代码,展示了如何在PHP中使用构造方法传递参数: class MyClass …...
C++并发及互斥保护示例
最近要写一个多线程的并发数据库,主要是希望使用读写锁实现库的并发访问,同时考虑到其他平台(如Iar)没有C的读写锁,需要操作系统提供,就将读写锁封装起来。整个过程还是比较曲折的,碰到了不少问题,在此就简…...
新手常犯的错误,anzo capital昂首资本一招避免少走弯路
新手是不是经常交易中赚不到钱,今天anzo capital昂首资本就盘点一下新手常犯的错误,一招教你少走弯路。 一.随便选择交易账户 开立实时账户时选择正确的账户类型,anzo capital昂首资本教你比较所有提供的账户类型,选择最符合财务…...
Java Vue (el-date-picker组件) 前后端 关于时间格式数据的处理方法
前端使用 elment-ui 组件 el-date-picker 其中组件需要格式化时间,增加属性 value-format"yyyy-MM-dd" 后端 Java 接收参数类型 后端Dto 使用Date接收,并添加JsonFormat注解 JsonFormat(pattern"yyyy-MM-dd") private Date testTi…...
Python爬虫——scrapy_多条管道下载
定义管道类(在pipelines.py里定义) import urllib.requestclass DangDangDownloadPipelines:def process_item(self, item, spider):url http: item.get(src)filename ../books_img/ item.get(name) .jpgurllib.request.urlretrieve(url, filename…...
lombok启动不生效(什么方法都试了,可还是不生效怎么办 ?! 救救我)
使用IntelliJ IDEA 2021.1.3(Ultimate Edition)时提示Lombok不生效 java: You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled. 方式一:我们手动更新一下版本到以下版本 <!--Lombok--&…...
element文本域禁止手动拉伸、两种方式、textarea
文章目录 style方式element自带的禁止拉伸方法建议 style方式 html <el-inputv-model"content":rows"3"class"r_n"type"textarea"maxlength"40"placeholder""style"height: 100%;" />css style…...
c#中lambda表达式缩写推演
Del<string> ml new Del<string>(Notify);//泛型委托的实例化,并关联Nofity方法 Del<string> ml new Del<string>(delegate (string str) { return str.Length; });//将Nofity变更为匿名函数 Del<string> ml delegate(string str)…...
国内独立站建站平台排名/sem是什么意思
原文件名格式:汉字名称数字.dcm,例如:杨勇23.dcm 修改后文件名格式:IM三位数字.dcm,例如:IM023.dcm %% 重命名需打开当前文件夹再运行 % 直接读取即可 不需要重新命名 files dir(*.dcm); lenlength(files); for i1:len oldnamefiles(i)…...
网站添加微信支付功能/最近新闻热点大事件
安全共享对象策略1.线程限制 : 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改2.共享只读 : 一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问,但是任何线程都不能修改它3.线程安全对…...
石家庄高端网站开发/百度提交入口网站网址
为什么80%的码农都做不了架构师?>>> Seagull是由小米工程师陈迪豪发布的开源docker容器和镜像的web界面监控工具,目前在https://github.com/tobegit3hub/seagull维护 下载镜像 docker pull tobegit3hub/seagull启动镜像 docker run -d -p 10…...
wordpress每个标签文章置顶/外包公司的优势和劣势
前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识。 xml基础知识 要了解xxe漏洞,那么一定得先明白基础知识&#…...
网站图片优化怎么做/谷歌怎么推广自己的网站
工业机器人通常使用以下编程语言: 工控语言,例如:PLC(可编程控制器语言)计算机语言,例如:C、Python、Java机器人控制语言,例如:Robot Operating System (ROS) 不同的机器人系统和应用可能需要使…...
推广平台有哪几个/徐州关键词优化平台
短视频源码作为短视频开发的基石,为短视频开发在视频领域的兴起立下了汗马功劳。仿抖音源码短视频开发为系统功能构建了各种方便、简洁、强大的功能,还为短视频系统的安全、稳定、流畅做了强大的技术支持。 首先是大数据分析 大数据分析应用越来越广泛。…...