web框架
种类:
1.服务端 2.根据不同url返回不同内容 3字串符返回给用户(渲染)
1,2,3===>Tornado
第三方,2,3===>wsgiref--->Django
第三方,2,第三方====>flask
Web应用其实就是一个Socket服务端,用户浏览器就是Socket客户端
实现简单的访问
import socket
sock = socket.socket()
sock.bind(('127.0.0.1', 1234))
sock.listen(5)
while True:
conn, addr = sock.accept()
data = conn.recv(8096)
conn.send(b'index')
conn.close()
访问http://127.0.0.1:1234 就会看到index
实现url功能
import socket
sock = socket.socket()
sock.bind(('127.0.0.1', 1234))
sock.listen(5)
while True:
conn, addr = sock.accept()
data = conn.recv(8096)
# print(data)
data = str(data, encoding='utf-8')
headers,bodys = data.split('\r\n\r\n')
temp_list = headers.split('\r\n')
method, url, protocal = temp_list[0].split(' ')
if url=='/index':
conn.send(b'index')
else:
conn.send(b'not found!')
conn.close()
路由分发
import socket
sock = socket.socket()
sock.bind(('127.0.0.1', 1234))
sock.listen(5)
def index():
return b'index'
def admin():
return b'admin'
routers=[
('/index',index),
('/admin',admin)
]
def run():
while True:
conn, addr = sock.accept()
data = conn.recv(8096)
# print(data)
data = str(data, encoding='utf-8')
headers, bodys = data.split('\r\n\r\n')
temp_list = headers.split('\r\n')
method, url, protocal = temp_list[0].split(' ')
func_name=None
for item in routers:
if item[0]==url:
func_name=item[1]
break
if func_name:
response=func_name()
else:
response=b'404'
conn.send(response)
conn.close()
if __name__ == '__main__':
run()
静态网站
def index():
f=open('index.html','rb')
data=f.read()
f.close()
return data
动态网站
def show():
f=open('show.html','r',encoding='utf-8')
data=f.read()
f.close()
ctime=time.time()
data=data.replace('@@aa@@',str(ctime))
return bytes(data,encoding='utf-8')
使用jinja2渲染
def show2():
f = open('show2.html', 'r', encoding='utf-8')
data = f.read()
f.close()
user_list=[
{'id':1,'name':'tom','email':'tom@qq.com'},
{'id':2,'name':'mary','email':'mary@qq.com'},
{'id':3,'name':'jimmy','email':'jimmy@qq.com'},
]
tom={
'id':1,
'name':'tom',
'email':'tom@qq.com'
}
from jinja2 import Template
template=Template(data)
data=template.render(ss=tom)
return data.encode('utf-8')
show2.html
{{ss.id}}
{{ss.name}}
{{ss.email}}