2013-05-12 190 views
0

我想使用webapp2創建一個簡單的應用程序。因爲我已經安裝了Google App Engine,並且我想在GAE之外使用它,所以我按照此頁面上的說明操作:http://webapp-improved.appspot.com/tutorials/quickstart.nogae.html無法使用virtualenv和webapp2訪問網絡服務器資源

這一切都很順利,我的main.py正在運行,它正在正確處理請求。但是,我無法直接訪問資源。

http://localhost:8080/myimage.jpghttp://localhost:8080/mydata.json

總是返回404資源找不到網頁。 如果將資源放在WebServer/Documents /或virtualenv處於活動狀態的文件夾中,則無關緊要。

請幫忙! :-)

(我在Mac上10.6與Python 2.7)

+0

[This](http://webapp-improved.appspot.com/tutorials/gettingstarted/staticfiles.html)可能是你要找的。 – 2013-05-12 09:08:42

+0

是的,歡呼聲。我也在研究這個問題,但到目前爲止它並不工作。我將編輯該問題。 – devboell 2013-05-12 09:16:40

+1

您鏈接到的文檔是用於不使用GAE的webapp2 - 您使用它還是不使用?如果沒有,那麼app.yaml不適用... – Greg 2013-05-12 11:04:47

回答

2

(從this question改編)

看起來webapp2的沒有一個靜態文件處理程序;你將不得不推出自己的。這裏有一個簡單的一個:

import mimetypes 

class StaticFileHandler(webapp2.RequestHandler): 
    def get(self, path): 
     # edit the next line to change the static files directory 
     abs_path = os.path.join(os.path.dirname(__file__), path) 
     try: 
      f = open(abs_path, 'r') 
      self.response.headers.add_header('Content-Type', mimetypes.guess_type(abs_path)[0]) 
      self.response.out.write(f.read()) 
      f.close() 
     except IOError: # file doesn't exist 
      self.response.set_status(404) 

而在你app對象,添加一個路線StaticFileHandler

app = webapp2.WSGIApplication([('/', MainHandler), # or whatever it's called 
           (r'/static/(.+)', StaticFileHandler), # add this 
           # other routes 
           ]) 

現在http://localhost:8080/static/mydata.json(比方說)將加載mydata.json

請記住,此代碼是潛在的安全風險:它允許您的網站的任何訪問者讀取靜態目錄中的所有內容。因此,您應該將所有靜態文件保存到不包含任何您想要限制訪問權限的目錄(例如源代碼)。

+0

感謝您回覆此問題。我想我現在明白了。因此,webapp2實際上也是一個web服務器,它捕獲端口8080上的所有請求,繞過標準(apache)請求處理,並將其留給程序員以提供處理http請求的實現。因此,即使由觸發的基本GET請求在webapp2中也沒有默認實現。這取決於程序員提供它。我總結正確嗎? – devboell 2013-05-13 07:37:00

+0

就webapp2而言,這是正確的。不知道Apache的默認處理,所以不能評論。 – 2013-05-13 07:38:33