类别归档:SAE

Sina Application Engine

RSS feed of SAE

SAE新浪微博Python SDK CERTIFICATE_VERIFY_FAILED解决方法

一个搭建在SAE上的Django应用,使用新浪微博提供的Python SDK已经稳定运行一年有余,但最近开始持续出现微博认证失败的状况。

摘录微博Python SDK的错误提示如下所示:

ERROR:django.request:Internal Server Error: /weibo/auth/
Traceback (most recent call last):
  File "/usr/local/sae/python/3rd/django-1.5/django/core/handlers/base.py", line 115, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/data1/www/htdocs/838/app/1/mysite/views.py", line 42, in auth
    res = weibo_util.keep_user(code,api,redirect_uri)
  File "/data1/www/htdocs/838/app/1/util/weibo_util.py", line 86, in keep_user
    r ...

继续阅读

SAE Django如何禁止外部IP访问

在SAE上基于Django搭建的Web工程有时需要禁止来自某些特定IP地址的访问请求。

例如一个为搭建在SAE的其他项目提供服务的内部工程,可以设置为只允许SAE内部的IP地址访问,从而提高项目的安全性。

要修改SAE Django工程的访问规则,需要变更工程的WSGI配置文件。

通过向WSGI配置文件添加中间件,可以根据客户端请求信息的IP地址、User-Agent,Referer等属性对访问请求进行过滤。

SAE Django工程根目录1/下的index.wsgi的路由配置源码如下:

#Router
import sae
from mysite import wsgi

application = sae.create_wsgi_app(wsgi.application)

1/mysite/wsgi.py源码如下:

#encoding=utf8
"""
WSGI config for mysite project.

This module contains the WSGI application used by Django's development server
and any production WSGI ...

继续阅读

百度CDN跨域引用Bootstrap Glyphicons字体异常

使用百度前端公共库CDN服务(https://libs.baidu.com)的站长需要引起注意:

如果站点引用了百度CDN提供的Bootstrap Glyphicons字体,在使用较新版本的浏览器(包括Chrome 38+,Firefox 33+,以及IE 11等)访问这些包含Glyphicons字体的页面时,会无法正确显示Bootstrap Glyphicons字体。

使用BootCDN服务(https://www.bootcdn.cn/)替换百度公共库CDN服务,可以解决上述问题。

通过Chrome浏览器开发者工具的Network选项卡查看资源请求,可见glyphicons字体文件的请求响应出现异常。

测试页面的代码如下:

<html>
  <head>
    <script src="https://libs.baidu.com/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
    <script src="https://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
    <link href="https://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet" />
    <style>
      p {
        margin: 15px;
        font-size: 20px;
        font-weight:bold;
      }
    </style>
  </head>
  <body>
    <p>&lt;script src="https://libs.baidu.com/jquery/1.10.2/jquery.min.js" type="text/javascript"&gt;&lt;/script&gt;</p>
    <p>&lt;script src="https://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"&gt;&lt;/script&gt;</p>
    <p>&lt;link href="https://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" ...

继续阅读

SAE Python MemCache使用示例

Memcache是SAE为开发者提供的分布式内存缓存服务,用来以共享的方式缓存用户的小数据。

Memcache主要的使用场景有以下两个:

  • 需要共享某些 key-value 形式的小数据时。(因为SAE的Web服务是分布式环境,所以使用全局变量方式等方式是不行的)。
  • 缓存MySQL等后端存储的数据。快速进行数据响应,减轻后端存储的压力。

用户需要先在在线管理平台创建Memcache,然后才可以通过API读写Memcache。

SAE Python本地开发环境提供了对SAE memcached服务的模拟,在本地开发时可以使用该模块模拟线上memcache服务的一些行为。使用下面的方法对线上和本地开发环境加以区分。

import os

#获取MemCache客户端
def getClient():
	if 'SERVER_SOFTWARE' not in os.environ: #本地调试环境
		import memcache
		mc = memcache.Client(['127.0.0.1:11211'], debug=0)
		return mc
	else: #SAE线上服务器环境
		import pylibmc
		return pylibmc.Client()

下面的代码片段展示了一个为memcache缓存数据添加超时检测的简单解决方案:

from datetime import datetime, ...

继续阅读

SAE Django如何syncdb到线上数据库

使用SAE部署Django应用时,如何将应用的数据库同步至线上?

在本地开发环境中,如下配置数据库,即可执行 python manage.py syncdb 直接syncdb到线上数据库。

# 线上数据库的配置
MYSQL_HOST = 'w.rdc.sae.sina.com.cn'
MYSQL_PORT = '3307'
MYSQL_USER = 'ACCESSKEY'
MYSQL_PASS = 'SECRETKEY'
MYSQL_DB   = 'app_APP_NAME'

from sae._restful_mysql import monkey
monkey.patch()

DATABASES = {
    'default': {
        'ENGINE':   'django.db.backends.mysql',
        'NAME':     MYSQL_DB,
        'USER':     MYSQL_USER,
        'PASSWORD': ...

继续阅读