现在网上大部分教程都是基于新浪 SAE 平台的,但是我发现 SAE 虽然免费,但是好像不太好用。最后选择的 ACE 平台,按量付费,可以用来开发,没人访问就不要钱哦,自己访问调试,我几天才花了1块钱。好了,现在进入正题。。
本文重点介绍几个大家比较关心的问题:
- ACE引擎如何使用及付费
- ACE引擎是否能够进行微信公众平台开发
- ACE引擎如何配合Django工作,如何安装依赖库,如何编写index.py
- ACE引擎如何执行
Python manage.py makemigrations/migrate
- ACE引擎如何进行调试
注册和配置 ACE 平台
在产品与服务里面选择云引擎 ACE,就可以进入 ACE 的管理界面。
-
点击应用列表,创建应用。然后会让你选择付费方式,这里我们点击一下上面的选项卡,切换到按量付费,然后点击立即购买。
-
完成购买之后,初始化应用。在语言里面选择 Python。因为我们将使用 Django 框架。
初始化之后,选择一键部署,系统会自动为我们创建 svn 以及 demo app。
至此,ACE 平台的注册和基本初始化配置就已经完成了。
参考链接:官方文档-快速开始 Python
发布 Django 项目
1.下载示例代码
我们点击版本管理来管理我们的应用
在本地我们创建一个文件夹,执行
svn checkout 地址
,就可以把代码下载下来。
1
├── app.yaml
├── default.html
└── index.py
初始的目录结构是这样的。其中 app.ymal
和 index.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
实际代码如下,代码中的 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 就对了