阿里云ACE引擎+Django 开发微信公众平台

现在网上大部分教程都是基于新浪 SAE 平台的,但是我发现 SAE 虽然免费,但是好像不太好用。最后选择的 ACE 平台,按量付费,可以用来开发,没人访问就不要钱哦,自己访问调试,我几天才花了1块钱。好了,现在进入正题。。

本文重点介绍几个大家比较关心的问题:

  • ACE引擎如何使用及付费
  • ACE引擎是否能够进行微信公众平台开发
  • ACE引擎如何配合Django工作,如何安装依赖库,如何编写index.py
  • ACE引擎如何执行Python manage.py makemigrations/migrate
  • ACE引擎如何进行调试

注册和配置 ACE 平台

  1. 进入阿里云官网,注册登录。进入控制台

  2. 在产品与服务里面选择云引擎 ACE,就可以进入 ACE 的管理界面。

  3. 点击应用列表,创建应用。然后会让你选择付费方式,这里我们点击一下上面的选项卡,切换到按量付费,然后点击立即购买。


  4. 完成购买之后,初始化应用。在语言里面选择 Python。因为我们将使用 Django 框架。


    1455069120361.png

    初始化之后,选择一键部署,系统会自动为我们创建 svn 以及 demo app。

至此,ACE 平台的注册和基本初始化配置就已经完成了。

参考链接:官方文档-快速开始 Python

发布 Django 项目

1.下载示例代码

我们点击版本管理来管理我们的应用

1455069298882.png
这里我们可以看到 svn 的地址,我们需要把它 checkout 到本地。
在本地我们创建一个文件夹,执行 svn checkout 地址,就可以把代码下载下来。

    1
    ├── app.yaml
    ├── default.html
    └── index.py

初始的目录结构是这样的。其中 app.ymalindex.py 是必须的。我需要修改这两个文件来配置我们的站点。

2.创建 Django 应用

可以直接在我们下载下来的文件夹中创建 django 应用。当然如果您已经创建好了 django 应用,可以直接拷贝过来。文件目录结构如下。

├── app.yaml
├── default.html
├── favicon.ico
├── index.py
├── manage.py
├── pinche #Django 项目名
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── pincheBasic #APP
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations
│   ├── models.py
│   ├── templates
│   ├── tests.py
│   ├── views.py
├── requirements.txt
└── static

这里我们需要注意 requirements.txt 的位置,ACE 会根据这个文件的内容帮我们安装依赖的库。

3.编写index.py

这里主要是讲 index.py的编写,该文件负责启动我们的应用

删掉默认的代码,替换为如下。注意官方文档中的代码有问题,没有 import os

1455070454465.png

实际代码如下,代码中的 pinche是我的 django 项目名称,你替换一下就可以。

from django.core.wsgi import get_wsgi_application
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'pinche.settings'
application = get_wsgi_application()

4.安装依赖包

需要安装哪些库,直接写在 requestments.txt 即可,有些库是需要编译的,如果安装失败是因为ACE 上面没有相应的 LIB,这需要你提交工单让他们给你装。不过一般的都有。

Django
arrow
django-bootstrap3
MySQL-python
alibaba-python-sdk
requests

除非一定需要依赖某个版本,否则最好别写版本,不然有的版本找不到就装不上。发布的时候就会自动安装。

5.使用静态文件

作为一个Web应用,不可避免的要使用css, js,图片等镜头资源。或许,你的框架提供了访问静态文件的方法,或者,你打算自己提供静态文件访问功能。但是,ACE默认支持静态文件,而且更简单,性能更好。

version: 1
static:
    - path: /static/
      files: /static/
      expire: 30d
    - path: /favicon.ico
      files: /favicon.ico
      expire: 1y

默认的配置如上,这种情况下,static 目录要放在根目录。

6.发布及部署

本地代码配置好之后,就可以上传代码了。
运行svn commit -m "init"来上传代码,代码上传后,点击重新发布。重新发布后不会立刻生效,我们点击左侧应用信息,可以查看运行状态(正在启动 || 运行中)

可以在版本管理里面点击查看来看看效果。

7.数据库创建和迁移

众所周知,django 在本地进行数据库的创建,是运行命令

python manage.py makemigrations
python manage.py migrate

但是在 ACE 上如何执行makemigrations呢,我们又不能执行命令。其实命令还是在本地执行的,只要settings.py中配置数据库为远端数据库即可。

首先,我们创建数据库。回退到上一级菜单,选择扩展服务--数据库服务。可以免费开通一个共享性 Mysql 数据库。

空间:1G
数据库类型:共享型(免费使用)
用户名:****
数据库名:****
数据库地址:***.mysql.rds.aliyuncs.com
端口:3306

然后我们在settings.py中配置我们的数据库。

if DEBUG:
    name = "pincheBasic"
    user = "root"
    password = ""
    host = ""
    port = ""

else:
    name = "rg****"
    user = "rg****ux"
    password = "rg****50"
    host = "rrg****3ed.mysql.rds.aliyuncs.com"
    port = "3306"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': name,
        'USER': user,
        'PASSWORD':password,
        'HOST':host,
        'PORT':port,
    }
}

这里我们可以通过 DEBUG 变量来控制使用本地数据库还是 ACE 的数据库。

我们把 DEBUG 设置成 False,然后运行

python manage.py makemigrations
python manage.py migrate

就可以完成 ACE 数据库的创建和更新。

在产品与服务里面选择云数据库 RDS,进入控制面板
点击登录数据库,就可以进行数据库的管理。

我们可以查看数据表的创建情况,也可以执行 sql 语句等对数据库进行操作。

8.查看运行日志

有时候app 无法正常运行或者是输出了错误的信息。我们都可以通过日志系统来查看。

注意: 如果你使用Django框架,要把时区改成中国地时区,否则会日志时间不对,ACE日志收集程序无法采集日志。请确保settings.py文件里,TIME_ZONE='Asia/Shanghai'

日志可以查询某个时间范围,也可以直接下载某天的日志到本地进行分析。同时,查询日志的级别也是可以控制的。另外在控制面板里面还提供了查看实时日志的入口,打开之后就和终端一样,可以显示当前操作产生的日志。

我们可以在app.yaml里配置日志级别:

log:
    level: INFO

从微信获取的用户信息中文乱码问题

假设我们获取的 json 中包括一个
u'\xe6\x90\xac\xe9\x93\x81\xe5\xb0\x91\xe5\xb9\xb4ai'
它虽然是一个 unicode,但是如果直接打印或者存放到数据库里面,则会乱码,我们必须把 u 去掉,再放到数据库里面,此时应该使用:
.encode('raw_unicode_escape')

举例来看:

>>> uni_a = u"软体动物小艾"
>>> uni_a
u'\u8f6f\u4f53\u52a8\u7269\u5c0f\u827e'
>>> print uni_a
软体动物小艾

正常来讲,我们在 python 2 里面使用中文字符串会以这样的方式进行。

但是从微信拿到的用户信息,实际上先进行了 utf-8的编码。然后却当做了 unicode 传了过来。
相当于

uni_a.encode("utf-8") =
'\xe8\xbd\xaf\xe4\xbd\x93\xe5\x8a\xa8\xe7\x89\xa9\xe5\xb0\x8f\xe8\x89\xbe',如果 print 这个字符串,也是正确的,但是微信传过来的时候,用它替换了前面的\u8f6f\u4f53\u52a8\u7269\u5c0f\u827e
这里就相当于了一个 u,所以我们去掉这个 u 就对了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容