【问题标题】:Python & gdata within Django app: "POST method does not support concurrency"Django 应用程序中的 Python 和 gdata:“POST 方法不支持并发”
【发布时间】:2015-09-02 09:23:35
【问题描述】:

我正在尝试在 Django 应用程序中使用 gdata 在我的 google 驱动器帐户中创建一个目录。这是在我的 Django 视图中编写的代码:

def root(request):

   from req_info import email, password
   from gdata.docs.service import DocsService

   print "Creating folder........"
   folder_name = '2015-Q1'
   service_client = DocsService(source='spreadsheet create')
   service_client.ClientLogin(email, password)
   folder = service_client.CreateFolder(folder_name)

身份验证没有问题,但最后一行代码触发以下错误:

Request Method: GET
Request URL:    http://127.0.0.1:8000/
Django Version: 1.7.7
Exception Type: RequestError
Exception Value: {'status': 501, 'body': 'POST method does not support concurrency', 'reason': 'Not Implemented'}

我正在使用以下软件:

  • Python 2.7.8
  • Django 1.7.7
  • PyCharm 4.0.5
  • gdata 2.0.18
  • google-api-python-client 1.4.0(不确定是否相关)
  • [我不确定是否相关的许多其他软件包]

令人沮丧的是,当我在自己的独立文件(不在 Django 视图中)中运行完全相同的代码(见下文)时,它却能完美运行。

from req_info import email, password
from gdata.docs.service import DocsService

print "Creating folder........"
folder_name = '2015-Q1'
service_client = DocsService(source='spreadsheet create')
service_client.ClientLogin(email, password)
folder = service_client.CreateFolder(folder_name)

我在与产生错误的代码相同的虚拟环境和相同的 PyCharm 项目中运行此工作代码。我尝试将代码放在单独文件中的函数中,然后让 Django 视图调用该函数,但错误仍然存​​在。

我想让这段代码在我的 Django 应用程序中运行。

【问题讨论】:

  • 你有解决办法吗?

标签: python django pycharm gdata


【解决方案1】:

我不记得我是否让它在 Django 视图中工作,但因为 Google 已经要求使用 Oauth 2.0,所以无论如何我不得不重新编写这段代码。我认为该错误与我同时使用两个不同的软件包/客户端来访问 Google 云端硬盘有关。

这是我最终使用google-api-python-client 包创建文件夹的方式:

from google_api import get_drive_service_obj, get_file_key_if_exists, insert_folder  

def create_ss():
    drive_client, credentials = get_drive_service_obj()  
    # creating folder if it does not exist  
    folder = get_file_key_if_exists(drive_client, 'foldername')
    if folder:  # if folder exists
        print 'Folder "' + folder_name + '" already exists.'
    else:   # if folder doesn't exist
        print 'Creating folder........"' + folder_name + '".'
        folder = insert_folder(drive_client, folder_name)

在这段代码之后,我使用a forked version (currently beta) of sheetsync 复制我的模板电子表格并用我的数据填充新文件。然后,我必须在上面的代码 之后导入 sheetsync 以避免“并发”错误。 (如果人们愿意,我也可以在这里发布涉及 sheetsync 的代码,但现在,我不想离题太远。)

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多