zoukankan      html  css  js  c++  java
  • web框架初阶

    第一站

    文件结构:web---

            |--home.py    #页面处理函数

              |--index.py    #主体函数

            |--indexPlus.py  #主体函数加强版

            |--webdaem.py  #通过web访问

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    def index():
        return "resault is home.index"
    
    def home():
        return "resault is home.home"
    
    def dev():
        return "resault is home.dev"
    
    def ftp():
        return "resault is home.ftp"
    
    def nginx():
        return "resault is home.nginx"
    home.py
    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #加载home页面处理模块
    import home
    print "Welcome ......"
    #用户输入请求的页面url
    url = raw_input("url:
    ")
    #根据用户请求的页面调用home模块里的相应的处理函数
    if url == "home/index":
        ret = home.index()
        print ret
    elif url == "home/dev":
        ret = home.dev()
        print ret
    elif url == "home/dev":
        ret = home.dev()
        print ret
    elif url == "home/dev":
        ret = home.dev()
        print ret
    else:
        print "404"
    index

    执行index.py,返回结果如下:

       Welcome ......
       url:
    >>>home/dev
       resault is home.dev
    
       Process finished with exit code 0
    ---------------输入不存在的页面,返回404------------------------
      Welcome ......
      url:
    >>>jlfdsja
      404

      Process finished with exit code 0

    ps:我们可以看到在index.py中,我们是通过if条件判断,遍历整个home中的函数,当页面名==函数名时,调用相应函数,否则返回404.

    思考:我们可不可以通过字符串在home模块中直接获取相应的函数。

    第二站(getaddr)

    以下通过getaddr反射来实现,取代if判断,当home模块增加处理页面的方法时,也不需要修改主体函数index

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import home
    
    print "Welcome to yon ......"
    
    
    url = raw_input("url:
    ")                        #url = home/index
    Controller,action = url.split("/")              #action = 字符串
    func = getattr(home,action)                   #返回一个函数赋给func
    ret = func()
    print ret        
    indexPlus

    涨姿势:hasaddr(),getaddr(),setaddr(),deladdr() 所有操作仅在内存中进行,称为反射!!(对象可以是类,模块等)

    1. import home : 将home模块加载至内存一块空间,我们可称之比喻为一个装有home模块中所有函数名容器。
    2. getaddr(home,"dev") : 通过字符串去home容器中查找其所对应的函数等并返回其在空间中的位置(函数体本身)
    3. hasaddr(home,"index") : 查找容器中是否存在对应的函数,返回True 或者False
    4. dir(home):查看容器中内容
    5. setaddr(home,myfunc,lambda x:x+1) :容器中增加myfunc = lambda x:x+1对象(仅在内存中)
    6. deladdr(home,"dev") : 容器中删除dev函数(仅在内存中)

    改进动态导入模块!

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import home
    print "Welcome to yon ......"
    
    
    url = raw_input("url:
    ")                   #url = home/index
    controller,action = url.split("/")          #action = 字符串
    mod = __import__(controller)               #动态导入模块,等同于import 模块名
    func = getattr(mod,action)                  #返回一个函数赋给func
    ret = func()
    print ret

    第三站(web实现)

    #!/usr/bin/env python
    #-*- encoding:utf-8 -*-
    from wsgiref.simple_server import make_server
    
    
    def RunServer(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        url = environ["PATH_INFO"]
    
        #http://localhost:8000/home/dev 取"dev",令temp = "dev"
    
        temp = url.split("/")[1]
        #导入home模块
        import home
        #去home中查找,是否含有指定的函数
        is_exist = hasattr(home,temp)
        #如果存在指定函数,获取函数,执行并返回值
        if is_exist:
            #获取函数
            func = getattr(home,temp)
            #执行并获取返回值
            ret = func()
            #将函数返回值响应给请求者
            return ret
        else:
            #指定函数不存在,返回404
            return "404 not found!"
    
    
    if __name__ == '__main__':
        httpd = make_server('', 8000, RunServer)
        print("Serving HTTP on port 8000...")
        httpd.serve_forever()

    运行webdaem.py,并通过浏览器访问,terminal显示:

    Serving HTTP on port 8000...
    127.0.0.1 - - [05/Jun/2017 14:12:29] "GET /index HTTP/1.1" 200 21
    127.0.0.1 - - [05/Jun/2017 14:12:40] "GET /nginx HTTP/1.1" 200 21
    127.0.0.1 - - [05/Jun/2017 14:13:26] "GET /nginx HTTP/1.1" 200 21
    127.0.0.1 - - [05/Jun/2017 14:13:27] "GET /nginx HTTP/1.1" 200 21
    127.0.0.1 - - [05/Jun/2017 14:16:35] "GET /sjlfl HTTP/1.1" 200 14

    浏览器请求显示:

     

  • 相关阅读:
    mvc:resources配置说明
    MySQL 表与索引损坏修复
    ORACLE 日志损坏 使用"_ALLOW_RESETLOGS_CORRUPTION"进行崩溃恢复
    Oracle 回滚段坏快并恢复
    Oracle 坏快处理:Undo 与 datafile
    Oracle备份恢复-控制文件损坏的各种场景恢复专题
    Oracle备份恢复-redo文件损坏的各种场景恢复专题
    Oracle 数据库坏块处理技术
    PostgreSQL 坏快分类与修复策略
    Linux RAID卡优化
  • 原文地址:https://www.cnblogs.com/chbo/p/6944693.html
Copyright © 2011-2022 走看看