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

这篇具有很好参考价值的文章主要介绍了Django视图-HttpRequest请求对象和HttpResponse响应对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python
不写子路由啦,直接写根路由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是什么?我们可以看一下
Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python
WSGIRequest 继承 HttpRequest ,HttpRequest 再点开看一下
Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python
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=微泫

Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python

此外还有…

# 请求
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')

Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python


Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python
其实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

Django视图-HttpRequest请求对象和HttpResponse响应对象,# Django4,django,python文章来源地址https://www.toymoban.com/news/detail-663601.html

到了这里,关于Django视图-HttpRequest请求对象和HttpResponse响应对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • django中的请求和响应

    django中的请求是 被封装到HttpRequest的对象当中 当一个请求过来 django会根据路由url 匹配 匹配以后执行响应的视图函数 视图函数的第一个参数request 就是HttpRequest 当一个请求过来 /app/page/1 url匹配 urls.py 视图函数的执行 views.py request就是封装的HttpRequest 请求对象 django的响应 使用

    2024年02月10日
    浏览(37)
  • 【Django】Django4.1.2使用xadmin避坑指南

    换成Django4版本使用xadmin真是需要巨大勇气。 win10 python3.9.0 django4.1.2 解决办法: 如果正常安装了xadmin库的话,six库也会安装,把 项目根目录/venv/Lib/site-packages/six.py 复制到 项目根目录/venv/Lib/site-packages/django/utils 下即可。 分析: Django已经弃用 ugettext(), ugettext_lazy(), ugettext_noo

    2023年04月08日
    浏览(166)
  • Django自定义视图类及实现请求参数和返回参数加解密

      定义的数据库模型,也就是models.py的模型   序列化文件 serializer.py    然后新建一个视图文件 依次继承get、post、put、delete,实现查、增、改、删。       接下来对请求参数,及返回参数进行加密,加解密可以看我之前的文章 先新建一个MyResponse.py,自定义自己的返回类

    2024年02月06日
    浏览(70)
  • 执行HttpResponse的请求阻塞太久的处理方法

    执行 HttpResponse 的请求 阻塞太久 : 设置请求连接超时时间 :在HttpRequest.post()方法后,使用 connectTimeout() 方法设置连接超时时间。例如:.connectTimeout(3000)表示设置连接超时时间为3秒。这样可以防止连接超时等待时间过长。 设置响应读取超时时间 :在HttpRequest.post()方法后,使

    2024年02月15日
    浏览(23)
  • 【Django学习】(十一)APIView_请求与响应_GenericAPIView

      继承DRF中APIView之后,那么当前视图就具备了认证、授权、限流等功能  继承DRF中APIView之后,每一个实例方法中的request为Request对象  Request类拓展了Django中的HttpRequest类,具备很多额外优秀的功能 Request类与HttpRequest类中的所有功能兼容 查询字符串参数: request.GET、request.q

    2024年02月13日
    浏览(45)
  • 详解Django请求与响应:深入理解Web Http交互的核心机制

    本文深入探讨了 Django 中的请求与响应处理,从 Django 请求和响应的基础知识、生命周期,到 HttpRequest 和 HttpResponse 对象的详细介绍。同时,讨论了 Django 的视图和请求、响应处理,以及安全性和异步处理的考虑。最后,对比了 Django 与 Flask、FastAPI 等框架在请求响应处理上的异

    2024年02月13日
    浏览(39)
  • arm架构,django4.2.7适配达梦8数据库

    Django                        4.2.7 django-dmPython               3.1.7 dmPython                      2.5.5 DM Database Server 64 V8 DB Version: 0x7000c 适配过程中发现的问题如下: 解决方法:将django_dmPython和django_dmPython-3.1.7.dist-info复制一份,放到django下面的db/backends/目录下,因此后面

    2024年04月29日
    浏览(51)
  • HttpRequest发送网络请求POST/GET

    会返回你需要的数据,类型为String HttpRequest.get获取网络发过来的String类型的数据,如需获取里面的某一参数,需对数据进行解析。解析方式如下: 示例接收到的String类型转JSON后格式:  解析:

    2024年01月19日
    浏览(44)
  • 遥遥领先,免费开源的django4-vue3前后端分离项目

    本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发,融合了typescript和element-plus-ui,提供暗黑模式和白昼模式两种主题以及全屏切换,开发bug少,简单易学,项目后端采用了python的django框架作为开发模块。 目前正在搭建到网络服务器中。项目会不定期更新喜欢的朋

    2024年02月04日
    浏览(57)
  • django4版本提示 django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)

    我最近学习django的时,执行python manage.py migrate报错如下: django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26). 看信息是本地的mysql版本比较低,百度了以后发现Django 3.2及更高版本需要MySQL 8.0.25或更高版本,我本地的mysql版本就是5.7.26。但是我不想再装了怎么办?把m

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包