Похоже, вы пытаетесь создать API с помощью Django. Вы можете прочитать здесь подробнее об API REST. Основная идея заключается в том, что ваш веб-сайт будет иметь набор командных ссылок / URL-адресов, где каждая ссылка будет либо выполнять какое-либо действие (обновление базы данных и т. Д.), Просто возвращать некоторую информацию (чаще всего в JSON - например, возвращать объект из базы данных) , или сделаю оба.
Что вам нужно будет сделать, это составить список всех возможных команд, которые API будет обрабатывать. Это будет включать все команды извлечения, вставки, обновления и удаления данных.
Для этого примера предположим, что единственной задачей приложения является управление товарами в магазине. Это очень упрощенная демонстрация, однако она должна объяснить все.
Вот модель Django (в приложении Store
django):
class Item(models.Model):
name = models.CharField(max_length=255)
price = models.IntegerField() # assume the price is always int
quantity = models.IntegerField()
Итак, давайте предположим, что возможные команды для API:
- Получить информацию о конкретном предмете
- Получить информацию обо всех предметах
- Обновление информации для конкретного элемента
- Удалить конкретный предмет
- Добавить товар в магазин
Структура URL для всех команд
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. Здесь - это документация 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")
Итак, этот метод будет выполнять различные действия в соответствии с различным типом запроса.
Комментарии
Обратите внимание, что это очень, очень простая демонстрация. Он не учитывает проверку ошибок, аутентификацию пользователей и т. Д. Но, надеюсь, он даст вам некоторые идеи.