zoukankan      html  css  js  c++  java
  • 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、极端的方法:错误时,显示 xxwsgirefhandlers.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

  • 相关阅读:
    linux LVM详解
    Mysql SQL优化系列之——执行计划连接方式浅释
    Vue SSR常见问题、异常处理以及优化方案
    vue组件生命周期详解
    axios全局设置url公共请求头
    WebView中JS调用Android Method 遇到的坑整理
    node.js项目多环境配置
    用vue构建多页面应用
    前端系列-移动端开发踩过的一些坑
    Async:简洁优雅的异步之道
  • 原文地址:https://www.cnblogs.com/otome/p/12819489.html
Copyright © 2011-2022 走看看