02_Django-路由配置-HTTP协议的请求和响应

视频:https://www.bilibili.com/video/BV1vK4y1o7jH

博客:https://blog.csdn.net/cpen_web


一. 路由配置

settings.py中的 `ROOT_URLCONF` 指定了主路由配置列表 urlpatterns 的文件位置

# file: <项目同名文件夹下>/urls.py
urlpatterns = [
path('page/2003/', views.page_2003_view),
... # 此处配置主路由
]

path()

path()函数

path()函数

导入 - from django.urls import path

语法 - path(route, views, name=None)

参数:

​ 1.route: 字符串类型,匹配的请求路径

​ 2.views: 指定路径所对应的视图处理函数的名称

​ 3.name: 为地址起 别名,在模块中地址反向解析时使用

练习 - 建立一个小网站:

​ 输入网址:http://127.0.0.1:8000, 在网页中输出:这是我的首页

​ 输入网址:http://127.0.0.1:8000/page/1, 在网页中输出:这是编号为1的网页

​ 输入地址:http://127.0.0.1:8000/page/2, 在网页中输出:这是编号为2的网页

http://127.0.0.1:8000
http://127.0.0.1:8000/page/1
http://127.0.0.1:8000/page/2
 <项目同名文件夹下>/urls.py
urlpatterns = [
#http://127.0.0.1:8000
path('', views.index_view),
#http://127.0.0.1:8000/page/1
path('page/1', views.page1_view),
#http://127.0.0.1:8000/page/2
path('page/2', views.page2_view)
] <项目同名文件夹下>/views.py
def index_view(request):
html = '这是我的首页'
return HttpResponse(html) def page1_view(request):
html = '这是编号为1的网页'
return HttpResponse(html) def page2_view(request):
html = '这是编号为2的网页'
return HttpResponse(html)

思考

建立如上一百个网页该怎么办?

例如:

http://127.0.0.1:8000/page/3

http://127.0.0.1:8000/page/4

​ ...

http://127.0.0.1:8000/page/100

path转换器

语法:<转换器类型: 自定义名>

作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数

例子:path(‘page/<int:page>’, view.xxx)

转换器类型:str、int、slug、path

http://127.0.0.1:8000/page/30

 <项目同名文件夹下>/urls.py
urlpatterns = [
#http://127.0.0.1:8000/page/3-100
path('page/<int:pg>', views.pagen_view)
] <项目同名文件夹下>/views.py
def pagen_view(request, pg):
html = '这是编号为%s的网页!'%(pg)
return HttpResponse(html)

练习:小计算器

​ 定义一个路由的格式为:

http://127.0.0.1:8000/整数/操作字符串[add/sub/mul]/整数

​ 从路由中提取数据,做相应的操作后返回给浏览器

​ 效果如下:

​ 输入:127.0.0.1:8000/100/add/200

​ 页面显示结果:300

http://127.0.0.1:8000/100/add/200
结果为:300 <项目同名文件夹下>/urls.py
urlpatterns = [
#http://127.0.0.1:8000/整数/操作符/整数
path('<int:n>/<str:op>/<int:m>', views.cal_view)
] <项目同名文件夹下>/views.py
def cal_view(request, n, op, m):
if op not in ['add', 'sub', 'mul']:
return HttpResponse('Your op is wrong')
result = 0
if op == 'add':
result = n + m
elif op == 'sub':
result = n - m
elif op == 'mul':
result = n * m
return HttpResponse('结果为:%s'%(result))

re_path()

re_path()函数

re_path()函数

在 url 的匹配过程中可以使用正则表达式进行精确匹配

语法:

​ re_path(reg, view, name=xxx)

​ 正则表达式为命名分组模式(?P<name>pattern); 匹配提取参数后用关键字传参方式传递给视图函数

样例
# 可匹配 http://127.0.0.1:8000/20/mul/40
# 不可匹配 http://127.0.0.1:8000/200/mul/400 http://127.0.0.1:8000/10/add/20 -> x:10 op:add y:20 <项目同名文件夹下>/urls.py
from django.urls import path, re_path urlpatterns = [
#http://127.0.0.1:8000/整数2/操作符/整数2
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$', views.cal2_view),
] # \d 整数; \w 字符 <项目同名文件夹下>/views.py
def cal2_view(request, x, op, y):
html = 'x:%s op:%s y:%s'%(x, op, y)
return HttpResponse(html)

练习

访问地址:

http://127.0.0.1:8000/birthday/四位数字/一到两位数字/一到两位数字

http://127.0.0.1:8000/birthday/一到两位数字/一到两位数字/四位数字

最终输出:生日为:xxxx年xx月xx日

效果样例:

​ 输入网址:http://127.0.0.1:8000/birthday/2015/12/11

​ 显示为:生日为:2015年12月11日

​ 输入网址:http://127.0.0.1:8000/birthday/2/28/2008

​ 显示为:生日为:2008年2月28日

http://127.0.0.1:8000/birthday/1992/01/01
生日为1992年01月01日 <项目同名文件夹下>/urls.py
urlpatterns = [
#http://127.0.0.1:8000/birthday/年4/月2/日2
re_path(r'^birthday/(?P<y>\d{4})/(?P<m>\d{1,2})/(?P<d>\d{1,2})$', views.birthday_view),
#http://127.0.0.1:8000/birthday/月2/日2/年4
re_path(r'^birthday/(?P<m>\d{1,2})/(?P<d>\d{1,2})/(?P<y>\d{4})$', views.birthday_view),
] <项目同名文件夹下>/views.py
def birthday_view(request, y, m, d):
html = "生日为%s年%s月%s日"%(y, m, d)
return HttpResponse(html)

Django Day02

请求和响应

GET请求和POST请求

Django的设计模式及模板层

模板层 - 变量和标签

模板层 - 过滤器和继承

url反向解析


二. HTTP协议的请求和响应

定义

​ 请求是指浏览器端通过HTTP协议发送给服务器端的数据

​ 响应是指服务器端接收到请求后做相应的处理后再回复给浏览器端的数据

请求

请求样例

请求样例

请求中的方法

根据HTTP标准,HTTP请求可以使用多种请求方法

HTTP1.0定义了三种请求方法:GET,POST和HEAD方法(最常用)

HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

Django中的请求

请求在Django中实则就是 视图函数的第一个参数,即HttpRequest对象

Django接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象

HttpRequest对象 通过属性 描述了 请求的 所有相关信息

·path_info:URL字符串

·method:字符串,表示HTTP请求方法,常用值:`GET`、`POST`

·GETQueryDict查询字典的对象,包含get请求方法的所有数据

·POST:QueryDict查询字典的对象,包含post请求方式的所有数据

·FILES:类似于字典的对象,包含所有的上传文件信息

·COOKIES:Python字典,包含所有的cookie,键和值都为字符串

·session:似于字典的对象,表示当前的会话

·body:字符串,请求体的内容(POST或PUT)

·scheme:请求协议('http'/'https')

·request.get_full_path():请求的完整路径

·request.META:请求中的元数据(消息头)

​ - request.META['REMOTE_ADDR']:客户端IP地址

http://127.0.0.1:8000/test_request?a=1&b=1
test request ok
终端
path info is /test_request
method is GET
querystring is <QueryDict: {'a': ['1'], 'b': ['1']}>
full path is /test_request?a=1&b=1
[20/Dec/2021 23:27:09] "GET /test_request?a=1&b=1 HTTP/1.1" 200 15 <项目同名文件夹下>/urls.py
urlpatterns = [
path('test_request', views.test_request)
] <项目同名文件夹下>/views.py
def test_request(request):
print('path info is', request.path_info)
print('method is', request.method)
print('querystring is', request.GET)
print('full path is', request.get_full_path())
return HttpResponse('test request ok')

响应

响应样例

响应样例

响应状态码

HTTP状态码的英文为HTTP Status Code

下面是常见的HTTP状态码:

- 200 - 请求成功

- 301 - 永久重定向-资源(网页等)被永久转移到其它URL

- 302 - 临时重定向

- 404 - 请求的资源(网页等)不存在

- 500 - 内部服务器错误

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

Django中的响应对象

构造函数格式:

​ HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)

作用:

​ 向客户端浏览器返回响应,同时携带响应体内容

常用的Conten-Type如下

- 'text/html'(默认的,html文件)

- 'text/plain'(纯文本)

- 'text/css'(css文件)

- 'text/javascript'(js文件)

- 'multipart/form-data'(文件提交)

- 'application/json'(json传输)

- 'application/xml'(xml文件)

------------------------------------------------------------------

HttpResponse子类

http://127.0.0.1:8000/test_request
=> http://127.0.0.1:8000/page/1 <项目同名文件夹下>/urls.py
urlpatterns = [
path('test_request', views.test_request)
] <项目同名文件夹下>/views.py
from django.http import HttpResponse, HttpResponseRedirect def test_request(request):
return HttpResponseRedirect('/page/1')

02_Django-路由配置-HTTP协议的请求和响应的更多相关文章

  1. 老李分享:HTTP协议之请求和响应

    老李分享:HTTP协议之请求和响应   HTTP请求头详解: GET http://www.foo.com/ HTTP/1.1 GET是请求方式,请求方式有GET/POST http://www.fo ...

  2. 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析

    [渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...

  3. HTTP协议的请求和响应学习

    本篇作为学习servlet的前提,http协议是学习JavaWeb开发的基石,不深入了解http协议,就不能说掌握了JavaWeb开发. HTTP协议有两个版本:HTTP1.0和HTTP1.1,那么有 ...

  4. 【HTTP】HTTP协议的请求与响应

    创建时间:6.14 http协议 的位置 1.HTTP是什么 超文本传输协议(HyperText Transfer Protocol) 2.Http协议的组成 Http协议由Http请求和Http响应 ...

  5. #WEB安全基础 : HTTP协议 | 0x10 请求和响应报文重点结构及常见头部

    你需要认识一些常见的头部以及了解报文的详细结构 请求报文的请求行 GET/HTTP/1.1 响应报文的响应行 HTTP/1.1 200 OK 想必这些大家都知道了 请求 我访问一个页面 Host // ...

  6. Core3.0路由配置

    前言 MSDN文档,对ASP.NETCore中的路由完整的介绍 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?vi ...

  7. HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端

    协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...

  8. Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、session

    Flask框架(二)—— 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 ...

  9. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

随机推荐

  1. mysql调优学习笔记

    性能监控 使用show profile查询剖析工具,可以指定具体的type 此工具默认是禁用的,可以通过服务器变量在绘画级别动态的修改 set profiling=1; 当设置完成之后,在服务器上执行 ...

  2. 关于Node.js 链接mysql超时处理(默认8小时)

    备注:这是在pm2配置node环境下,超过8小时mysql自动关闭的情况下出现的解决方法:1.封装mysql.js var mysql = require('mysql'); var connecti ...

  3. SAP 实例 3 Context Menus

    REPORT demo_dynpro_context_menu. DATA: field1 TYPE i VALUE 10, field2 TYPE p DECIMALS 4. DATA: prog ...

  4. 不同network中的两个docker容器

    1. 创建docker网络 docker network create --subnet 172.18.0.1/16 test docker network ls 2. 创建两个容器指定docker ...

  5. 【python基础】第06回 运算符和流程控制 1

    本章内容概要 1.运算符 2.流程控制 本章内容详解 1.运算符 什么是运算符? 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是" ...

  6. NC20241 [SCOI2005]扫雷MINE

    NC20241 [SCOI2005]扫雷MINE 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 \(n \times m\) 的矩阵里面有一些雷,要你根据一些信息找出雷来. 万圣节到了 ,&q ...

  7. 关于vm虚拟机的问题

    这几天搞虚拟机搞的头疼,真是一步一个坑,总结以下几个问题: 安装不了或用户不接受协议:原因应该是你之前装过vm,没有彻底清理,和本次安装形成了对抗,所以我们需要安装WindowsInstallerCl ...

  8. P3480 [POI2009]KAM-Pebbles 题解

    题目链接 首先,这道题看上去就是个博弈论,很显然的 \(Nim\) 游戏. 因为每一个的取法都和它的上一位有关. 有一种非常显然的转换方式 :我们把这若干堆石子从前向后做一个差分 . 我们记 \(a_ ...

  9. Tomcat深入浅出——Servlet(三)

    零.HttpServletRequest 上一篇已经介绍了这个接口,现在补充些内容 首先介绍一下作用域: jakarta.servlet.jsp.PageContext pageContext 页面作 ...

  10. Vue3系列2--项目目录介绍及运行项目

    1 Vite项目目录 用Vscode打开创建的项目,看到下面的目录结构: 通过运行  npm install 初始化项目后生成两个初始化文件:node_modules和 package-lock.js ...