类别归档: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 ...

继续阅读

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 ...

继续阅读

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

使用百度前端公共库CDN服务(http://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="http://libs.baidu.com/jquery/1.10.2 ...

继续阅读

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 ...

继续阅读

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 ...

继续阅读