我是python的新手,刚刚完成了django教程。我有一个django驱动的站点,我正在编写一个Android应用程序,需要从django管理的同一个数据库发送和接收数据。网站和应用程序提供相同的功能,但我不希望为应用程序呈现页面,我只想发送/接收命令和序列化对象。基本上我需要做的是
在django ---> Run myProgram.py ---> Update database ---> send confirmation to client.
我可以提供一些关于编辑内容/位置的指示吗?感谢。
答案 0 :(得分:7)
您似乎正在尝试使用Django创建API。您可以阅读有关REST API的更多信息here。基本的想法是你的网站将有一组命令链接/网址 - 其中每个链接将执行一些操作(更新数据库等),只返回一些信息(最常见的是JSON - 例如从数据库返回一个对象) ,或将两者兼顾。
您需要做的是列出api必须处理的所有可能命令。这将包括检索,插入,更新和删除数据的所有命令。
对于此示例,我们假设应用程序的唯一作业是管理商店中的项目。这是一个非常简化的演示,但它应该得到重点。
这是一个Django模型(在Store
django app中):
class Item(models.Model):
name = models.CharField(max_length=255)
price = models.IntegerField() # assume the price is always int
quantity = models.IntegerField()
那么我们假设api的可能命令是:
所有命令的网址结构
urlpatterns = patterns('',
# will be used for getting, updating, and removing an item
url(r'^item/(?P<item_id>\d+)/$', "item"),
# will be used to get info about all items
url(r'^item/all/$', "item_all"),
# will be used to create new item
url(r'^item/new/$', "item_new"),
)
获取有关所有项目的信息
为了从django获取信息信息,django序列化函数非常有用。 Here是django的文档。
#views.py
from django.core import serializers
import json
def item_all(request):
items = Item.objects.all()
data = serializers.serialize("json", items)
return HttpResponse(data, mimetype="application/json")
这样做会返回一个包含所有项目的JSON数组:
[
{
pk: 1,
model: "store.item",
fields: {
name: "some_name",
price: 20,
quantity: 1000
}
},
// more items here
]
添加新项目
为此你的Android应用程序必须将一个JSON对象发送到django。
JSON对象:
{ data:
{
name: "some_name",
price: 40,
quantity: 2000
}
}
所以现在你的django应用程序必须解析请求中的信息才能创建一个新项目:
#views.py
def item_new(request):
# the request type has to be POST
if request.method != "POST":
return HttpResponseBadRequest("Request has to be of type POST")
postdata = request.POST[u"data"]
postdata = json.loads(postdata)
item = Item()
item.name = postdata["name"]
item.price = postdata["price"]
item.quantity = postdata["quantity"]
item.save()
data = serializers.serialize("json", [item])
return HttpResponse(data, mimetype="application/json")
一些注意事项:
请注意使用POST请求类型。这在REST API中非常重要。基本上取决于请求类型,将执行不同的操作。在下一个视图中,这将更加生动。
获取,更新和删除
#views.py
def item(request, item_id):
item = get_object_or_404(Item, pk=item_id)
if request.method == "GET":
data = serializers.serialize("json", [item])
return HttpResponse(data, mimetype="application/json")
elif request.method == "POST":
postdata = request.POST[u"data"]
postdata = json.loads(postdata)
item.name = postdata["name"]
item.price = postdata["price"]
item.quantity = postdata["quantity"]
item.save()
data = json.dumps(True)
return HttpResponse(data, mimetype="application/json")
elif request.method == "DELETE":
item.delete()
data = json.dumps(True)
return HttpResponse(data, mimetype="application/json")
else:
return HttpResponseBadRequest("Invalid request")
因此,该方法将根据不同的请求类型执行不同的操作。
<强> 评论 强>
请注意,这是一个非常非常简单的演示。它没有考虑任何错误检查,用户身份验证等。但希望它会给你一些想法。