今天幫一個學生解決tornado的部署問題,在此記錄了這其中的過程,其中的tornado項目更換爲demo示例。css
開發環境:html
本地開發環境:Win10 + Python3.5.4 + PyCharmpython
線上環境:Centos7.3 + Python3.5.4nginx
1. 首先建立名爲torn_test的虛擬環境 virtualenv --python=python.exe --no-site-packages torn_test # Windows環境使用 2. 啓動虛擬環境,執行這個文件:虛擬環境文件夾下Scripts\activate torn_test\Scripts\activate # 此時你的cmd裏的路徑前應該是這樣的:(torn_test) F:\torn_test> # 退出虛擬環境執行:torn_test\Scripts\deactivate.bat # 此時你的cmd裏的路徑前應該是這樣的:F:\torn_test> 3. 項目依賴模塊下載,cd到torn_test文件夾內 pip install virtualenv pip install requirements pip install tornado # 此時若是你執行pip list就能夠看到這幾個包都被放在虛擬環境裏了,跟外部的大的Python解釋器無關,只要你在激活虛擬 # 環境的狀態,全部的pip都將下載到虛擬環境裏 Package Version ------------ ------- pip 10.0.1 requirements 0.1 setuptools 39.2.0 six 1.11.0 tornado 5.0.2 wheel 0.31.1 4. 在這裏建立tornado項目,項目名爲my_project,其實tornado項目就是一個文件夾 項目的總體目錄結構爲: my_project # 項目文件夾 ├─static # 靜態文件夾,low項目,沒js... │ └─commons.css # css文件 ├─templates # 項目模板文件夾 │ ├─index.html # 主頁 │ └─login.html # login登陸頁 ├─readme # 這個就是本文件啦 ├─requirements.txt # 依賴包管理文件 └─tor.py # 項目主文件 # 項目代碼在稍後的列出... 5. 用requirements記錄全部依賴包及精確版本號 cmd執行cd命令,切換到my_project中,執行: pip freeze > requirements.txt # 此命令就把你全部的依賴包保存到了這個txt文件內 # pip install -r requirements.txt # 此命令下載時依賴模塊時執行 6. 上面沒有問題,就能夠粘貼代碼了
h1{
color: green;
}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"> </head> <body> <h1>循環</h1> <ul> {% for item in user_list %} <li>{{item}}</li> {% end %} </ul> <h1>索引:{{user_list[0] }}</h1> <h1>索引:{{user_dict['id'] }}</h1> <h1>索引:{{user_dict.get('id') }}</h1> <script></script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href='{{static_url("commons.css")}}' rel="stylesheet" /> </head> <body> <h1>用戶登陸</h1> <form method="post"> {% raw xsrf_form_html() %} <input type="text" name="user" /> <input type="text" name="pwd" /> <input type="submit" value="提交"> {{msg}} </form> <script></script> </body> </html>
import tornado.ioloop import tornado.web class LoginHandler(tornado.web.RequestHandler): def initialize(self): pass def get(self): self.render('login.html',msg="") def post(self): # # GET # self.get_query_argument() # self.get_query_arguments() # # POST # self.get_body_argument() # self.get_body_arguments() user = self.get_argument('user') pwd = self.get_argument('pwd') if user == 'wang' and pwd == '666': # self.redirect('http://www.oldboyedu.com') # self.set_cookie('xxxxxx',user) self.set_secure_cookie('xxxxxx',user) self.redirect('/index') return self.render('login.html',**{'msg':'用戶名或密碼錯誤'}) # self.render('login.html',msg = '用戶名或密碼錯誤') class AuthHandler(tornado.web.RequestHandler): def initialize(self): self.username = self.get_secure_cookie('xxxxxx') class IndexHandler(AuthHandler): def get(self): if not self.username: self.redirect('/login') return user_list = ['wang','li'] user_dict = {'id':1,'name':'zhang'} self.render('index.html',user_list=user_list,user_dict=user_dict) settings = { 'template_path':'templates', 'static_path':'static', 'static_url_prefix':'/xxx/', "xsrf_cookies": True, "cookie_secret":'asdfasdfdfdfsdfsdfsdf' } application = tornado.web.Application([ (r"/login", LoginHandler), (r"/index", IndexHandler), ],**settings) if __name__ == "__main__": # 建立socket對象 application.listen(8888) # conn,add = socket.accept() tornado.ioloop.IOLoop.instance().start()
#!/usr/bin/env python # -*- coding:utf-8 -*- #程序啓動的配置 START_CONFIG = { "host": "xxx.xxx.xx.xx", "port": "xxxx", } #日誌的路徑 LOG_CONFIG = { "file_path": "/xxx/xxx/xxx/xxxx/xxx.log", } #rabbitmq的鏈接信息 RABBITMQ_CONFIG = { "host": "xxx.xxx.xx.xx", "port": 1111, "vhost": "/", "user": "xxxx", "passwd": "xxxx", "serverid": "xxxxx", "SEND_EXCHANGE": "xxxxxxx", "RECV_EXCHANGE": "xxxxxxx", } # 數據庫配置 DB_CONFIN = { "host": "xxx.xxx.xx.xx", "port": 3306, "db": "xxx", "user": "xxxxx", "passwd": "xxxxxxx", }
1. OK,代碼粘貼完畢,就在本地測試一遍 運行tor.py 瀏覽器地址欄輸入: http://127.0.0.1:8888/login # 輸入用戶名和密碼後能跳轉就完事了 2. 上面幾步沒有問題的話,本地就算完事了
首先你要有Python3.x的解釋器並配好了環境變量。什麼?連這一步都沒作好?那就先去搞環境去吧 http://www.cnblogs.com/Neeo/p/7897010.html # 拿走不謝 當你看到這一行的時候,你前面的每一步都OK才行,如下步驟在xshell(已遠程鏈接到centos)裏執行... 1. 下載virtualenv pip install virtualenv pip install virtualenvwrapper # 這一步是另外一種方式建立虛擬環境,在此這時候下載備用 2. 建立虛擬環境 virtualenv venv1 # 建立虛擬環境文件夾 # 嘿嘿,這一步你可能會提示:bash: virtualenv: 未找到命令... 或者bash: virtualenv: command not found... 那麼說明你virtualenv的軟連默認沒有搞上...心塞!我懷疑(不可靠)是自定義安裝Python解釋器致使的 解決辦法就是建軟連唄:https://www.cnblogs.com/Neeo/p/7869027.html # 拿走不謝 3. 激活虛擬環境 source venv1/bin/activate # 成功則顯示: (venv1) [root@bogon tmp]# 4. 此時你就能夠把項目搞到服務器了 # 不知道怎麼搞文件?用Xmanager的Xftp傳。這也沒有?出門左轉把垃圾帶走 好比此時把my_project項目搞到了venv1內,而後cd進my_project,執行: pip install -r requirements.txt # 從這裏把項目全部的依賴包一次都能下載完成,而且這些包僅在你的虛擬環境內 5. 此時,應該是項目依賴包已經下好後,其餘的前面都沒問題了,咱們開始正經的運行tornado項目 python tor.py # tornado項目跑起來 6. 瀏覽器訪問它 http://192.168.0.106:8888/login # 瀏覽器地址欄輸入,固然你輸入的不是這個ip地址,是你本身的.... 7. 是否是出現了頁面了!啦啦啦完事!
1. demo演示了tornado的基本用法,包括路由的配置,靜態頁面的配置等等 2. 項目過小了,部署到到centos上跟玩似的,並無涉及到高深的配置問題,好比部署django項目時,要配置uwsgi和nginx等等 3. 部署難點,虛擬環境建立,這裏百度上都總結的挺簡單的,下載virtualenv,而後建立虛擬環境,感受他們都沒有碰到問題... 4. 若是是阿里雲或者別的雲服務器,則有云服務器的攔截規則,咱們要去查看tornado的端口是否被攔截,若是被攔截,則如何去打開 5. 上面的問題一樣存在於centos上,防火牆是否攔截 6. 並無涉及到數據庫的問題,等等
歡迎指正 web