Django-http协议
Http协议:超文本传输协议(应用层程序)。它是客户端和服务端请求和应答的标准。
Http的请求响应模型:
1.客户端连接到web服务器
一个http客户端,与web服务器的http端口(默认是80)建立了一个tcp的套接字连接。
2.发送http请求
通过tcp套接字,客户端向web服务器发送了一个文本的请求报文,报文由请求行,
请求头,空行和请求数据4部分组成
3.服务器接受并且返回http相应
web解析请求,定位请求资源再以报文的形式重新发回去给客户端。报文由请求行,
请求头,空行和请求数据4部分组成
4.释放连接tcp链接
如果链接关闭,服务器将会主动关闭tcp链接。如果链接模式保持存活,则连接会保持
一段时间,这段时间里面可以持续接收请求
5.客户端解析html的内容
6.域名的背后是ip和端口号。
http的请求方法
1.GET方法
向指定的资源发出显示的请求,要去获取,拿到具体的一个资源
2.POST方法
向指定资源提交数据,请求服务器进行处理,例如提交表单或者上传文件。
3.HEAD方法
http状态码
1xx——请求已经为服务器接收,还需要继续处理
2xx——请求已经为服务器接收,理解并接受(表示是成功的)
3xx——重定向,需要后续操作才能完成这一请求
4xx——请求错误,请求含有语法错误或者无法被执行
5xx——服务器正在处理某个正确的请求时出错
URL
唯一的标识上互联网中的某一个资源
http端口默认80,https端口默认443
URL有一串复杂的查询模块(GET方法窗体),以?开头,&为分隔符,=分开参数名称和数据


最简单的框架:浏览器发出请求,服务器回应些字母显示在浏览器上
from socket import *
ip_port=('127.0.0.1',35038)
devicenum=5
buffer_size=1024
tcp_serve=socket(AF_INET,SOCK_STREAM)#第一个参数代表基于网络通信,第二个参数代表基于tcp协议
tcp_serve.bind(ip_port)
tcp_serve.listen(devicenum)
while 1:
conn,addr=tcp_serve.accept()
print('双向链接时:',conn)
print('客户端地址:',addr) msg=conn.recv(buffer_size)
print('客户端发来的消息是',msg)
conn.send(b'''HTTP/1.1 200 Ok\r\n\r\n
masha
ok
''') #中间的是响应正文
根据浏览器输入不同的路径来返回不同的结果
from socket import *
ip_port=('127.0.0.1',35038)
devicenum=5
buffer_size=2048
tcp_serve=socket(AF_INET,SOCK_STREAM)#第一个参数代表基于网络通信,第二个参数代表基于tcp协议
tcp_serve.bind(ip_port)
tcp_serve.listen(devicenum)
while 1:
conn,addr=tcp_serve.accept() msg=conn.recv(buffer_size)
print(msg)
print('将接收到的按空格进行分割',msg.split())
path=msg.split()[1].decode('utf-8')
print('提取出路径',path) conn.send(b'''HTTP/1.1 200 OK
\r\ncontent-type: text/html; charset=utf-8
\r\n\r\n''')
#第二行charset=utf-8 用于指定编码格式
if path == '/lashi': #如果浏览器输入127.0.0.1:35038/lashi 会显示你去厕所吃饭
conn.send('你去厕所吃饭'.encode('utf-8'))
elif path == '/chifan': #如果浏览器输入127.0.0.1:35038/chifan 会显示你吃屎
conn.send('你吃屎'.encode('utf-8'))
else: #如果浏览器输入127.0.0.1:35038/其他 会显示无操作
conn.send('无操作'.encode('utf-8'))
conn.close()
根据浏览器输入不同的路径来返回不同的结果(升级版)
from socket import *
ip_port=('127.0.0.1',35038)
devicenum=5
buffer_size=2048
tcp_serve=socket(AF_INET,SOCK_STREAM)#第一个参数代表基于网络通信,第二个参数代表基于tcp协议
tcp_serve.bind(ip_port)
tcp_serve.listen(devicenum) def lashi(path):
return '欢迎进入{}模块'.format(path)
def chifan(path):
return '欢迎进入{}模块'.format(path) list1=[
('/lashi',lashi),
('/chifan',chifan),
] while 1:
conn,addr=tcp_serve.accept() msg=conn.recv(buffer_size)
print(msg)
print('将接收到的按空格进行分割',msg.split())
path=msg.split()[1].decode('utf-8')
print('提取出路径',path) conn.send(b'''HTTP/1.1 200 OK
\r\ncontent-type: text/html; charset=utf-8
\r\n\r\n''')
#第二行charset=utf-8 用于指定编码格式
func=None
for i in list1:
if path == i[0]:
func=i[1]
break
if func: #如果func不等于none
jieguo=func(path)
else:
jieguo='无操作'
conn.send(jieguo.encode('utf8'))
print(jieguo)
conn.close()
根据地址来返回html
里面的html
<html lang="'en">
<head>
<meta charset='utf-8'>
<title>Title</title>
</head>
<body>
<h1>欢迎回家</h1>
</body>
</html>
主程序
from socket import *
ip_port=('127.0.0.1',35038)
devicenum=5
buffer_size=2048
tcp_serve=socket(AF_INET,SOCK_STREAM)#第一个参数代表基于网络通信,第二个参数代表基于tcp协议
tcp_serve.bind(ip_port)
tcp_serve.listen(devicenum) def lashi(path):
return '欢迎进入{}模块'.format(path)
def chifan(path):
return '欢迎进入{}模块'.format(path)
def home(path):
with open('home.html','r',encoding='utf8') as f:
ret=f.read()
return ret list1=[
('/lashi',lashi),
('/chifan',chifan),
('/home', home),
] while 1:
conn,addr=tcp_serve.accept() msg=conn.recv(buffer_size)
print(msg)
print('将接收到的按空格进行分割',msg.split())
path=msg.split()[1].decode('utf-8')
print('提取出路径',path) conn.send(b'''HTTP/1.1 200 OK
\r\ncontent-type: text/html; charset=utf-8
\r\n\r\n''')
#第二行charset=utf-8 用于指定编码格式
func=None
for i in list1:
if path == i[0]:
func=i[1]
break
if func: #如果func不等于none
jieguo=func(path)
else:
jieguo='无操作'
conn.send(jieguo.encode('utf8'))
print(jieguo)
conn.close()
动态页面和静态界面:
静态界面指的是写死的,不变的。动态页面指的是向图片啊文本之类的都是放在数据库里,生成网页时时调用数据库资源,可以更换的。
动态页面
dthome里面的
<html lang="'en">
<head>
<meta charset='utf-8'>
<title>Title</title>
</head>
<body>
<h1>当前时间是:@@time@@</h1>
</body>
</html>
主程序
from socket import *
import time
ip_port=('127.0.0.1',35038)
devicenum=5
buffer_size=2048
tcp_serve=socket(AF_INET,SOCK_STREAM)#第一个参数代表基于网络通信,第二个参数代表基于tcp协议
tcp_serve.bind(ip_port)
tcp_serve.listen(devicenum) def lashi(path):
return '欢迎进入{}模块'.format(path)
def chifan(path):
return '欢迎进入{}模块'.format(path)
def home(path):
with open('home.html','r',encoding='utf8') as f:
ret=f.read()
return ret
def dthome(path):
now=time.asctime() #获取当前时间
with open('time.html','r',encoding='utf8') as f:
ret=f.read() #读取文件放到ret里面
return ret.replace('@@time@@',now) #将文件里面的@@time@@替换成now
list1=[
('/lashi',lashi),
('/chifan',chifan),
('/home', home),
('/dthome',dthome)
] while 1:
conn,addr=tcp_serve.accept() msg=conn.recv(buffer_size)
print(msg)
print('将接收到的按空格进行分割',msg.split())
path=msg.split()[1].decode('utf-8')
print('提取出路径',path) conn.send(b'''HTTP/1.1 200 OK
\r\ncontent-type: text/html; charset=utf-8
\r\n\r\n''')
#第二行charset=utf-8 用于指定编码格式
func=None
for i in list1:
if path == i[0]:
func=i[1]
break
if func: #如果func不等于none
jieguo=func(path)
else:
jieguo='无操作'
conn.send(jieguo.encode('utf8'))
print(jieguo)
conn.close()
Django的安装:
可以输入命令行,先找到python解释器下面的scripts目录
然后输入django-admin startproject 项目名称

Django的启动:
找到django项目里面的manage.py
使用命令行输入python manage.py runserver ip:端口号
setting.py里面的参数行
1.BASE_DIR 是工程文件的根目录
2.DEBUG 是否开启开发模式,一般选择True
3.TEMPLATES 模板,所有html文件应该存放于的位置,如果没有我们要自己建一个
而且setting.py里面的
'DIRS': [os.path.join(BASE_DIR, 'templates')]
一定要弄好templates的路径
4.STATIC_URL:
这个是用来存放css,js等文件的,如果没有static文件夹要自己建
5.STATICFILES_DIRS需要自己加的地方
STATIC_URL = '/static/'
#加在stattic_url后
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
URL.PY里面的写法
sb.html的内容
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="txt/html; charset=utf-8" />
<style>
.city {
float: left;
margin: 5px;
padding: 15px;
width: 300px;
height: 300px;
border: 1px solid black;
}
</style>
</head> <body> <h1>克莱比的小木屋</h1>
<h2>Resize this responsive page!</h2>
<br> <div class="city">
<h2>London</h2>
<p>London is the capital city of England.</p>
<p>It is the most populous city in the United Kingdom,
with a metropolitan area of over 13 million inhabitants.</p>
</div> <div class="city">
<h2>Paris</h2>
<p>Paris is the capital and most populous city of France.</p>
</div> <div class="city">
<h2>Tokyo</h2>
<p>Tokyo is the capital of Japan, the center of the Greater Tokyo Area,
and the most populous metropolitan area in the world.</p>
</div> </body>
</html>
主程序:
from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponse,render def index(request):
#业务
res=HttpResponse('进来的页面时index') #返回自己想要的字符串
return res def sb(request):
return render(request,'sb.html') #返回自己想展示的网页 urlpatterns = [
path('admin/', admin.site.urls), #这一条是自带的
path('index/',index), #这一条是自己写的,如果输入index的界面那么跳转到index函数
path('sb',sb) #这一条是自己写的,如果输入sb的界面那么跳转到sb函数
]
html的模板可以看https://v3.bootcss.com/,找到合适的模板,直接对着浏览器右键然后检查
接着将想要的部分缩好然后复制粘贴就行
Django-http协议的更多相关文章
- 学习Django,http协议,
学习Django http协议 规则 ''' http协议:超文本传输协议 ①基于TCP/IP协议基础上的应用层协议,底层实现仍为socket ②基于请求-响应模式:通讯一定是从客户端开始,服务器端接 ...
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...
- Web项目之Django基础
Django目录: python项目Django(web服务) python项目Django(HTTP协议) python项目Django(Django的安装与使用) python项目Django(U ...
- 使用VirtualBox实现端口转发,以SSH与Django为例
先来认识几个概念 (1)IP地址:又称为互联网协议地址,是计算机的物理地址,相当于计算机的编号,是32位的二进制数,通常被分割成4个8位的二进制数: (2)端口:指设备与外界通讯的接口,一台计算机的端 ...
- Django入门--创建项目及应用
Django是用于后台处理的web应用框架.用户通过浏览器输入网址,向http服务器发起访问网页的请求,http服务器(Apache/Nginx)接收到用户请求后,把请求发送给web应用框架进行处理, ...
- Django学习笔记(http协议与django安装)
Django入门 HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器 ...
- Web 应用 WEB框架 HTTP协议 初识Django
----------------------------财富存在于人的思想里,你没找到路,不等于没有路,你想知道将来要得到什么,你必须知道现在应该先做什么和先放弃什么! [web 应用] web应用 ...
- web 架构 /http协议,状态码,django中常用命令
什么是web应用? web应用 架构 :B/S架构 | C/S架构 网站:BS架构其实就是应用程序: B是浏览器 S是sever(实现了wsgi协议,实现了socket的服务端) + applicat ...
- 使用HTTP协议向服务器传参的方式及django中获取参数的方式
使用HTTP协议向服务器传参的四种方式 URL路径携带参数,形如/weather/beijing/2018; 查询字符串(query string),形如key1=value1&key2=va ...
- Django准备知识-web应用、http协议、web框架、Django简介
一.web应用 Web应用程序是一种可以通过web访问的应用程序(web应用本质是基于socket实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...
随机推荐
- ceph新加存储节点
随着业务的扩展,原有的存储池不够用了,这时我们就需要给ceph添加新的存储节点,这里以新加ceph-host-05节点为例 准备工作 给所有节点hosts文件添加10.30.1.225 ceph- ...
- Python之word文档模板套用 - 真正的模板格式套用
Python之word文档模板套用: 1 ''' 2 #word模板套用2:套用模板 3 ''' 4 5 #导入所需库 6 from docx import Document 7 ''' 8 #另存w ...
- 给因特尔S2600CO服务器主板安装【SAS控制器】驱动
给因特尔S2600CO服务器主板安装[SAS控制器]驱动 1:首先打开[设备管理器]找到未识别驱动的[SAS控制器]双击进入 2:在[详细信息]选项卡,选择[兼容Id]属性可以看到PCI\VEN_80 ...
- PPT技术干货1(上)——设计审美
序言 PPT直接反映了一个人的能力和态度,PPT能直接反映出老板最看重的4个关键能力: 逻辑思维:全局思考,洞察关键 数据思维:数据分析,指导决策 设计思维:美观大方,彰显专业 工作效率:效率高,出活 ...
- CentOS7 实战源码部署php服务与nginx 的整合
简介:实战演练php服务的搭建 PHP是一种脚本语言,常用于做动态网站的. 源码编译安装: 安装依赖组件: yum -y install gcc gcc-c++ bzip2 bzip2-devel b ...
- CentOS7 实战源码部署apache网站服务器
简介:实战演练apache网站服务器的搭建 Apache简介: Apache软件基金会的一个开源免费的网页服务器,也是目前世界上使用最广泛的一种web server , apache最出名的是它跨平台 ...
- Oracle RedoLog-基本概念和组成
Oracle 数据库恢复操作最关键的依据就是 redo log,它记录了对数据库所有的更改操作.在研究如何提取 redolog 中 DML 操作的过程可谓一波三折,因为介绍 redolog 结构细节的 ...
- VS2017+qt5.9的安装
VS2017+qt5.9的安装 运行环境: win7旗舰版+vs2017专业版+qt5.9.2 第一步:安装qt5.9.2 下载qt安装包:下载地址http://mirrors.ustc.edu.cn ...
- 常用的Git命令清单
目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...
- 使用postman添加cookie失败和cookie消失问题
例如 groupId=2; path=/; domain=.www.baidu.com; HttpOnly; Expires=Tue, 16 Jul 2019 03:42:12 GMT; 添加失败和c ...