【django】HttpRequest对象的属性和路由补充

news2024/9/27 9:29:53

在这里插入图片描述


文章目录

  • 一、HttpRequest对象的常用属性
    • 1、request.GET:获取查询字符串参数
      • 案例:
      • 特别注意:
    • 2、request.POST:post请求数据,只能获取表单参数
    • 3、request.body:请求body,响应结果为字节类型
    • 4、request.method:获取请求方法
    • 5、request.user:获取当前访问的用户
    • 6、request.path:当前请求路径
    • 7、request.encoding:当前编码方式
    • 8、request.FILES:客户端上传的文件
    • 9、request.headers:客户端传递的请求头
  • 二、路由
    • 1、路径转换器
      • str(多):默认就是使用字符串类型的,匹配除了路径分隔符/之外的任何非空字符串
        • 案例:
      • int(多):匹配0或者任意整数。并且返回的参数也是整数类型
        • 案例
      • slug:匹配任何由ascii字符或者数字、下划线组成的
      • uuid:匹配格式化的uuid
      • path:匹配任何非空字符,包含路径分隔符
    • 2、正则路由匹配re_path
      • 案例:不分组命名
      • 案例:分组命名

一、HttpRequest对象的常用属性

1、request.GET:获取查询字符串参数

/crm/login?name=kobe&age=22
查询字符串参数:问号后面的key=value表示查询字符串参数。

路径参数表示:path('students/int:year/int:mouth/
路径参数在视图函数中用形式参数接收
get(self,request,mouth,year):

如果查询字符串参数中多个相同的参数,用get获取的是最后一个参数
可以采用getlist来进行获取多个相同的参数

案例:

http://127.0.0.1:8000/crm/login?name=kobe&age=22&name=zilv
print(self.request.GET.get('name',None))			zilv
print(self.request.GET.getlist('name','age'))		['kobe', 'zilv']

特别注意:

在drf框架中获取查询字符串参数也使用:request.query_params和request.GET

2、request.POST:post请求数据,只能获取表单参数

在这里插入图片描述

3、request.body:请求body,响应结果为字节类型

self.request.body

输出结果:

b'{\r\n    "name":"kobe",\r\n    "age":18\r\n}'

解码后并转化为字典格式的数据:

value=json.loads(self.request.body.decode(encoding='utf-8'))

输出结果

{'name': 'kobe', 'age': 18}

4、request.method:获取请求方法

5、request.user:获取当前访问的用户

6、request.path:当前请求路径

7、request.encoding:当前编码方式

8、request.FILES:客户端上传的文件

9、request.headers:客户端传递的请求头

二、路由

1、路径转换器

str(多):默认就是使用字符串类型的,匹配除了路径分隔符/之外的任何非空字符串

path('student/<str:pk>/',views.student_detail)
等同于
path('student/pk',views.student_detail)

案例:

路由:

urlpatterns=[
	path('students/<year>/<mouth>/',views.LoginView.as_view()),
	等同于	
	path('students/<str:year>/<str:mouth>/',views.LoginView.as_view()),
]

视图

class LoginView(View):

    def get(self,request,year,mouth):
        print(year)
        print(mouth)
        return JsonResponse({'year':year,'mouth':mouth})

输出结果:

{
    "year": "2022",
    "mouth": "12"
}

int(多):匹配0或者任意整数。并且返回的参数也是整数类型

案例

http://127.0.0.1:8000/crm/students/2022/dfg/

当传入非数字时:会报错

urlpatterns=[
	path('students/<int:year>/<int:mouth>/',views.LoginView.as_view()),
]

输出结果:

{
    "year": 2022,
    "mouth": 12
}

slug:匹配任何由ascii字符或者数字、下划线组成的

uuid:匹配格式化的uuid

path:匹配任何非空字符,包含路径分隔符

2、正则路由匹配re_path

1、re_path需要导入:from django.urls import path,re_path
路由开头将path替换为re_path
2、括号中以r开头,防止转义
3、路由路径最开始使用^开头:^students:表示路径最开始以students开头
4、路由路径结尾使用$结尾:/$:表示路由以/结尾

案例:不分组命名

当将mouth和year进行调换位置

class LoginView(View):

    def get(self,request,mouth,year):
        print(year)
        print(mouth)
        return JsonResponse({'year':year,'mouth':mouth})

路由

urlpatterns=[
    re_path(r'^students/(\d{4})/([1-9]|1[0-2])/$',views.LoginView.as_view())
]

输出结果:不正常了

{
    "year": "12",
    "mouth": "2022"
}

案例:分组命名

当将mouth和year进行调换位置

class LoginView(View):

    def get(self,request,mouth,year):
        print(year)
        print(mouth)
        return JsonResponse({'year':year,'mouth':mouth})
urlpatterns=[
    re_path(r'^students/(?P<year>\d{4})/(?P<mouth>[1-9]|1[0-2])/$',views.LoginView.as_view())
]

输出结果:

{
    "year": "2022",
    "mouth": "12"
}

在这里插入图片描述

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

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

相关文章

一文搞懂G1垃圾回收器

G1是从JDK9之后的默认垃圾回收器&#xff0c;其功能强大&#xff0c;性能优异&#xff0c;不过目前市面的材料不算多&#xff0c;很多都是抄来抄去&#xff0c;讲得也不太清楚。经过仔细阅读oracle官网以及相关的材料&#xff0c;从整体上梳理了G1的过程&#xff0c;希望这一文…

数据库设计规范详解

对于后端开发人员&#xff0c;建表是个基础活&#xff0c;是地基&#xff0c;如果地基不大牢固&#xff0c;后面在程序开发过程中会带来很多麻烦&#xff0c;在建表的时候不注意细节&#xff0c;等后面系统上线之后&#xff0c;表的维护成本变得非常高&#xff0c;而且很容易踩…

基数排序分析

&#x1f954; 原理介绍&#xff1a; [排序算法] 基数排序 (C) - Amαdeus - 博客园 前述的各类排序方法都是建立在关键字比较的基础上&#xff0c;而基数排序是一种非比较型整数排序算法。它的基本思想是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。 …

单片机基础知识之定时计数器和寄存器

目录 一、定时计数器 二、什么是寄存器 三、定时器如何定时10毫秒 四、定时器编程前寄存器配置计划 五、编程定时器控制LED每隔一秒亮灭 一、定时计数器 1、定时计数器的概念引入 定时器和计数器&#xff0c;电路一样 定时或者计数的本质就是让单片机某个部件数数 当定…

Linux基础------高级IO

文章目录阻塞IO非阻塞IO信号驱动异步IO多路转接&#xff08;核心终点&#xff09;实际上 IO “等” 拷贝 等什么呢&#xff1f; -----> 等待的是内核将数据准备好。 拷贝-------> 数据从内核考到用户 IO话题&#xff1a; 无非就是 1 &#xff0c; 改变等的方式 2 &…

Linux中编译带kafka模块的搜狗workflow开源库

workflow依赖的第三方库 openssl https://github.com/openssl/openssl apt install libssl-dev zlib https://github.com/madler/zlib git clone https://github.com/madler/zlib.git./configuremake -j4 make install lz4 (版本>1.7.5) https://github.com/lz4/lz4 …

C语言:预处理(2)

宏通常被用于执行简单的运算。 宏相比于函数的优势&#xff1a; 1.用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。 2.更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的…

Diffusion Model原理详解及源码解析

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

KubeSphere中间件部署

目录 &#x1f9e1;应用部署总览 &#x1f9e1;中间件部署 MySQL有状态副本集 &#x1f360;KubeSphere创建配置集 &#x1f360;KubeSphere创建存储卷 &#x1f360;KubeSphere创建有状态副本集 &#x1f360;集群访问 &#x1f49f;这里是CS大白话专场&#xff0c;让枯…

Entity Framework Core 代码自动化迁移

简述 文章内容基于&#xff1a;.NET6 Entity Framewor kCore 7.0.* 使用 EF Core 进行 Code First 开发的时候&#xff0c;肯定会遇到将迁移更新到生产数据库这个问题&#xff0c;大多数都是使用命令生成迁移 SQL&#xff0c;然后使用 SQL 脚本将更新迁移到生产数据库的方式&a…

【一起从0开始学习人工智能0x03】文本特征抽取TfidVectorizer

文章目录文本特征抽取TfidVectorizerTfidVecorizer--------Tf-IDFTF-IDF------重要程度文本特征抽取TfidVectorizer 前几种方法的缺点&#xff1a;有很多词虽然没意义&#xff0c;但是出现次数很多&#xff0c;会影响结果&#xff0c;有失偏颇------------关键词 TfidVecoriz…

一篇文章带你搞懂nodeJs环境配置

1、nodeJs下载地址&#xff0c;这里可以选择你想要的版本&#xff0c;我这里以14.15.1为例 2、下载完成后&#xff0c;直接傻瓜式安装即可。 3、打开命令行&#xff08;以管理员身份打开&#xff09;,输入node -v&#xff0c;出现以下版本号&#xff0c;代表node成功安装 4、在…

html+css设计两个摆动的大灯笼

实现效果 新年马上就要到了&#xff0c;教大家用htmlcss设计两个大灯笼&#xff0c;喜气洋洋。 html代码&#xff1a; html代码部分非常简单&#xff0c;将一个灯笼分成几部分进行设计&#xff0c;灯笼最上方部分&#xff0c;中间的线条部分和最下方的灯笼穗。组合在一起就…

docker系列教程:docker图形化工具安装及docker系列教程总结

通过前面的学习,我们已经掌握了docker-compose容器编排及实战了。高级篇也算快完了。有没有相关,我们前面学习的时候,都是通过命令行来操作docker的,难道docker就没有图形化工具吗?答案是肯定有的。咱们本篇就来讲讲docker图形化工具及使用图形化工具安装Nginx及docker系列…

读书系列2022(下)读书纪录片

目录 一、认知类 二、纪录片 一、认知类 《蓝海战略》&#xff1a; 让你(企业/个人)在竞争中产生错位竞争&#xff0c;获得优势 《认知盈余》&#xff1a;“人们实际上很喜欢创造并分享”&#xff0c; 参与是一种行为 将人们的自由时间和特殊才能汇聚在一起&#xff0c;共同…

移动Web【字体图标、平面转换[位移,旋转,转换原点,多重转换]、渐变】

文章目录一、字体图标1.1 图标库1.2 下载字体包&#xff1a;1.3 使用字体图标&#xff1a;1.4 使用字体图标 – 类名&#xff1a;1.5 案例&#xff1a;淘宝购物车1.6 上传矢量图&#xff1a;二、平面转换2.1 位移2.1 位移-绝对定位居中2.3 案例2.4 旋转2.5 转换原点2.6 多重转换…

2022年终总结:不一样的形式,不一样的展现

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…

你真的了解表达式求值吗?

表达式求值大家很熟悉特别是整型十进制的表达式求值。那么char类型的表达式求值是怎么样的&#xff1f;Eg&#xff1a;#include <stdio.h>int main() {char a 127;char b 3;char c a b;printf("%d %d %d\n",a,b,c);return 0; }上面程序输出的结果是多少&am…

2022跟学尚硅谷Maven入门(一)纯命令行

2022跟学尚硅谷Maven入门 一 纯命令行Maven从小白到专家应用场景开发过程自动部署私有仓库课程介绍小白目标普通开发人员目标资深开发人员目标第一章:Maven 概述第一节 为什么要学习MavenMaven 作为依赖管理工具(1)jar包的规模(2)jar 包的来源(3)jar包之间的依赖关系Maven 作为…

APSIM练习:播种作物练—高粱作物模拟

在本练习中&#xff0c;您将观察作物在一个季节内的生长情况。您将更多地了解如何使用 APSIM 对施肥率进行“假设”实验。这些技能不仅可以用来试验施肥率&#xff0c;还可以用来试验变量&#xff0c;例如&#xff1a; 种植时间。播种率。作物比较和不同的起始土壤水分条件。 …