早就听说了Python的大名,随着的编程语言的理解加深,越发认为动态语言的威力--真大呀。

趁这段时间不忙,我也用Python写了一个应用,而且将其部署到Sina App Engine (SAE)。SAE确实是一个好地方,它支持Python。对于开发人员,其使用费用差点儿为0。

更重要的是。假设我的这个app不会半路夭折,等它长大后,这个平台也能给予足够的支持。

尽管。整个过程都非常easy,可是对于一个新手,特别是从传统C#, Asp.net, IIS阵营过来的开发者来说。什么都是第一次接触。希望我的这篇文章可以成为你Python学习道路上的一盏小灯。

大纲

  • Python安装
  • Pip安装
  • Flask安装
  • 创建一个带页面的Flask Web App
  • 部署到SAE上

Python安装

Python眼下有两个主要版本号,2.7.x和3.x。但眼下Flask对Python 3.x的支持还有些问题待解决,因此推荐使用Python 2.x。

你能够打开下面链接下载Python 2.7.8

https://www.python.org/download/releases/2.7.8/

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmlyZWZveDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="Python Installation" align="middle">

很多其它

假设你已经安装了Python 3.x,也没有必要将其卸载掉。你仅仅须要在Python 2.7.x安装完毕后,改动系统的环境变量,将Path里的Python 3.x的文件夹替换为Python 2.7.x的文件夹。

这样做的目的是在命令行模式下。直接调用Python 2.7。

Pip安装

Pip是Python世界中用于安装的工具。

非常多框架都支持Pip的安装,Flask也不例外。

你能够打开下面链接下载get-pip.py。

https://bootstrap.pypa.io/get-pip.py

建议将get-pip.py保存在Python的根文件夹下。

用管理员权限启动command窗口

执行

python get-pip.py --allow-external install

安装完毕后。它会在Python的安装根文件夹创建Scripts文件夹。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmlyZWZveDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="Pip Installation Complete" align="middle">

建议将Scripts文件夹页加入到系统环境变量Path中。这样方便以下的安装过程中直接在command窗体里输入命令。

(注意:改动了系统环境变量Path后,最好注销一次,否则系统可能临时找不到你输入的命令)

Flask安装

打开command窗口,执行pip install Flask,即完毕了Flask的安装。如今体会到了Pip的强大了吧。

因为整个安装过程要从网上下载,所以下面界面可能要持续一段时间,假设你的网速不快。还得耐心等待。

很多其它

有的时候。因为网络原因,可能导致安装失败。假设遇到失败的情况,多试几次。

创建一个带页面的Flask Web App

在这一节中,会应用到Flask的route功能和JinJia2的Template功能。

route功能就是将请求的url映射到相应的处理方法上。这同Asp.net MVC中的route是同一个概念。

JinJia2的Template功能正如其名称所指。是一个强大的html模板。能够将其类比为Asp.net MVC中的cshtml。

具体内容,请參考下面链接:

http://flask.pocoo.org/docs/quickstart/#a-minimal-application

http://jinja.pocoo.org/docs/templates/

创建文件夹c::\MyWebApp。

创建c:\MyWebApp\myApp.py。

myApp.py

from flask import Flask, render_template

app = Flask(__name__)
app.debug = True @app.route('/')
def index():
return render_template('index.html') if __name__ == '__main__':
app.run()

在上面的代码中。为index方法加入了@app.route('/')属性,即当訪问网站根文件夹时,会调用index函数。

@app.route('/')
def index():

index函数返回render_template('index.html')的结果。这里index.html作为模板页返回给了client。

    return render_template('index.html')

创建文件夹c:\MyWebApp\templates\。

创建c:\MyWebApp\templates\index.html。

创建c:\MyWebApp\static\。

将jquery-1.9.1.min.js存放在static文件夹下。

我这里没有应用Jinjia2的模板特性。仅仅是一个很普通的html代码。

index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="/static/jquery-1.9.1.min.js"></script>
</head>
<body>
<p>你好, Python Flask Web App</p>
</body>
</html>

注意,index.html存放在templates文件夹下, 在index.html中。引用的jquery存放在static文件夹下。

在Flask中,templates文件夹用于放模板,static文件夹用于放静态资源,如css, js, 图标等文件。

执行

用Python IDE打开myApp.py,按F5,网站就跑起来了,非常方便吧。

然后打开浏览器,输入网站地址,比如上面的http://127.0.0.1:5000/。就能够看到Python的Flask框架为我们返回的网页了。

部署到SAE上

假设你有新浪微博,能够通过微博号直接登陆。

http://sae.sina.com.cn/

在'我的应用'上点击'创建新应用'

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmlyZWZveDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="SAE Create">

输入二级域名。

选择Python作为开发语言。

创建完毕后,通过SVN上传代码。

比如,你的二级域名为myApp,那么SVN的地址为 https://svn.sinaapp.com/myApp。

别慌,这里有坑!

官方有具体文档,我这里须要补充的是:SAE本身同意最多10个应用版本号,每个版本号相应于SVN根文件夹下的文件夹,文件夹的名称从1到10。我们这里这些文件夹称为应用文件夹。另外,SVN根文件夹下除了包括应用文件夹外。不应该包括其他东西。

这个设计对于同一时候公布多个产品分支来说。太给力了。

因此,假设当前应用是你的第一个版本号。操作过程例如以下:

  • 在本地创建一个文件夹,运行SVN的Check Out。
  • 在那个文件夹下创建名称为1的文件夹,这个文件夹就是应用文件夹
  • 将之前的代码都复制到这个为1的文件夹下。
  • 运行SVN的Add和Commit操作。

然后,进入SAE的代码管理。你就会发现类似于以下的应用版本号列表。

官方文档链接

http://sae.sina.com.cn/doc/tutorial/code-deploy.html

将本地文件上传到SAE的应用文件夹下后,还须要在应用文件夹的根文件夹下创建一个index.wsgi文件。这个文件是SAE上应用的入口,其代码例如以下:

index.wsgi

import sae
from myapp import app application = sae.create_wsgi_app(app)

如今。大功告成。立即就能够訪问你的网站了。

以二级域名为myApp为例,假设你要訪问当前的默认应用文件夹。訪问地址为:

http://myApp.sinaapp.com

假设你要訪问某一个应用文件夹,比如。第二个应用文件夹,訪问地址为:

http://2.myApp.sinaapp.com

希望以后可以在Python的学习道路上多交流。假设可以推荐一下Python的工作机会,将不胜感激。


Python Flask 在Sina App Engine (SAE)上安家的更多相关文章

  1. Sina App Engine(SAE)入门教程(2)-Mysql使用

    如果你还没有SAE的账号,请在http://sae.sina.com.cn 注册新用户.具体的注册流程请参见:Sina App Engine(SAE)入门教程(1)在常规的环境下,我们可以通过http ...

  2. Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用

    fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...

  3. Sina App Engine(SAE)教程(11)- Yaf使用

    Yaf参考资料 Yaf(Yet Another Framework)用户手册 想在SAE使用Yaf? 无需申请,sae环境已经全面支持. Yaf 实战 下面是一个运行在SAE的Yaf的hello wo ...

  4. Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用

    参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...

  5. Sina App Engine(SAE)入门教程(1)

    此教程只针对刚接触SAE的小白用户,资深码农.高手请绕道.首先还是一个经典的实例,hello sae. 创建应用 在注册完账号之后,需要到 http://sae.sina.com.cn/?m=myap ...

  6. Sina App Engine(SAE)入门教程(3)-KVDB使用

    简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...

  7. Sina App Engine(SAE)入门教程(7)- Storage使用

    参考阅读 sae storage api 文档 Storage 说明文档 Storage 大文件上传说明 storage是什么? 因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现 ...

  8. Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用

    分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...

  9. Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用

    参考资料 SaeVCode api 文档 使用教程 所有的验证码原理都是生成一个vcode字符串,存到session中,和用户的输入进行比较判断,以下是一个使用验证码服务的完整实例: 首页index. ...

随机推荐

  1. [六省联考2017]组合数问题 (矩阵优化$dp$)

    题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][ ...

  2. react 复习4- 生命周期

    实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidMount 实例化完成后的更新 getI ...

  3. 星际转移(cogs 736)

    «问题描述: 由于人类对自然资源的消耗,人们意识到大约在2300 年之后,地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177 年冬由于未知的原因,地球环境发生 ...

  4. MVC3 中使用 Ajax.ActionLink Ajax.BeginForm

    原文发布时间为:2011-05-01 -- 来源于本人的百度文章 [由搬家工具导入] http://msdn.microsoft.com/en-us/library/dd381533%28VS.98% ...

  5. [Oracle] Lock&Latch梳理

    Oracle lock&latch 1. 概述 4种锁机制 lock latch pin mutex 保证资源在并发访问和修改时不被破坏 锁类型 行为 持有时间 级别 保护类型 lock 队列 ...

  6. 点击添加按钮,使用ajax动态添加一行和移除一行,并且序号重新排序和数据不重复操作判断

    <div class="control-group " style="top: -20px;position: relative;"> <la ...

  7. 将linlayout布局转为bitmap图片和保存

    1.首先新建路径 File filedirs = new File(Environment.getExternalStorageDirectory(), "/YuLin/"); i ...

  8. Cryptography I 学习笔记 --- 抗碰撞

    1. 生日攻击,如果hash函数可以产生n bit的结果,那么生日攻击的时间复杂度在O(nn/2)这个量级.以比特币使用的SHA256为例,其hash结果为256bit,那么如果想完成一次生日攻击,那 ...

  9. ZOJ 3593.One Person Game-扩展欧几里得(exgcd)

    智障了,智障了,水一水博客. 本来是个水题,但是for循环遍历那里写挫了... One Person Game Time Limit: 2 Seconds      Memory Limit: 655 ...

  10. Pacman常用命令

    Pacman是Arch Linux 的包管理器.它将一个简单的二进制包格式和易用的构建系统结合了起来.不管软件包是来自官方的 Arch 库还是用户自己创建,Pacman 都能方便得管理. 更新系统 在 ...