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实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...
随机推荐
- Boost.JSON Boost的JSON解析库(1.75首发)
目录 目录 Boost的1.75版本新库 JSON库简介 JSON的简单使用 编码 最通用的方法 使用std::initializer_list json对象的输出 两种对比 解码 简单的解码 增加错 ...
- 工具-Git与GitHub-安装以及基本操作(99.5.1)
@ 目录 1.安装 2.使用 3.工作区和版本库 关于作者 1.安装 1.windows安装 安装后添加环境变量 2.linux安装 sudo apt-get install git 2.使用 1.常 ...
- Numpy的学习4-array的合并
import numpy as np A = np.array([1, 1, 1]) B = np.array([2, 2, 2]) print(np.vstack((A, B))) # vertic ...
- 附029.Kubernetes安全之网络策略
目录 环境构建 基础环境构建 网络测试 安全策略 策略配置 策略测试 ingress方向测试 egress方向测试 to和from行为 默认策略 环境构建 基础环境构建 [root@master01 ...
- python菜鸟教程学习:数据结构
列表方法 list.append(x):把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]. list.extend(L):通过添加指定列表的所有元素来扩充列表,相当于 a[len( ...
- 【Windows系统常用命令集合】
查看建立的TCP连接:netstat -n 查看建立的TCP连接的进程:netstat -nb 查看本机侦听的端口: netstat -an (说明:如果端口没有侦听 检查服务) 测试到远程计算机的某 ...
- RxJava +Retrofit 简单使用
1.添加依赖 compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter ...
- Base 128 Varints 编码(压缩算法)
Base 128 Varint可以说是一种编码方式,也可以说是一种压缩算法.这种压缩算法是用来压缩数字的传输的,压缩的依据是基于一个现实:越小的数字,越经常使用 我们来看看一个例子: 如果我们要网络传 ...
- [剑指 Offer 11. 旋转数组的最小数字]
[剑指 Offer 11. 旋转数组的最小数字] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5, ...
- C++编译过程概述
一 ---导读 想象成工厂要产出一个产品的过程,经过流水线上一步一步,不同的人的操作,然后经过整合,就得到了一个完整可用的产品. 二---编译过程图解 三---在linux中编程详解编译过程 当我们在 ...