django基础 -- 1. 前奏 web框架的本质
一. http协议
1.请求方法(get和post)
1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,
如EditBook?name=test1&id=123456.(请求头里面那个content-type做的这种参数形式,后面讲) 2.POST方法是把提交的数据放在HTTP包的请求体中.
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
2.请求协议(格式)
3.响应协议(格式)
4.状态码
二.简单的web框架
1.最简单的(所需文件放在响应目录下)
import socket
server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen() while 1:
conn, addr = server.accept()
from_b_msg = conn.recv(1024).decode('utf-8')
# print(from_b_msg) #客户端的请求内容
# 获得请求文件
path = from_b_msg.split('\r\n')[0].split(' ')[1]
print(path)
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
# conn.send(b'<h1>hello</h1>')
#发送需要的文件
if path == '/':
with open('test.html', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
elif path == '/test.css':
with open('test.css','rb') as f:
data = f.read()
conn.send(data)
conn.close()
elif path == '/timg.jpg':
with open('timg.jpg', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
elif path == '/test.js':
with open('test.js', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
elif path == '/meinv.ico':
with open('meinv.ico', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
2.多线程框架(所需文件放在响应目录下)
from threading import Thread
import socket
server = socket.socket()
# server.bind(('192.168.12.45',8080))
server.bind(('127.0.0.1',8080))
server.listen() def html(conn):
with open('test.html', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
def js(conn):
with open('test.js', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
def css(conn):
with open('test.css', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
def img(conn):
with open('timg.jpg', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
def ico(conn):
with open('meinv.ico', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
urlpatterns=[
('/',html),
('/test.css',css),
('/timg.jpg',img),
('/test.js',js),
('/meinv.ico',ico),
]
while 1:
conn, addr = server.accept()
from_b_msg = conn.recv(1024).decode('utf-8')
print(from_b_msg)
path = from_b_msg.split('\r\n')[0].split(' ')[1]
# print(path)
conn.send(b'HTTP/1.1 200 ok\r\nk1:v1\r\n\r\n')
# conn.send(b'<h1>hello</h1>')
for url_func in urlpatterns:
if url_func[0] == path:
#多线程函数版
t = Thread(target=url_func[1],args=(conn,))
t.start()
# 简单函数版
# url_func[1](conn)
3.多个页面切换和动态效果(所需文件放在响应目录下)
①python文件
from threading import Thread
import socket
server = socket.socket()
# server.bind(('192.168.12.45',8080))
server.bind(('127.0.0.1',8080))
server.listen() import datetime
def base(conn):
with open('base.html','r',encoding='utf-8') as f:
data = f.read()
t1 = datetime.datetime.now()
new_data = data.replace('@xx@',str(t1))
conn.send(new_data.encode('utf-8'))
def index(conn):
with open('index.html', 'rb') as f:
data = f.read()
conn.send(data)
def home(conn):
with open('home.html', 'rb') as f:
data = f.read()
conn.send(data)
def articles(conn):
with open('art.html', 'rb') as f:
data = f.read()
conn.send(data)
urlpatterns=[
('/',base),
('/index',index),
('/home',home),
('/articles',articles),
] while 1:
conn, addr = server.accept()
from_b_msg = conn.recv(1024).decode('utf-8')
print(from_b_msg)
path = from_b_msg.split('\r\n')[0].split(' ')[1]
# print(path)
conn.send(b'HTTP/1.1 200 ok\r\nk1:v1\r\n\r\n')
# conn.send(b'<h1>hello</h1>')
for url_func in urlpatterns:
if url_func[0] == path:
#多线程函数版
t = Thread(target=url_func[1],args=(conn,))
t.start()
# 简单函数版
# url_func[1](conn)
②html文件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap 101 Template</title>
</head>
<body>
<h1 style="color: purple;">欢迎来到王者荣耀页面</h1>
<a href="http://127.0.0.1:8080/index">这是index</a>
<a href="http://127.0.0.1:8080/home">这是home</a>
<h1 style="color: pink;">@xx@</h1> </body>
</html>
4.wsgire模块板web框架
from wsgiref.simple_server import make_server
# wsgiref本身就是个web框架,提供了一些固定的功能(请求和响应信息的封装,
不需要我们自己写原生的socket了也不需要咱们自己来完成请求信息的提取了,提取起来很方便)
#函数名字随便起
def application(environ, start_response):
'''
:param environ: 是全部加工好的请求信息,加工成了一个字典,通过字典取值的方式就能拿到很多你想要拿到的信息
:param start_response: 帮你封装响应信息的(响应行和响应头),注意下面的参数
:return:
'''
start_response('200 OK', [('Content-Type', 'text/html'),('k1','v1')])
# print(environ)
print('>>>>>',environ['PATH_INFO']) #输入地址127.0.0.1:8000,
这个打印的是'/',输入的是127.0.0.1:8000/index,打印结果是'/index'
return [b'<h1>Hello, web!</h1>'] #和咱们学的socketserver那个模块很像啊
httpd = make_server('127.0.0.1', 8080, application) print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
django基础 -- 1. 前奏 web框架的本质的更多相关文章
- day 52 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...
- day 65 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基 ...
- django基础一之web框架的本质
一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
- 01.Django基础一之web框架的本质
一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- python django基础一web框架的本质
web框架的本质就是一个socket服务端,而浏览器就是一个socker客户端,基于请求做出相应,客户端先请求,服务器做出对应响应 按照http协议的请求发送,服务器按照http协议来相应,这样的通信 ...
- Django学习笔记之Web框架由浅入深和第一个Django实例
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- 浅谈网站web框架的本质
一.web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def handle_reques ...
随机推荐
- node.js初识07
之前有说过,nodejs是 没有web容器的,阿帕奇是自带的web容器,如果希望node达到阿帕奇的效果,即http://127.0.0.1:3000/a/b/c.html 出现这样的链接访问页面,所 ...
- linux临时网络配置
1.设置IP地址: ifconfig ens33 192.168.60.231/24 2.添加默认网关路由 $Route add default gw <默认网关地址> 例:#route ...
- CSU 1817 Bones’s Battery Submit(二分+Floyd)
Bones's Battery Submit [题目链接]Bones's Battery Submit [题目类型]二分+Floyd &题意: 有n个点,m条边,从点ui到点vi的费电量是di ...
- Bukkit插件编程之检测玩家受到的伤害是来自投射类武器还是近身武器
package com.sklm.lhb.listener; import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; impo ...
- Hessian---java远程通讯 (zhuan)
http://blog.csdn.net/harderxin/article/details/22669383 (zhuan)
- windows编程之Windows Shell 编程
参考书<VC++ Windows Shell Programming> 这里仅仅是记录下该资源,推荐到下文列出的连接进行查看 用VC++ 进行Windows Shell 扩展编成 ...
- c++ 各种类型转换
1.int 2 string 法1:c++11里面的to_string #include <string> std::); //or auto s = std::to_string(); ...
- Python全栈-day5-数据类型
一.元组 1.元组基础 1)定义:不可变的‘列表’,定义方式(元素1,元素2.......) 2)用途:存多个值,但是只能读不能写 注意:元组的不可变指的是元组内元素id的不可变 t = (11,2, ...
- lua学习之循环求一个数的阶乘
--第3题 利用循环求n的阶乘 --参数检查是否是自然数 function IsNaturalNumber(n) ~= )then return false else return true end ...
- 排序(Sort)-----冒泡排序
声明:文中动画转载自https://blog.csdn.net/qq_34374664/article/details/79545940 1.冒泡排序简介 冒泡排序(Bubble Sort),又 ...