Python WEB框架的介绍
Python web框架
- 自己实现socket
Tornado
- 基于wsgi
wsgi.run(ip.port)
Django
自己开发web框架:
基于wsgi
1 from wsgiref.simple_server import make_server 2 3 def RunServer(environ,start_response): 4 start_response('200 OK',[('Content-Type','text/html')]) 5 return '<h1>Hello,web!</h1>' 6 7 if __name__ == '__main__': 8 httpd = make_server('',8000,RunServer) # IP,端口,函数名 9 10 print('Serving HTTP on port 8000') 11 httpd.server_forever() # 等待请求到来 ————while true: socket.accept()
但是这个程序不能直接在Python3使用,出现以下情况
1、不是server_forever() 是serve_forever
2、然后就弹出错误,返回的要是byte类型,所以我把'<h1>Hello,web!</h1>'变成b'<h1>Hello,web!</h1>'也不行,
之后我又使用 ret=b'<h1>Hello,web!</h1>' 然后 return ret 的方法,也不行, 补充;可以使用 ret.encode('gbk'),这样也可以
最后 我使用 ret = b'<h1>Hello,web!</h1>' 然后 return [ret] 就可以了 ,这个方法是网上找的,原理不明...
作者貌似也不知道为什么 原地址:https://www.cnblogs.com/Dmail/p/11607378.html
3、极端的方法:错误时,显示 xx\wsgiref\handlers.py 出错,self.write(data),跳转到该行,然后在这行的前面加上data = data.encode(),就可以直接 return '<h1>Hello,web!</h1>'了
MVC/MTV 目录的归类
处理用户请求 放置HTML模板 操作数据库
Controllers Views Modals CVM - MVC
Views Template Modals VTM - MTV
Django -- MTV
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 from wsgiref.simple_server import make_server 2 from controllers import home 3 4 # def index(): # 如果需要处理的用户请求很多,可以放到另外的地方 -- controllers 里的 XX.py 5 # return '<h1>index</h1>' 6 # def login(): 7 # return '<h1>login</h1>' 8 9 urlpatterns = [ 10 ('/index',home.index), 11 ('/login',home.login) 12 ] 13 14 def RunServer(environ, start_response): 15 start_response('200 OK', [('Content-Type', 'text/html')]) 16 # 获取用户的URL,environ,封装了用户的所有请求内容 17 # 路由系统 18 url = environ['PATH_INFO'] 19 20 func=None 21 for item in urlpatterns: 22 if item[0] == url: 23 func = item[1] 24 break 25 26 if func: 27 ret = func() 28 else: 29 ret = b'<h1>404</h1>' 30 31 return [ret] 32 33 34 if __name__ == '__main__': 35 httpd = make_server('', 8000, RunServer) # IP,端口,函数名 36 37 print('Serving HTTP on port 8000') 38 httpd.serve_forever() # 等待请求到来 ————while true: socket.accept()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import time 2 3 def index(): # 如果想要使用HTML模板的话可以直接使用 4 f = open('views/03.html',encoding='utf-8') 5 data = f.read() 6 data=data.replace('&&t&&',str(time.time())) # 如果想要把里面的内容替换成数据库取出来的内容 7 data=data.encode('gbk') 8 return data 9 def login(): 10 return b'<h1>login</h1>'
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <h1>&&t&&</h1>
其中,views如果没有需要替换的 可以直接用 open(xx,'rb') 以二进制直接读取,
如果其中内容需要替换,则需要先用open(xx,encoding='utf-8') 读出(不然等下转码的时候可能出现问题),
然后进行替换 data=data.replace(x1,x2) x1替换成x2 然后 data = data.encode('gbk') return data