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

相关文章

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

golang 对象池sync.Pool的实现

《golang对象池sync.Pool的实现》:本文主要介绍golang对象池sync.Pool的实现,用于缓存和复用临时对象,以减少内存分配和垃圾回收的压力,下面就来介绍一下,感兴趣的可以了解... 目录sync.Pool的用法原理sync.Pool 的使用示例sync.Pool 的使用场景注意sync.

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM