在App Engine上使用Python/Django非关系数据库的JSON认证

4 投票
1 回答
1226 浏览
提问于 2025-04-16 04:28

我正在使用Google App Engine搭建一个网站,使用的是Python和Django non-rel。现在HTML的显示和数据的读取/发布都运行得很好。但随着我不断推进,我希望能用AJAX来进行很多更新,最终还想在安卓和iPhone等移动设备上实现。

我的页面使用的是Django non-rel,登录和登出认证在HTML中运行得很好。但是,通过JSON发送的更新信息需要验证用户是否有权限进行更改。我觉得仅仅为AJAX调用做认证并不难,因为你仍然是在访问网站,但如果要加入手机的认证呢?

我对此还很陌生,我该从哪里开始呢?

我该如何在GAE上设置服务,以便进行经过认证的CRUD操作?理想情况下,我希望能为AJAX、安卓等使用完全相同的REST服务。

1 个回答

2

在Python中,这个过程非常简单。你只需要创建一个装饰器方法来检查用户的身份认证,然后把这个装饰器加到任何需要身份认证的函数上。

def admin(handler_method):
  """
  This decorator requires admin, 403 if not.
  """
  def auth_required(self, *args, **kwargs):
    if users.is_current_user_admin():
      handler_method(self, *args, **kwargs)
    else:
      self.error(403)
  return auth_required

...

@admin
def crudmethod_update(self, *args, **kwargs):
  ...

不过,这里假设你有一些关于如何获取用户数据的前提条件,但无论你的设置是什么,原理都是一样的。你可能会觉得,ajax请求在服务器上处理的方式有所不同,但实际上,和任何标准的HTTP请求一样,你得到的请求头是相同的。如果你能在普通的HTML请求中检查身份认证,那么你实际上可以用ajax请求来劫持表单提交,得到相同的结果。你可能希望得到JSON格式的数据,或者更小的HTML片段。为此,你可以选择:

  1. 在请求中添加一些可以检查的内容,以确认这是一个ajax请求,并根据这个进行调整。

  2. 专门实现一个RPC模型来处理ajax请求

在处理身份认证方面,你可以使用google.appengine.ext users库,依赖于谷歌账户的认证,或者你可以自己编写一个。自己编写意味着你需要实现一个会话机制(用于在用户会话中保持状态),并将密码以哈希和加盐的方式存储以便进行验证。

撰写回答