1

我对编码和 Web 开发非常陌生。我是一名系统工程师,希望进入 Web 开发方面。我学习了一些 Python 教程并拼凑了一个(可能非常)粗糙的 Python 应用程序。我现在想将该应用程序放在我创建的网站上,这样我就可以允许办公室中的其他人也使用该实用程序。

为此,我安装了 transcrypt,目的是将 python 代码转换为 javascript。运行 transcrypt 时,我得到以下输出:

编译时出错(最后一个有问题的文件):文件 'c:/Scripting/Transcrypt/Meraki.py',第 1 行,在导入:文件 'c:/users/dab404/appdata/local/programs/python/python36/lib /site-packages/requests/ init .py',第 43 行,在导入:文件'c:/users/dab404/appdata/local/programs/python/python36/lib/site-packages/urllib3/ init .py' ,第8行,即: Attempt to import module: connectionpool Can't find any of: c:/Scripting/Transcrypt/connectionpool.py c:/Scripting/Transcrypt/ javascript /connectionpool.mod.js

该错误继续列出它需要运行的大约 10 个其他文件。我不知道如何解决这个问题,如果有人能给我任何帮助,我将不胜感激。

这是我的代码:

import requests
import json
from meraki import meraki

base_url = "https://dashboard.meraki.com/api/v0/"

def List_Orgs(apikey):  #A FUNCTION FOR LISTING ORGANIZATION ADMINS
  myOrgs = meraki.myorgaccess(apikey)
  for orgs in myOrgs:
    print(orgs)

def List_Admins(URL_admin, headers):
  x = requests.get(URL_admin, headers = headers)
  myAdmins = x.json()
  for admins in myAdmins:
    print(admins)

def Add_Admin(URL, admin_data, headers):     #FUNCTION FOR ADDING NEW ADMIN 
TO AN ORGANIZATION
  r = requests.request("POST", URL, data = admin_data, headers = headers)
  print(r.status_code)
  if (r.status_code) == 201:
    print()
    print()
    print("Administrator successfully added!")
    print()
  else:
    print()
    print("Administrator was NOT successfully added.  Please try again!")
    print()

def Del_Admin(URL_del, headers):     #FUNCTION FOR DELETING AN ADMIN FROM AN 
ORGANIZATION
  r = requests.request("DELETE", URL_del, headers = headers)
  print(r.status_code)
  if (r.status_code) == 204:
    print()
    print()
    print("Administrator successfully deleted!")
    print()
  else:
    print()
    print("Administrator was NOT successfully deleted.  Please try again!")
    print()

apikey = input("What is your Meraki API key?  ")
print()
print("******************************************")
print()
print("Here is a list of your Organizations.  You will need the ID to answer 
the next set of questions.")
print()
print()

List_Orgs(apikey)


print()
print()

headers = {
  'X-Cisco-Meraki-API-Key': apikey,
  'Content-Type': "application/json"
  }

add_or_del = input("Would you like to add or delete an admin?  ")

if add_or_del == ("add" or "Add" or "ADD"):
  orgid = input("Which Organization would you like to add an admin to?  ")
  admin_name = input("What is the new Admin's First and Last name?  ")
  admin_email = input("What is " + admin_name + "'s email address?  ")
  admin_access = input("What level of access would you like " + admin_name + 
" to have? (full or read-only) ") 
  admin_data = '{\n\t\"name\":\"' + admin_name + '\",\n\t\"email\":\"' + 
admin_email + '\",\n\t\"orgAccess\":\"' + admin_access + '\"}'
  URL = (base_url + 'organizations/' + orgid + '/admins')
   Add_Admin(URL, admin_data, headers)
elif add_or_del == ("delete" or "Delete" or "DELETE"):
  orgid = input("Which Organization would you like to delete an admin from?  
")
  URL_admin = (base_url + 'organizations/' + orgid + '/admins/')

  print()
  print("Here is a list of Admins in this Organization.  You will need to 
admin ID to answer the next question.")
  print()
  print()

  List_Admins(URL_admin, headers)

  print()
  print()

  adminid = input ("What is the admin's Meraki portal ID?  ")
  URL_del = (base_url + 'organizations/' + orgid + '/admins/' + adminid)
  Del_Admin(URL_del, headers)

else:
  print("Please type add or delete and try again.")'

谢谢!大卫

4

1 回答 1

1

问题在于进口:

import requests
import json
from meraki import meraki

像这样requests的模块是 Transcrypt 不支持的标准 Python 模块,因为它使用 C 编写的代码,不能在浏览器中运行。

因为json有一个 JavaScript 对应物可以直接从 Transcrypt 使用而不会出现问题。

模块meraki我不知道,所以无法判断。

尽管 Transcrypt 发行版中提供了越来越多的标准模块,但通常它使用 JavaScript 模块,因为这些模块专门针对在浏览器中有意义的功能。

例如,本地文件访问通常在浏览器中被禁止,因此任何使用它的模块都无法做到这一点。

也可以看看:

http://www.transcrypt.org/docs/html/what_why.html#the-ecosystem-different-batteries

因此,在 Transcrypt 中,您使用 Python 进行编程,但您使用的库主要是 JavaScript。例外是非常常见的库,如数学、cmath、随机(部分)、时间、日期时间、itertools、re 等。

要了解如何使用 Transcrypt 的 JavaScript 库,请查看:

http://www.transcrypt.org/examples

还有在:

http://www.transcrypt.org/docs/html/integration_javascript.html#mixed-examples

[编辑]

我再次仔细查看了您的应用程序,我注意到它是一个典型的控制台应用程序,使用input和之类的东西print。虽然 Transcrypt 以有限的方式支持这些,但请参阅

http://www.transcrypt.org/docs/html/integration_javascript.html#example-using-input-and-print-in-a-dom-terminal-element-in-your-browser

一般来说,Web 应用程序的工作方式有所不同。

一般来说,它们是事件驱动的,这意味着许多 GUI 元素拼凑在一起,有时在 HTML 中,有时在脚本中。这些 GUI 元素然后触发事件,进而触发某些代码(事件处理程序)运行。

因此,一个好的下一步可能是研究这种工作方式。Transcrypt 中一个很好的、简单的 HTML/DOM 示例和以这种方式协作的脚本是这样的:

http://www.transcrypt.org/docs/html/installation_use.html#your-first-transcrypt-program

在许多情况下,Web 应用程序还与 Web 服务器交互,因此部分处理是在服务器上完成的。

例如,您可以为此使用 Bottle 或 Django,如下所示:

https://github.com/Michael-F-Ellis/NearlyPurePythonWebAppDemo

于 2018-01-12T10:29:20.487 回答