美文网首页服务器开发程序员
阿里云ACE引擎+Django 开发微信公众平台

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

作者: 软体动物Ai | 来源:发表于2016-02-14 20:46 被阅读981次

    现在网上大部分教程都是基于新浪 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 就对了

    相关文章

      网友评论

      • RayMoo:居然不支持git,请问具体sae有哪些劣势

      本文标题:阿里云ACE引擎+Django 开发微信公众平台

      本文链接:https://www.haomeiwen.com/subject/mmqpkttx.html