默認用Tornado寫程序,修改完代碼需要將文件上傳,然後重啓 Supervisord (supervisorctl reload),修改的程序才能生效。但這樣比較麻煩,因爲需要SSH到服務器進行重啓操作。Tornado自帶的調試模式可以讓我們輕鬆不少。
開啓調試模式也很簡單,只需要 import 一個模塊即可。
1 |
import tornado.autoreload |
現在將修改的文件上傳之後,不需要再重啓,修改的結果就會顯示出來了。
另外也可以在 settings 加入 debug選項:
01 |
import tornado.httpserver |
02 |
import tornado.ioloop |
03 |
import tornado.options |
04 |
import tornado.web |
05 |
06 |
settings = { 'debug' : True } |
07 |
08 |
define( "debug" ,default = True , help = "Debug
Mode" , type = bool ) |
09 |
10 |
def main(): |
11 |
tornado.options.parse_command_line() |
12 |
application = tornado.web.Application([ |
13 |
(r "/" ,
MainHandler), |
14 |
(r "/nowamagic/" ,
NowaMagicHandler), |
15 |
], * * settings) |
16 |
http_server = tornado.httpserver.HTTPServer(application) |
17 |
http_server.listen(options.port) |
18 |
tornado.ioloop.IOLoop.instance().start() |
Tornado 官方教程上的 settings 是這樣的:
01 |
settings = { |
02 |
"cookie_secret" : "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=" , |
03 |
"login_url" : "/login" , |
04 |
"xsrf_cookies" : True , |
05 |
} |
06 |
07 |
application = tornado.web.Application([ |
08 |
(r "/" ,
MainHandler), |
09 |
(r "/login" ,
LoginHandler), |
10 |
], * * settings) |
當然也設置settings字典可以這樣:
1 |
settings = dict ( |
2 |
cookie_secret = "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=" , |
3 |
login_url = "/login" , |
4 |
xsrf_cookies = True , |
5 |
) |
settings可以設置什麼?
01 |
#設置templates路徑: |
02 |
template_path = os.path.join(os.path.dirname(__file__), "templates" ) |
03 |
04 |
#設置靜態文件解析路徑: |
05 |
static_path = os.path.join(os.path.dirname(__file__), "static" ), |
06 |
07 |
#設置防跨站請求攻擊: |
08 |
xsrf_cookies = True , |
09 |
#默認爲False,即不可防禦。 |
10 |
11 |
#設置登陸路徑,未登陸用戶在操作時跳轉會用到這個參數: |
12 |
login_url = "/login-do" , |
13 |
#默認爲@tornado.web.authenticated |
14 |
15 |
#設置調試模式: |
16 |
debug = True , |
17 |
#默認爲False,即不是調試模式。 |
18 |
19 |
#設置cookie密鑰: |
20 |
cookie_secret = "dskfhisdjklagkfdklag;lkjasdklgjkldsjaklgjkldsfksdklf" |
21 |
#默認爲字符串"secure
cookies" |
22 |
23 |
#設置是否自動編碼:在2.0以上需要設置此項來兼容您之前的APP |
24 |
autoescape = None , |
25 |
#不設置默認爲自動編碼。 |
26 |
27 |
#設置template_loader,可以從獨立的路徑中導入template: |
28 |
template_loader = utils.ZipLoader, |
29 |
#其中utils爲自己定義的模塊,ZipLoader是tornado.template.BaseLoader的子類。 |
30 |
31 |
#設置gzip壓縮: |
32 |
gzip = True |
33 |
34 |
#設置靜態路徑頭部: |
35 |
static_url_prefix = "/mystatic/" , |
36 |
#默認是"/static/" |
37 |
38 |
#設置靜態文件處理類: |
39 |
static_handler_class = MyStaticFileHandler, |
40 |
#默認是tornado.web.StaticFileHandler |
41 |
42 |
#設置靜態文件的參數: |
43 |
static_handler_args = { "key1" : "value1" , "key2" : "value2" } |
44 |
#默認爲空字典。 |
45 |
46 |
#設置日誌處理函數 |
47 |
log_function = your_fun, |
48 |
#
日誌處理函數your_fun,按照自己的意圖記錄日誌。 |
調試模式的缺點是:只感知.py文件的改變,模版的改變不會加載,有些特殊的錯誤,比如import的錯誤,就會直接讓服務下線,到時候還得手動重啓。還有就是調試模式和 HTTPServer 的多進程模式不兼容。在調試模式下,你必須將 HTTPServer.start 的參數設爲不大於 1 的數字。