将Python代码转为Django框架
我在桌面上有一个独立的应用程序,是用Python写的。我在这个应用中使用了一些模块,比如Tkinter、cv2和numpy。我的Tkinter负责显示图形界面(里面有一个按钮和一张图片)。现在我遇到的问题是,我想把它变成一个网页应用。为此,我使用了Django框架,它要求把模型、视图和模板分开(也就是MTV结构)。我想知道如何用HTML来呈现相同的图形界面,包括相同的按钮和图片。(我的图形界面里的按钮和图片应该放在模板中,而我的业务逻辑应该放在视图中。)这是我想转换成MTV形式的代码。我希望上传按钮放在模板(HTML)里。当点击上传按钮时,程序应该跳转到视图(逻辑)。我该如何把逻辑和HTML分开?(这样做真的有必要吗?我能不能把整个东西都转换成Django框架,而不分开?)请帮帮我。
def upload():
global original_img,img,img2,img3,image_path,old_label_image,photo,label,image_path,image,ax,fig
print "upload"
image_path=tkFileDialog.askopenfilename()
image = Image.open(image_path)
original_img= image.copy()
image.thumbnail((1000,625))
photo = ImageTk.PhotoImage(image)
label = Label(image=photo)
label.image = photo
if old_label_image is not None:
old_label_image.destroy()
old_label_image = label
#label.update()
label.pack()
root = Tk.Tk() # creating an instance of Tk class
print "main"
old_label_image = None
frame = Frame(root) #creates a new window (given by the pathName argument) and makes it into a frame widget.The frame command returns the path name of the new window.
frame.pack() #The Pack geometry manager packs widgets in rows or columns
bottomframe = Frame(root)
bottomframe.pack( side = BOTTOM )
UploadButton = Button(frame, text="Upload", command= upload)
UploadButton.pack( side = LEFT)
root.mainloop()
3 个回答
我觉得如果你不使用像tkinter这样的图形用户界面库,那是完全有可能的。说到Python语言,其实有很多种可能性。特别是它有一个很有名的框架叫Django。
你不能简单地“转换”这样的代码。为网页写应用和为桌面程序写应用是完全不同的事情。你需要考虑如何用HTML来展示你的表单,如何接受用户上传的文件,如何把结果展示给用户等等。Django提供了这些功能,但做法完全不同:比如说,表单的初始展示和返回结果是通过两个不同的请求来完成的,它们之间没有任何数据的保存。
你不能这样做。以下是一些解释,帮助你理解原因:
第一点-- Python代码是由它的解释器执行的,这个解释器是用C语言写的。(Python软件基金会的解释器被称为"Cpython",这样可以和其他也能运行Python代码的第三方解释器区分开来。)Python代码通过Cpython被解释,并在Python控制台中显示内容,比如“Idle”或“终端模拟器”,甚至可以直接在电脑的窗口屏幕上以图形形式显示,使用的是“X11”(Linux Unix的X窗口)、“Quartz Compositor MacX”(Macintosh)或“DWM”(Windows的桌面窗口管理器)。(Cpython有三个基本版本,分别是针对Mac、Windows和Unix/Linux的实现。)
第二点-- 你也可以把网页浏览器看作一个程序解释器。但它不能解释Python代码。它们只会解释HTML、CSS和JavaScript。不过,网页浏览器的工作方式像一个虚拟机,它在自己的显示环境中解释并显示结果,而不是输出到第三方控制台或电脑的窗口系统。不幸的是,现有的浏览器并没有被编程来解释Python代码。
第三点-- Python是一种非常高级的语言,这意味着它是由更低级的语言设计出来的。在Python之前,必须有C语言;在C语言之前,必须有汇编语言;在汇编语言之前,必须有机器语言。计算机代码的复杂性演变可以和生物演化进行比较。JavaScript也是非常高级的语言,但它的演变完全依赖于网页浏览器。而Python的演变则依赖于终端模拟器和电脑的窗口系统(X11、MacX或DWM)。