我正在尝试学习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')
]
答案 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)