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

时间:2022-07-25 23:38:11

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

0、URL路由基础

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

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

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

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

  当一个用户请求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中的值,他可以将路径值转换为指定类型的参数。

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

  指定类型包括:

  • 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是要匹配的模式。

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

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

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

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

1、请求:HttpRequest

1.1、获取请求属性

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

2、响应:HttpResponse

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

2.1、返回数据

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

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

2.2、设置响应头

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

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

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

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

2.3、设置返回值类型

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

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

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

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

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

2.4、设置状态码

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

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

2.5、响应JSON数据

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

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

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

  用法如下:

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

Django:学习笔记(4)——请求与响应的更多相关文章

  1. Django 学习第九天——请求与响应

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

  2. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

  3. Django学习笔记(20)——BBS&plus;Blog项目开发(4)Django如何使用Bootstrap

    本文学习如何通过Django使用Bootstrap.其实在之前好几个Django项目中已经尝试使用过了Bootstrap,而且都留有学习记录,我已经大概有了一个大的框架,那么本文就从头再走一遍流程,其 ...

  4. Django学习笔记(18)——BBS&plus;Blog项目开发(2)主体思路及流程

    这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...

  5. Django学习笔记(14)——AJAX与Form组件知识补充(局部钩子和全局钩子详解)

    我在之前做了一个关于AJAX和form组件的笔记,可以参考:Django学习笔记(8)——前后台数据交互实战(AJAX):Django学习笔记(6)——Form表单 我觉得自己在写Django笔记(8 ...

  6. Django学习笔记(五)—— 表单

    疯狂的暑假学习之  Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path         ...

  7. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

  8. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  9. Django学习笔记(4)——Django连接数据库

    前言 在MVC或者MTV设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢?本小节就认真学习一下.首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下 ...

随机推荐

  1. CSS 简介

    CSS 简介 需要具备的基础知识 在继续学习之前,你需要对下面的知识有基本的了解: HTML XHTML CSS 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义 ...

  2. Codeforces Gym 100203I I - I WIN 网络流最大流

    I - I WINTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.acti ...

  3. oracle收集

    1. 高级sql学习——with子句 http://blog.chinaunix.net/uid-10697776-id-2935678.html 2.java List 排序 Collections ...

  4. ASP&period;NET的票据工具类FormsAuthenticationTicket

    票据是asp.net登录验证的一种方式,以前研究过,现在并不使用,今天发现了,记录一下. /*###################票据工具################### * 1.设置< ...

  5. Unity3D 之连按移动加速

    上代码: 效果是连续按W后,加速移动 为物体添加个拖拽效果,方便看运动轨迹. 将下面的脚本绑定到移动的物体上. 不过这里有一点很重要的需要去注意就是该方法不能放在 void FixedUpdate() ...

  6. Servlet再度学习

    虽然Servlet已经使用很多了,但是一直都仅局限在其使用操作上. 最近有空想对它进行一个相对全面的了解. 下面是博主整理的一篇博文. 一.Servlet简介 Servlet(Server Apple ...

  7. OGG文件获取创建日期

    转载:http://blog.sina.com.cn/s/blog_b0ed98070102v1tr.html 搜索关键字: OGG文件的数据结构以及读取其注释信息的代码 实例说明: "DA ...

  8. hermes kafka 转http rest api 的broker 工具

    hermes 与nakadi 是类似的工具,但是设计模型有很大的差异,hermes 使用的是webhook的模式(push) nakadi 使用的是pull(event stream),各有自己解决的 ...

  9. RedMine Email notifications configure for MS Exchange

    Boss需要用到RedMine(project management) open source. 由于不熟悉MS的SMTP服务,BOSS说他配好了,然后配置到Email notification时候, ...

  10. python模块学习&lpar;二&rpar;

    configparser模块 软件常见文档格式如下: [DEFAULT]ServerAliveInterval = 45Compression = yesCompressionLevel = 9For ...