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. jdk8对象集合转map集合

    package koukay.Controller.Controllers; import koukay.Portal.webservices.Entity.User; import com.fast ...

  2. Linux 源码编译安装软件

    程序包编译安装的步骤: 源代码-->预处理-->编译-->汇编-->链接-->执行 多文件:文件中的代码之间,很可能存在跨文件依赖关系 1.编译源码的项目工具 使用相关的 ...

  3. Python-基础知识汇集

    1.列表 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可 代码理解:列表 ...

  4. 阿里云体验有奖:使用PolarDB-X与Flink搭建实时数据大屏

    体验简介 场景将提供一台配置了CentOS 8.5操作系统的ECS实例(云服务器).通过本教程的操作带您体验如何使用PolarDB-X与Flink搭建一个实时数据链路,模拟阿里巴巴双十一GMV大屏. ...

  5. this关键字、static关键字、方法的调用

    1.带有static关键字的方法,不可使用this关键字.因为其调用方法为类名.方法名(建议这种方式,调用不需要对象的参与),不存在对象. 2.实例方法调用必须有对象的存在,先创建对象,通过引用.的方 ...

  6. 【Python基础教程】三种常用、效率最高的Python字符串拼接方法

    python字符串连接的方法,一般有以下三种: **方法1:**直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39; ...

  7. 疫情在校学生之——用python对某校园热水服务app进行测试,实现自动免费用水(仅供参考)

    写在前面的过场话: 本文只是对某校园热水服务app做个测试,其实本人并没有做大坏事,并未传播相关技术,文章以下内容的敏感部分会打码,并且相关厂商已经正在进行漏洞修复,大家看看就好.文章后会提供&quo ...

  8. Nacos配置失败(java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all server)

    解决: nacos服务器过载,可以删掉nacos文件夹下的data文件夹,重新启动.

  9. 5-17 ELK 日志采集查询保存

    ELK简介 什么是ELK ELK: E:Elasticsearch 全文搜索引擎 L:logstash 日志采集工具 K:Kibana ES的可视化工具 ELK是当今业界非常流行的日志采集保存和查询的 ...

  10. golang拾遗:自定义类型和方法集

    golang拾遗主要是用来记录一些遗忘了的.平时从没注意过的golang相关知识. 很久没更新了,我们先以一个谜题开头练练手: package main import ( "encoding ...