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实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...
随机推荐
- 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 ...
- matplotlib的学习14-图中图
# 导入pyplot模块 import matplotlib.pyplot as plt # 初始化figure fig = plt.figure() # 创建数据 x = [1, 2, 3, 4, ...
- Python手把手教程之用户输入input函数
函数input() 函数 input() 让程序暂停运行,等待用户输入一些文本.获取用户输入后,Python将其存储在一个变量中,以方便你使用. 例如,下面的程序让用户输入一些文本,再将这些文本呈现给 ...
- codeblocks opengl glew freeglut 2020.11.15
https://wenku.baidu.com/view/28cd5ebfaf1ffc4fff47accf.html 一下为测试代码 /* ============================== ...
- SpringBoot 的多数据源配置
最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发.代码很简单,下面是实现的 ...
- Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器
一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 ...
- 远程控制卡 使用ipmitools设置ipmi
远程控制卡 使用ipmitools设置ipmi 使用DELL的远程控制卡可以方便的管理服务器 在CentOS中可以使用ipmitools管理 IPMI( Intelligent Platform Ma ...
- Node 跨域问题 Access to XMLHttpRequest at 'http://localhost:8080/api/user/login' from origin 'http://localhost:808
人不可能踏进同一条河流,我可以一天在同一个问题上摔倒两次. 这次是跨域问题,都是泪,教程提供的服务端代码虽然配置了文件,但是依然是没有解决跨域问题,依然报错 Request header field ...
- 数据库表空间收缩之pg_squeeze,pg_repack
数据库表空间收缩之pg_squeeze,pg_repack 目录 数据库表空间收缩之pg_squeeze,pg_repack pg_squeeze1.2 原理 优点 安装 使用 pgstattuple ...
- SpringBoot2.+restful风格请求方式设置以及表单中日期格式设置
1).SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean.@Component)如果有就用用户配置的,如果没有,才自动配置:如果有些组件可以有多个(ViewR ...