web.py小記


what's the web.py

  相比於 Django 和 Flask,web.py 是輕量到不能再輕量的 web 框架,所有的功能都需要自己實現,所有不適合中大型 web 的開發,不過對於簡單的 api 服務或 web 展示,倒是很友好。

安裝

pip install web.py==0.40-dev1 # 一定要加==后面的dev,版本號一般選最新的

 

快速開始

import web
      
# url  
urls = (
    '/(.*)', 'hello'
)

# 生成一個app
app = web.application(urls, globals())

# url映射的視圖函數接受
class hello:    
    # GET方法    
    def GET(self, name):
        if not name: 
            name = 'World'
        return 'Hello, ' + name + '!'
    # POST方法    
    def POST(self, name):
        if not name: 
            name = 'World'
        return 'Hello, ' + name + '!!!'
    

if __name__ == "__main__":
    app.run()

此時運行這個文件,瀏覽器訪問localhost:8080就可以得到hello world的頁面(端口默認為8080) 

 

URL 映射

URL映射有3種類型:

  1. URL完全匹配
    '/index','Index' # 由Index類處理 http://127.0.0.1:8080/index


  2. URL模糊匹配
    '/post/\d+','Post' # 由Post類處理 如http://127.0.0.1:8080/post/3,post/后面帶一個數字的URL
  3. URL帶組匹配
    '/post2/(\d+)','Post2' # Post2類處理 如http://127.0.0.1:8080/post2/3,post2/后面帶一個數字的URL,Post2類會接受處理url post2后面的參數。而模糊匹配的方式是不處理參數的


調試

  web.py 本身提供調試的工具。在最后的“if name …” 代碼前面添加:
web.webapi.internalerror = web.debugerror
 

  並在最后的“if name …” 添加”web.reloader“:

if __name__ == "__main__": web.run(urls, globals(), web.reloader)

  調試的階段能得到更多有用的信息。web.reloader 其實是一個中間件,在運行時如果修改了py文件,web.reloader 會重新加載文件,在瀏覽器上立刻可以看到變化。不過變化較大時最好還是需要重新啟動服務器。web.py 也提供web.profiler ,可以輸出有用的信息,有關每個頁面的每個函數調用的次數,有助於改善代碼。

 

跨域

  web.py默認是不支持跨域請求的,解決方法是加一個鈎子

# 實現一個函數
def customhook():
    web.header('Access-Control-Allow-Origin', '*')
    web.header('Access-Control-Allow-Headers', 'Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers, X-Requested-By, Access-Control-Allow-Methods') # 自己生命的請求頭中加的東西都放到這個字符串里來
    web.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE')


app.add_processor(web.loadhook(customhook))

  同時在視圖函數中實現一個 OPTIONS 方法

def OPTIONS(self):
        pass

 

 

 

 

 

                         

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM