带Django的Dropbox API - 身份验证

时间:2018-01-28 03:30:23

标签: python django dropbox-api

我正在尝试学习Dropbox API,并希望使用OAuth 2进行授权。我收到了以下错误:

dropbox_auth_start() missing 1 required positional argument: 'request'

这是我的代码:

Views.py

from dropbox import DropboxOAuth2Flow
from django.shortcuts import redirect

def get_dropbox_auth_flow(web_app_session):
    redirect_uri = "https://www.my-dummy-url.com"
    APP_KEY = 'my-app-key'
    APP_SECRET = 'my-app-secret'
    return DropboxOAuth2Flow(
        APP_KEY, APP_SECRET, redirect_uri, web_app_session, "dropbox-auth-csrf-token")

def dropbox_auth_start(web_app_session, request):
    if request.method == 'GET':
        authorize_url = get_dropbox_auth_flow(web_app_session).start()
        return redirect(authorize_url)

urls.py

urlpatterns = [
    path('dropbox/', views.dropbox_auth_start, name='dropbox')
]

2 个答案:

答案 0 :(得分:2)

除了@at14所说的之外,请求对象必须是第一个参数。第一个参数(在此情况下,web_app_session是请求对象)。不需要第二个参数“ request”(在dropbox_auth_start函数中)。

更重要的是,需要在请求对象上调用会话对象,如下所示:web_app_session.session

def dropbox_auth_start(web_app_session):
    authorize_url = get_dropbox_auth_flow(web_app_session.session).start()
    return redirect(authorize_url)

本质上是web_app_session == request,因此添加if块,您将得到:

def dropbox_auth_start(web_app_session):
    if web_app_session.method == 'GET':
        authorize_url = get_dropbox_auth_flow(web_app_session.session).start()
        return redirect(authorize_url)

当然,web_app_session可以用request切换。

答案 1 :(得分:1)

请求对象需要是函数的第一个参数

def dropbox_auth_start(request, web_app_session):
    if request.method == 'GET':
        authorize_url = get_dropbox_auth_flow(web_app_session).start()
        return redirect(authorize_url)