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. BUUCTF-被劫持的礼物

    被劫持的礼物 看提示用wireshark打开,找登陆流量包,过滤http .login目录的 账号密码加一起MD5小写即可. 1d240aafe21a86afc11f38a45b541a49

  2. awk内置函数、外部变量

    外部变量 ①获取外部变量 格式: awk '{action}' 变量名=变量值 ,这样传入变量可以在action中获得值. 示例: test='awk test'--day-5 外部变量 ①获取外部变 ...

  3. Nginx防御CC攻击

    CC攻击可以归为DDoS攻击的一种.他们之间都原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击.CC攻击又可分为代理CC攻击,和肉鸡CC攻击.代理CC攻击是黑客借助代理服务器生 ...

  4. 令你瞠目结舌的 Python 代码技巧

    0. for-else 在 Python 中,else 不仅可以与 if 搭配使用,还可以与 for 结合. python答疑 咨询 学习交流群2:660193417### for x in rang ...

  5. FDFS上传文件报错 tracker_query_storage fail, error no: 2, error info: No such file or directo

    原因: 1.tracker服务没有启动 2.Storage服务没有启动 解决方案: 输入命令查看这两个服务是否启动,如果没有则表明没有启动.启动即可. netstat -tulnp tracker服务 ...

  6. LeetCode. 812. 最大三角形面积

    812. 最大三角形面积 鞋带公式 鞋带公式,用于计算任意多边形的面积,可用于计算三角形的面积 已知 ΔABC 三个顶点的坐标 A:(x1,y1). B:(x2,y2). C:(x3,y3) 对应的矩 ...

  7. 强化学习-学习笔记8 | Q-learning

    上一篇笔记认识了Sarsa,可以用来训练动作价值函数\(Q_\pi\):本篇来学习Q-Learning,这是另一种 TD 算法,用来学习 最优动作价值函数 Q-star,这就是之前价值学习中用来训练 ...

  8. 160_技巧_Power BI 新函数-计算工作日天数

    160_技巧_Power BI 新函数-计算工作日天数 一.背景 Power BI 2022 年 7 月 14 日更新了最新版本的,版本号为:2.107.683.0 . 更多更新内容可以查看官方博客: ...

  9. 7 什么是dubbo

    什么是dubbo 快速入门dubbo 了解什么是dubbo之前,我们得先了解什么是分布式系统? <分布式系统原理与范型>定义: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像 ...

  10. 吐泡泡_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...