Django Dropbox BadInputException: Необходимо установить токен доступа OAuth2
Я создал приложение на Python, которое использует API dropbox для доступа к количеству файлов и папок в заданном каталоге. Я пытался разместить его на веб-портале, который мы с моим партнером создали на Django. Из-за того, что dropbox больше не использует постоянные ключи, план состоял в том, чтобы администратор заходил на веб-портал и вручную передавал новый ключ приложения, полученный с сайта консоли dropbox, и передавал его в приложение. Однако возникла проблема: когда я пытаюсь передать новый код маркера доступа через UI, Django выдает следующую ошибку:
BadInputException at /landBoxReport/
OAuth2 access token or refresh token or app key/secret must be set
Request Method: POST
Request URL: http://localhost:7000/landBoxReport/
Django Version: 4.0.5
Exception Type: BadInputException
Exception Value:
OAuth2 access token or refresh token or app key/secret must be set
Exception Location: C:\Users\username\AppData\Local\Programs\Python\Python310\lib\site-packages\dropbox\dropbox_client.py, line 189, in __init__
Python Executable: C:\Users\username\AppData\Local\Programs\Python\Python310\python.exe
Python Version: 3.10.5
Вот остальная часть моего кода:
Для логики в моем views.py, которая вызывает ошибку
form = LandBoxTokenForm(request.POST)
if request.method == 'POST':
token = request.GET.get('landToken')
if token != 'None':
manager = LandBoxManager(token)
manager.dropbox_show_folders()
return render(request, 'landBox_report.html', {'form': form})
Мой код Dropbox Python API:
class LandBoxManager():
def __init__(self, accessToken):
import dropbox
from dropbox.exceptions import AuthError
from numpy import isin
self.useBox = dropbox
self.dbAuthError = AuthError
self.token = accessToken
def dropbox_connect(self):
try:
dbx = self.useBox.Dropbox(self.token)
except self.dbAuthError as e:
print('Error connecting to Dropbox with access token: ' + str(e))
return dbx
def dropbox_show_folders(self):
dbx = self.dropbox_connect()
# Will be in root directory!
landBoxReport = open("T:\landautomation\dropbox\dropboxReport.txt", "w")
for entry in dbx.files_list_folder("").entries:
landBoxReport.write("Marketer: " + entry.name + "\n") # Root folder
landBoxReport.write("\tProvider\n")
for subEntry in dbx.files_list_folder(entry.path_lower).entries:
# Only print the subEntry name if it's a folder type, also print how many items are in the subfolder!
if isinstance(subEntry, self.useBox.files.FolderMetadata):
# Getting the amount of items in each subfolder
fileCount = 0
foldersInside = 0
for subFolderFile in dbx.files_list_folder(subEntry.path_lower).entries:
if isinstance(subFolderFile, self.useBox.files.FileMetadata):
fileCount += 1
if isinstance(subFolderFile, self.useBox.files.FolderMetadata):
foldersInside += 1
landBoxReport.write("\t\t" + subEntry.name + ": " + str(fileCount) + " files, " + str(foldersInside) + " folders\n")
landBoxReport.close()
Я не уверен, что это то, с чем мне придется работать, или мой код неверен - любая помощь или понимание будут признательны!