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实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...
随机推荐
- webpack配置css-loader
执行 npm init 命令 生成 package.json 文件 在 webstorm 项目中局部安装 webpack(比如安装3.6.0版本) npm install webpack@3.6.0 ...
- sqli-labs 20-22 --cookie注入
异常处理 一开始打开这个题目的时候找不到cookie... 登录成功就是没有cookie cookie注入没有cookie... 第二天重新做的时候,同学讲自己设置cookie可以用 用插件EditT ...
- Java线程池二:线程池原理
最近精读Netty源码,读到NioEventLoop部分的时候,发现对Java线程&线程池有些概念还有困惑, 所以深入总结一下 Java线程池一:线程基础 为什么需要使用线程池 Java线程映 ...
- Autofac官方文档翻译--一、注册组件--4组件扫描
官方文档:http://docs.autofac.org/en/latest/register/scanning.html Autofac 组件扫描 在程序集中Autofac 可以使用约定来找到并注册 ...
- JAVA数据结构(十一)—— 堆及堆排序
堆 堆基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,最坏,最好,平均时间复杂度都是O(nlogn),不稳定的排序 堆是具有以下性质的完全二叉树:每个节点的值都大于或等 ...
- MongoDb二
获取集合的时候,可以传入bean的class文件.来实现数据的绑定.在这之前.需要自定义一个Codec类.进行数据的转换. MongoClient client=new MongoClient(new ...
- Redis缓存篇(四)缓存异常
这一节,我们来学习一下缓存异常.缓存异常有四种类型,分别是缓存和数据库的数据不一致.缓存雪崩.缓存击穿和缓存穿透. 下面通过了解这四种缓存异常的原理和应对方法. 缓存和数据库的数据不一致 缓存和数据库 ...
- Lesson_strange_words1
time-between system 分时操作:分时系统 secondary 辅助的,从属的 establish 已确立的 capability 功能 formerly 之前的 combine 结合 ...
- VsCode配置Go语言插件
前言 宇宙第一IDE对于笔记本来说还是太过沉重了 VsCode虽然差了点但是胜在插件多且够轻量 VsCode的安装/汉化参考我之前的博客 https://www.cnblogs.com/chnmig/ ...
- Django中一种常见的setting与账密保存/读取方式
前言 在查看别人Django代码的时候,发现很多的manager文件都是类似于 #!/usr/bin/env python import os import sys if __name__ == '_ ...