Django:学习笔记(4)——请求与响应

0、URL路由基础

  Web应用中,用户通过不同URL链接访问我们提供的服务,其中首先经过的是一个URL调度器,它类似于SpringBoot中的前端控制器。

  

  它就是一个脚本文件,我们称它为一个URLConf模块,它的样子如下:

  

  当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码提供的算法:

  • 首先,Django确定要使用哪一个URLconf模块。我们可以在setting.py 中进行配置,如ROOT_URLCONF = 'myapi.urls'
  • 接着,Django加载模块内的urlpatterns,他如上所示,是一个列表,基于path()或者re_path()
  • Django 依次匹配每个URL 模式,在与请求的URL 匹配的第一个模式停下来。
  • 一旦其中一个URL模式匹配,Django就会导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。视图传递以下参数:
    • 一个HttpRequest实例。
    • 关键字参数由路径表达式匹配的任何命名部分组成,由django.urls.path()或django.urls.re_path()的可选kwargs参数中指定的任何参数覆盖。
    • 如果匹配的URL模式未返回任何命名组,则正则表达式中的匹配将作为位置参数提供。  
  • 如果没有URL模式匹配,或者在此过程中的任何点期间引发异常,Django将调用适当的错误处理视图。

0.1、URL地址捕获

  我们可以使用<指定类型:名称>捕获URL中的值,他可以将路径值转换为指定类型的参数。

  

  指定类型包括:

  • int:0~N
  • slig:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符
  • uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一个UUID对象;
  • path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。

  当然,我们也可以使用正则表达式来匹配路径。

0.2、正则表达式URL地址捕获

  在Python正则表达式中,命名正则表达式组的语法是(?P <name> pattern),其中name是组的名称,pattern是要匹配的模式。

  

0.3、指定视图参数的默认值

  在视图上直接指定参数的同时可以设置默认值。

  

1、请求:HttpRequest

1.1、获取请求属性

  

2、响应:HttpResponse

  这里主要是展示一些常见的HttpResponse操作。

2.1、返回数据

  HttpResponse对象,可以使用write方法来输出响应信息。

  

2.2、设置响应头

  response可以看做一个字典,可以使用response[''],添加和修改响应头。

  

  一个更常见的例子,设置访问控制的相关响应头信息

  

2.3、设置返回值类型

  在下载文件的情况下,我们就不能返回普通的HTML代码了,content_type用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因

  

  更多的关于content-type可以查看菜鸟教程。

  这里列举几个常见的文件格式:

  

2.4、设置状态码

  设置状态码有两种方式,在声明时定义和直接赋值字段。

  

2.5、响应JSON数据

  JsonResponse是HttpResponse的子类,用于创建JSON格式的响应,语法格式如下:

  

  它的 Content-Type 头默认设置为 application/json.第一个参数 data, 应该是一个 dict 的实例. 如果 safe 参数设置为False ,就不需要必须是dict了,它可以是任何JSON可序列化对象。否则会报类型错误。

  用法如下:

  

转载于:https://www.cnblogs.com/MrSaver/p/10405432.html

Django:学习笔记(4)——请求与响应相关推荐

  1. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  2. Django学习笔记(五)

    Django学习笔记(五) MVC和MTV对比 传统的MVC(Model-View-Controller) M 模型层,主要是对数据库层的封装 V 视图层,向用户展示结果 C 控制层,用于请求,获取数 ...

  3. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  4. 梅科尔工作室-Django学习笔记(二次学习)(3)

    本次学习的是如何用django实现前端鸿蒙OS登录 下面介绍一下本次的操作过程. 1.首先创立MySQL数据并将数据库导入到django当中 其中:导入数据库的操作: 2.配置urls 对应新建的pe ...

  5. VBA 学习笔记 - 网络请求

    VBA 学习笔记 - 网络请求 Microsoft.XMLHTTP MSXML2.serverXMLHTTP.6.0 WinHttp.WinHttpRequest.5.1 参考资料 Microsoft ...

  6. django 学习笔记

    django 学习笔记 启动虚拟机: workon bj18_py3 创建一个项目: django-admin.py startproject mysite 启动开发用服务器:从外层项目 mysite ...

  7. 分享:Django学习笔记(4)---ManyToMany 添加、删除关联、查询

    Django学习笔记(4)---ManyToMany 添加.删除关联.查询 http://my.oschina.net/u/572994/blog/105280

  8. django学习笔记03

    原创博客地址:django学习笔记03 第一章,模型层 查询集API 一.QuerySet何时被提交 迭代 QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询 切片:如果使用切片的&q ...

  9. django学习笔记01

    原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...

  10. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

最新文章

  1. ArcEngine读取数据(数据访问)-转载
  2. elasticsearch 客户端工具_1分钟系列-Elasticsearch 简介与单机版安装
  3. python的工作方向-Python最有发展潜力的方向已出来,是否有你喜欢的职位?
  4. html漂浮在左侧不动,[CSS]CSS练习-悬浮不动侧边栏
  5. 全球及中国燃料乙醇行业产量规模及供需前景分析报告2021-2027年
  6. 用requests爬取一个招聘网站
  7. Java新特性(二)
  8. ad批量走线_AD PCB直角布线批量改为圆角,怎么批量修改呢?
  9. 【文末有福利】量子计算是对计算本质的发现
  10. Python —— 字符串常用操作
  11. 被黑客NeoN“附体” QQ为推产品谎报漏洞
  12. 安装Qemu-6.1.0
  13. php学习去哪,php可以从哪里学习
  14. sparksql对hive操作
  15. hadoop日常维护之问题解决01
  16. java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x01错误解决
  17. 移动端实现同时移动摇杆和摄像机旋转(双/多指触控)
  18. BF算法及KMP算法
  19. 欧几里得(Euclid)算法的Python实现
  20. windows10下使用DNW下载

热门文章

  1. 得到jar包运行时所在的目录
  2. 喜获Arctic Code Vault Contributor勋章,北极代码库贡献者
  3. 同一个JDK,命令行运行,与JNI加载虚拟机,还是有差异
  4. 编译OpenJDK8:OpenJDK8与OpenJDK8u运行结果相差很大
  5. Python输出异常信息(行号)
  6. 想买个这样的笔记本电脑
  7. java not present_Java 8的可选的function.ifPresent和if-not-present的功能风格?
  8. c++ 创建txt,写log
  9. linux g++ gcc
  10. html修改访问量txt,哪位大佬帮我改一下JS谢谢,txt改html网页直接显示的,感激不尽,现在的源码只能看......