在 Android 中使用 Django 用户对象

Posted

技术标签:

【中文标题】在 Android 中使用 Django 用户对象【英文标题】:Using Django User object in Android 【发布时间】:2015-03-24 01:20:17 【问题描述】:

我有一个 android 应用程序,它与一个 Django API 交互,该 API 还托管一个网站。

在 Django 网站上,用户使用 Google+/Facebook/Twitter(使用django-social-auth)登录,所有后续请求都包含一个用户对象,该对象标识用户。我认为这是通过 cookie 完成的。

我想在我的 Android 应用程序中实现相同的功能。应用程序使用 Google+/Facebook/Twitter 登录用户,然后将访问令牌发送到 API,该 API 将用户登录。

为了让 Django 识别登录用户,我需要将什么传回 Android 应用程序,然后将每个请求传回 API?

【问题讨论】:

【参考方案1】:

我找到了解决方案。在Django 中登录用户后,您返回request.session.session_key。您将其存储在应用程序中,当您需要发出经过身份验证的请求时,您将其作为 POST 参数传回。

Django 中,您可以创建一个这样的装饰器来自动将其转换为请求中的User 对象:

def extract_user(function):
    def handle_extraction(request, *args, **kwargs):
        # Try to store the request.user if a session id is specified.
        if request.POST.get('SESSION-ID'):
            request.user = get_user_from_request_w_session_id(request)

        # Execute the function.
        return function(request, *args, **kwargs)

    return handle_extraction

每个需要经过身份验证的用户的函数现在都被这样注释:

@extract_user
def my_function(request):
    ...

如果您想使用@login_required,您也可以这样做,只需确保有注释AFTER @extract_user,如下所示:

@extract_user
@login_required
def my_function(request):
    ...

【讨论】:

我应该如何发布 session-id?在标题中还是通常? @SMahdiS,您将其作为 POST 参数传回。

以上是关于在 Android 中使用 Django 用户对象的主要内容,如果未能解决你的问题,请参考以下文章

DJANGO - 仅针对模型中的某些对象将管理面板的权限分配给用户

Django中非视图函数获取用户对象

Django - 夹具中的外键

如何在 Django 中导入用户模型并选择所有对象

在 Django admin 中编辑组对象时将用户对象分配给组

根据用户输入从 django 模型中选择对象