坚持五年分享整理阿里(ACA/ACP/ACE),腾讯(云从业者/TCA/TCP),华为(HCIA/HCIP/HCIE),AWS(SAA/SAP)等工程师考试认证,题库,视频,资料,成功帮助5W+学员获得专业认证!

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

ace (524) 2021-10-28 15:33:55 本文共计3681个字,预计阅读时长13分钟。

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

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

1、ACE引擎如何使用及付费

2、ACE引擎是否能够进行微信公众平台开发

3、ACE引擎如何配合Django工作,如何安装依赖库,如何编写index.py

4、ACE引擎如何执行Python manage.py makemigrations/migrate

5、ACE引擎如何进行调试

注册和配置 ACE 平台

 

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

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

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

阿里云ACE引擎+Django 开发微信公众平台 (https://www.ls102.com/) ace 第1张

 

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

阿里云ACE引擎+Django 开发微信公众平台 (https://www.ls102.com/) ace 第2张

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

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

发布 Django 项目

1.下载示例代码

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

阿里云ACE引擎+Django 开发微信公众平台 (https://www.ls102.com/) ace 第3张

这里我们可以看到 svn 的地址,我们需要把它 checkout 到本地。
在本地我们创建一个文件夹,执行 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_applicationimport 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: 1static:

- 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_au'\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 就对了

好了各位小伙伴都学会了么?可以先登录认证大使的官网https://www.ls102.com/了解详情,这里还提供专业的考前培训和历年试题解析。

THE END