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

 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()
主程序
 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>'
Controllers
1 <h1>&&t&&</h1>
Views

 


其中,views如果没有需要替换的 可以直接用 open(xx,'rb') 以二进制直接读取,
如果其中内容需要替换,则需要先用open(xx,encoding='utf-8') 读出(不然等下转码的时候可能出现问题),
然后进行替换 data=data.replace(x1,x2) x1替换成x2 然后 data = data.encode('gbk') return data

posted @ 2020-05-02 20:54  otome  阅读(222)  评论(0编辑  收藏  举报