文章目录

  • 一、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"
}

【django】HttpRequest对象的属性和路由补充相关推荐

  1. django form 对象is_bound属性

    问题: 如果判断一个form实例中有没有数据? bug方法: 通过form实例的is_valid()方法来验证 1.Form类的定义 class YourName(Form):your_name = ...

  2. Django视图之HttpRequest对象和HttpResponse对象

    五.HttpRequest对象 回想一下,利用HTTP协议向服务器传参有几种途径? 提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取: 查询字 ...

  3. 【django】HttpRequest对象

    回想⼀下,利⽤HTTP协议向服务器传参有⼏种途径? a.提取URL的特定部分,如/film/zhangsan/20/,可以在服务器端的路由中⽤正则表达式截取: b.查询字符串(query string ...

  4. Django框架——HttpRequest对象

    目录 1.URL路径参数 2.QueryDict对象 3.查询字符串Query String 4.请求体 5.请求头 6.其他 1.URL路径参数 (1)位置参数:使用正则分组,与视图中的参数一一对应 ...

  5. django请求与响应(HttpRequest对象和HttpResponse对象)

    HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpReq ...

  6. Django(part7)--请求及HttpRequest对象

    学习笔记,仅供参考 请求 HTTP请求 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法:GET,POST和HEAD方法(最常用) HTTP1.1新增了五种请求方 ...

  7. 正则,JWT token,容联云,celery,频道组,SKU,SPU,request对象的属性和方法的补充知识

    ?P 正则中分组匹配 [/^!@#$%]  正则中的非!@#¥% ? 非贪婪匹配 + 重复一次,贪婪匹配 re.I   忽略大小写 用户登录: JWT 会话保持?为什么会话保持? 会话保持是负载均衡最 ...

  8. Python Django Views逻辑处理 及 Urls路由规则

    一.Views views模块为MVC中的C--Controller,逻辑处理,是连接MTV中model(数据库数据)与Template(视图模块)的结合,将数据库中的数据显示到视图中 视图的本质就是 ...

  9. Django Response对象3.4

    HttpResponse对象 在django.http模块中定义了HttpResponse对象的API HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建 不调 ...

最新文章

  1. 查看Firefox中的缓存
  2. 电力系统稳定与控制_基于数据驱动的电力系统稳定性分析
  3. 什么是生存分析(survival analysis)?
  4. 解决程序与mysql的乱码问题
  5. 取IDE当前文档所在项目的目录[vs.net2008]
  6. 螃蟹wifi驱动在AP模式下存在挂死系统的问题
  7. java incompatible types: int cannot be converted to java.lang.Long
  8. 线上问题随笔记录数据库连接池问题
  9. C——任意一个偶数分解两个素数
  10. DiscuzNT 1.0正式版推出了
  11. 花书+吴恩达深度学习(十六)序列模型之双向循环网络 BRNN 和深度循环网络 Deep RNN
  12. resolv文件自动配置
  13. sql server 2008 r2 打开ssms管理工具,提示“值不能为空”问题
  14. 收藏+下载!Flink 社区最全学习渠道汇总
  15. vs2008的永久破解安装
  16. 如何进行自学软件测试?
  17. Leetcode刷题95. 不同的二叉搜索树 II
  18. web前端牛人博客整理
  19. 2021-07-26 SEO优化_关键词密度设置算法
  20. RK3399 hi3559A 平台离线语音识别、合成、翻译、声纹

热门文章

  1. 网上爬取股票数据实例
  2. 薅羊毛: 微信小程序开发者可以免费使用验证码短信服务了!
  3. 最近感觉公司的福利还不错
  4. 百度地图api不支持windows平板 双指放大缩小解决方案
  5. 基础sql语句大全(详细解析,注意事项)
  6. pycharm远程调试多个项目出现(Permission denied)
  7. 紫雨老师接触自然法则的经过与故事
  8. Mysql数据库服务
  9. Altium designer 备注手册
  10. 文化出海:承道艺术馆携清代老普洱藏茶「雅贡臻品」参展台北HiFi++“美私奢玩”