Django:学习笔记(4)——请求与响应
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可序列化对象。否则会报类型错误。
用法如下:

Django:学习笔记(4)——请求与响应的更多相关文章
- Django 学习第九天——请求与响应
一.HttpRequest 对象: 服务器接收到http协议的请求后,会根据报文创建 HttpRequest 对象视图函数的第一个参数是HttpRequest 对象再django.http 模块中定义 ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- Django学习笔记(20)——BBS+Blog项目开发(4)Django如何使用Bootstrap
本文学习如何通过Django使用Bootstrap.其实在之前好几个Django项目中已经尝试使用过了Bootstrap,而且都留有学习记录,我已经大概有了一个大的框架,那么本文就从头再走一遍流程,其 ...
- Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程
这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...
- Django学习笔记(14)——AJAX与Form组件知识补充(局部钩子和全局钩子详解)
我在之前做了一个关于AJAX和form组件的笔记,可以参考:Django学习笔记(8)——前后台数据交互实战(AJAX):Django学习笔记(6)——Form表单 我觉得自己在写Django笔记(8 ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- Django 学习笔记(二)
Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...
- Django学习笔记(9)—— 开发用户注册与登录系统
一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...
- Django学习笔记(4)——Django连接数据库
前言 在MVC或者MTV设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢?本小节就认真学习一下.首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下 ...
随机推荐
- java 线程之间的协作 wait()与notifyAll()
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- idea传入HttpServletRequest时显示cannot resolve symbol的问题
在使用idea ide的时候,在控制器中我需要获取HttpServletRequest这个request对象,编译时出现cannot resolve symbol的问题,然后网上查找资料,这里记录一下 ...
- pl/sql 实例精解 08
1: EXCEPTION 2: WHEN EXCEPTION_NAME THEN 3: ERROR-PROCESSING STATEMENTS; 写在 begin 与 end 的之间的处理异常块. 常 ...
- Oracle 计算两个时间的差值
有两个日期数据START_DATE,END_DATE,欲得到这两个日期的时间差(以天,小时,分钟,秒,毫秒):天:ROUND(TO_NUMBER(END_DATE - START_DATE))小时:R ...
- 命令行执行php
D:\software\phpStudy\php55
- 可以输入也可以下拉选择的select
网址:http://www.helloweba.com/view-blog-348.html 示例:http://www.helloweba.com/demo/2016/editable-select ...
- 【BZOJ2259】[Oibh]新型计算机 最短路
[BZOJ2259][Oibh]新型计算机 Description Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计 ...
- 隐藏内容但仍保持占位的css写法
通常显示和隐藏内容都会用display:block;和display:none; 如果想要保持内容的占位可以用visbility:visible; 和visiblity:hidden;来控制内容的显示 ...
- 170227、java分布式系统开关功能设计(服务升降级)
首先讲一下开关的由来,例如东京在6月18日做店庆促销活动,在交易下单环节,可能需要调用A.B.C三个接口来完成,但是其实A和B是必须的,C只是附加的功能(例如在下单的时候做一下推荐),可有可无,在平时 ...
- fastJson API
FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能. 实际上其他的json处理工具都和 ...