Django - 解析XML - RESTful

0 投票
1 回答
998 浏览
提问于 2025-04-16 14:36

我有一个在本地运行得很好的Python脚本。这个脚本不是企业级应用,只是我在玩的一些东西。它使用了“bottle”这个库。这个应用基本上是处理一个XML文件(这个文件可以存储在本地或者在线),里面有一些独特的ID和一些坐标,比如输入mysite.com/23就能返回ID为23的元素的经纬度。我想大家对REST应该都不陌生。

现在,我想把这个应用放到网上,但我找不到支持“bottle”的主机。不过,我找到了一家安装了django的主机。

所以,我的问题是,把下面的代码从bottle转换到django会有多难?有没有人能给我一些建议?我尝试过使用一些常见的Python库。

谢谢。

from xml.dom.minidom import parseString
from bottle import route, run
import xml
import urllib

file = open('myfile.xml','r')
data = file.read()
dom = parseString(data)
@route('/:number')
def index(number="1"):
    rows = dom.getElementsByTagName("card")[0].getElementsByTagName("markers")[0].getElementsByTagName("marker")
    for row in rows:
        if row.getAttribute("number") == str(number):
             return str(xml.dumps({'long': row.getAttribute("lng"), 'lat': row.getAttribute("lat")}, sort_keys=True, indent=4))
    return "Not Found"


run(host='localhost', port=8080)

1 个回答

1

我把你的问题当成了一个机会,想多学一点关于Django的知识。我参考了《Django书籍》

从一个空的Django网站开始(用命令django-admin.py startproject testsite创建),我把urls.py改成了这样:

from django.conf.urls.defaults import patterns, include, url
from testsite.views import index

urlpatterns = patterns('',
    url(r'^(\d+)$', index),
)

然后把views.py改成了这样:

from django.http import HttpResponse
from xml.dom.minidom import parseString
import xml
import urllib

def index(request, number):
    data = open('myfile.xml', 'r').read()
    dom = parseString(data)
    rows = (dom.getElementsByTagName("card")[0]
               .getElementsByTagName("markers")[0]
               .getElementsByTagName("marker"))

    for row in rows:
        if row.getAttribute("number") == str(number):
             return HttpResponse(str(xml.dumps({'long': row.getAttribute("lng"), 
                    'lat': row.getAttribute("lat")}, sort_keys=True, indent=4)))
    return HttpResponse("Not Found")

需要注意的是:我没有测试XML的代码,只测试了与Django相关的代码,这些是通过命令python manage.py runserver来测试的。

《Django书籍》里有很多信息,包括如何在生产服务器上部署这个项目。

撰写回答