Django HttpRequest 请求对象

2024-01-03 06:28

本文主要是介绍Django HttpRequest 请求对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

django-ide


目录

    • 一、概述
    • 二、测试
    • 三、属性和方法
    • 四、案例


一、概述

Django 中的视图主要用来接受 Web 请求,并作出响应,视图的本质就是一个 Python 中的函数。

1、视图的响应分为两大类

  1. 以 Json 数据形式返回(JsonResponse)

  2. 以网页的形式返回

    1)重定向到另一个网页(HttpResponseRedirect)

    2)错误视图(4xx,5xx)

2、视图响应过程

浏览器 => urls路由匹配 => 视图响应 => 回馈到浏览器

3、视图参数有两种

  1. 一个 HttpRequest 的实例,一般命名为 request,相当于从浏览器传过来

    如下案例,视图函数中的 request 就是一个形式参数,包含来自客户端的所有请求信息。

    from django.shortcuts import render
    from book.models import *# 书籍首页
    def book_index(request):return render(request, 'book/book_index.html')
  2. 另一个是自定义参数,一般通过 url 正则表达式传递过来

    如:视图函数自定义 bid 参数,该参数就需要从 url 中传递过来。

    from django.shortcuts import render
    from book.models import *# 书籍详情
    def book_detail(request, bid):# 获取bid对应的书籍book = Book.objects.get(pk=bid)# 组织数据context = {'book': book}return render(request, 'book/book_detail.html', context)
    

    因此,我们在 url 路由配置时,就需要定义与视图函数一致的参数。

    from django.urls import path
    from book.views import *urlpatterns = [path('index/', book_index, name='index'),path('list/', book_list, name='list'),path('detail/<int:bid>', book_detail, name='detail'),
    ]

    那这个参数怎么获取呢?手动输入?那肯定不是,而是通过数据库的增删改查来获取具体的参数,并传入,如下案例。

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>作者</title>
    </head>
    <body><h2>作者详情页</h2><hr><p>作者姓名:{{ author.first_name }}{{ author.last_name }}</p><p>作者邮箱:{{ author.email }}</p><p>作者性别:{{ author.gender }}</p><h4>我的其他作品</h4><ul>{% for book in author.book_set.all %}<li><a href="{% url 'book:detail' book.id %}">{{ book.title }}</a></li>{% endfor %}</ul>
    </body>
    </html>

    其案例中 book.id 就是要传入的参数!

4、视图函数所在位置

通常在 APP 应用下的 views.py 中定义视图函数。

二、测试

那我们打印一下视图函数中 request 参数,看看会输出什么内容。

1、视图函数

def test(request):print(request)return HttpResponse('ok')

2、路由

子路由

from django.urls import path
from user.views import index, testurlpatterns = [path('user/', index, name='index'),path('request/', test, name='test'),
]

3、访问

image-20231226154610464

4、查看结果

image-20231226154641095

即返回了 <WSGIRequest: GET '/request/'> 请求对象。

你只需要记住 request 就是一个 HttpResponse 对象即可。

三、属性和方法

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

request 这个 HttpRequest 对象有哪些属性和方法呢?

1、属性

  • path:返回 HTTP 请求的 URL 完整路径;

    注意并不是整个网址,而是路由地址,如果你要获取路由地址及后面的参数可使用 get_full_path() 来获取。

  • method:返回 HTTP 请求的方法,如 GET、POST 等;

  • GET:返回类似字典类型的参数,包含了 GET 请求的所有参数;

  • POST:返回类似字典类型的参数,包含了 POST 请求的所有参数;

  • COOKIES:类似字典,包含了所有 COOKIE;

  • SESSION:类似字典,表示会话;

  • META[‘REMOTE_ADDR’]:获取客户端的 IP 地址,注意 REMOTE_ADDR 不要写错了。

2、方法

  • is_ajax():判断是否是 ajax(),通常用在移动端和 JS 中;
  • get_full_path():返回包含参数字符串的请求路径。

四、案例

1、视图函数

def my_request(request):print(request)# 属性print(request.path)     # 获取请求URL路径print(request.method)   # 获取请求方法,GET、POST、...print(request.GET)      # 获取GET请求的参数(以类似字典的形式)print(request.GET['name'])   # 获取GET请求具体的参数值,但是name如果不存在则会报错,如果有多个name参数,只返回只有一个参数值print(request.GET.get('name', default='匿名用户'))  # 获取GET请求具体的参数值,name如果不存在则不会报错,而会返回None值或你自定义的default值,如果有多个name参数,只返回只有一个参数值print(request.GET.getlist('name'))   # 会以列表的形式返回你指定的所有参数的值,如果有多个name参数,那这些参数的值都会被获取print(request.POST)     # 获取POST请求的参数(以类似字典的形式),如果不是POST请求,则返回{}空字典print(request.COOKIES)  # COOKIE会话技术print(request.session)  # session会话技术print(request.FILES)    # 获取前端上传的文件对象print(request.META['REMOTE_ADDR'])  # 获取客户端IP地址return HttpResponse('ok')

2、路由

from django.urls import path
from user.views import index, my_requesturlpatterns = [path('user/', index, name='index'),path('request/', my_request, name='my_request'),
]

3、请求

http://127.0.0.1:8000/request/?name=lisi&age=18&name=zhangsan&age=55

4、结果

image-20231226163201284

5、浏览器如何查看会话(以谷歌浏览器为例)

image-20231226163513746

—END

这篇关于Django HttpRequest 请求对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/564779

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright