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

news2024/9/24 7:24:13

文章目录

  • 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的实例,一般命名为request
	2)通过ur1正则表达式传递过来的参数
位置:
	通常在应用下的views.py中定义
		错误视图:
			1404视图(页面没找到)
			2400视图(客户操作错误)
			3) 500视图 (服务器内部错误)

HttpRequest

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

request常用属性和方法
	属性:
		path	请求的完整路径
		method 	请求的方法,常用GET,POST
		GET		类似字典的参数,包含了get的所有参数
		POST	类似字典的参数,包含了post所有参数
		FILES	类似字典的参数,包含了上传的文件
		COOKIES	字典,包含了所有COOKIE
		session	类似字典,表示会话
		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)调用模板,进行渲染。
	使用render
		render(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)	设置cookie
		delete_cookie(key)		删除cookie

HttpResponse子类
	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%AB

    return 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, HttpResponseRedirect


def 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%AB

    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')

在这里插入图片描述


在这里插入图片描述
其实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 = 400
    return response

在这里插入图片描述

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

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

相关文章

解决Windows下的docker desktop无法启动问题

以管理员权限运行cmd 报错&#xff1a; docker: error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/containers/create: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows,…

【image captioning】自用数据集BUTD特征提取流程

自用数据集BUTD特征提取流程 作者:安静到无声 个人主页 目录 自用数据集BUTD特征提取流程源数据生成推荐专栏源数据生成 基于程序bottom-up-attention.pytorch可以提取图片的BUTD特征,具体方法详见:MILVLG/bottom-up-attention.pytorch: A PyTorch reimplementation of bo…

2023年国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

航空电子设备中的TSN通讯架构—直升机

前言 以太网正在迅速取代传统网络&#xff0c;成为航空电子设备和任务系统的核心高速网络。本文提出了以太网时间敏感网络(TSN)在航空电子设备上应用的技术优势问题。在实际应用中&#xff0c;TSN已成为一个具有丰富的机制和协议的工具箱&#xff0c;可满足与时间和可靠性相关…

第九课 过去分词、现在分词作非谓语

文章目录 前言一、过去分词的定义1、及物动词的过去分词2、双宾动词的过去分词 二、过去分词和过去分词短语的作用1、过去分词做前置定语过去分词构成的形容词有被动或者完成意义&#xff0c;如果单独的一个过去分词不及物只有完成意义&#xff0c;如果是一个及物动词的过去分词…

索引构造与信息检索:让 ChatGPT 成为 Selenium 问答助手

这是chatgpt为我生成的3个标题&#xff0c;我选了第3个。 利用 Langchain 和 GPT 实现 Selenium 机器人自动问答 向量化存储和检索&#xff1a;如何用相似度搜索匹配 Selenium 知识&#xff1f; 索引构造与信息检索&#xff1a;让 ChatGPT 成为 Selenium 问答助手 之前有很…

数据结构 - 线性表的顺序存储

一、顺序存储定义&#xff1a; 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中。简言之&#xff0c;逻辑上相邻&#xff0c;物理上也相邻顺序表中&#xff0c;任一元素可以随机存取&#xff08;优点&#xff09; 二、顺序表中元素存储位置的计算 三、顺序表在算法中的实…

bootstrap-modal调用ajax后不经过回调函数

说明&#xff1a;我用的是boostrap的弹框&#xff0c;表单用的是layui的&#xff0c;个人觉得bootstrap比layui的弹框好看点&#xff0c;能自适应高度。 如图&#xff1a;点击保存后里面的内容不执行 原因&#xff1a;type用的是submit 解决&#xff1a;把submit改为button

数智赋能共筑未来,聚好看DBdoctor亮相中国数据库技术大会

8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。作为国内数据库领域规模最大的技术交流盛会,吸引了众多业内知名企业和数百名行业专家参加。聚好看携新内核级数据库性能洞察新产品DBdoctor亮相,吸引来自数据库管理专业人士关注。 数据库性能问题诊…

上位机一般的开发工具有哪些?

上位机开发工具是用于开发和构建上位机应用程序的软件工具。它们提供了一系列功能和资源&#xff0c;帮助开发人员设计、编写和调试上位机应用程序。以下是一些常见的上位机开发工具&#xff1a;Visual Studio&#xff1a;作为一种集成开发环境&#xff08;IDE&#xff09;&…

车辆PEPS无钥匙方案

汽车无钥匙系统&#xff08;PEPS无钥匙方案&#xff09;作为车辆智能化变革下的一项创新技术&#xff0c;正在被广泛应用于各种车型中。PEPS无钥匙方案主要具有三项功能&#xff0c;即PKE&#xff08;Passive Keyless Entry&#xff09;被动式无钥匙进入、RKE&#xff08;Remot…

LabVIEW开发住宅系统数据采集和监测系统

LabVIEW开发住宅系统数据采集和监测系统 由于不断需要平衡电力生产和消费&#xff0c;电力市场是最复杂的市场。在整合大量可变可再生能源&#xff08;如风能和太阳能&#xff09;时&#xff0c;这尤其是一个挑战。储能似乎是一种理想的解决方案&#xff0c;但是电能难以有效存…

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification (Paper reading) Renrui Zhang&#xff0c;Shanghai AI Laboratory&#xff0c;ECCV2022&#xff0c;Cited:45&#xff0c;Code&#xff0c;Paper 1. 前言 对比式视觉-语言预训练&#xff0c;也称…

(三)Linux中卸载docker(非常详细)

docker 卸载 使用yum安装docker 如需卸载docker可以按下面步骤操作&#xff1a; 1、停止docker服务 systemctl stop docker 2、查看yum安装的docker文件包 yum list installed |grep docker 3、查看docker相关的rpm源文件 rpm -qa |grep docker 4、删除所有安装的docke…

python 开发环境(PyCharm)搭建指南

Python 的下载并安装 参考&#xff1a;Python基础教程——搭建Python编程环境 下载 Python Python 下载地址&#xff1a;官网 &#xff08;1&#xff09;点击【Downloads】>>>点击【Windows】>>>点击【Python 3.x.x】下载最新版 Python&#xff1b; Pyt…

linux学习(软硬链接+静态库)[15]

软硬链接 软链接&#xff08;symbolic link&#xff09;和硬链接&#xff08;hard link&#xff09;是操作系统中用于创建文件或目录之间关联的两种方式。 软链接是一个特殊的文件&#xff0c;它包含了指向目标文件或目录的路径。软链接可以跨文件系统&#xff0c;并且可以指…

vue3+ts+vite项目页面初始化loading加载效果

简介 一分钟实现 vue-pure-admin 同款项目加载时的 loading 效果 一、先看效果 1.1 静态效果 1.2 动态效果 二、上代码 核心代码在body里面&#xff0c;代码中已标明。找到你项目的 index.html &#xff0c;复制粘贴进去即可 <!DOCTYPE html> <html lang"en…

购车小记:辅助驾驶(锋兰达双擎领先版(14W落地)/锐放双擎先锋版(心里预期13W落地))

文章目录 引言I 试驾L2辅助驾驶II 优惠2.1 补贴2.2 坚持免息2.3 礼包III 车型对比3.1 锐放双擎先锋3.2 锋兰达双擎领先版引言 最近想买辆代步车,关注了锐放、锋兰达。 记录下心得。 流程:多家店对比落地价、礼包、政府补贴;合同没有确定不交意向金。 不要因为价格优惠/政府…

vue3-ts- element-plus新增组件-过滤

新增组件-所有值为空时过滤 <el-form-item label"家庭成员"><divclass"username-box"v-for"(item, index) in form.namelist":key"index"><div>姓名&#xff1a;<el-input v-model"item.name" placeho…

【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)

HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows S&P-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学 Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of susp…