今天帮一个学生解决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