如何在模板中使用 django-rest-framework
How to work with django-rest-framework in the templates
请多多包涵。我刚学django-rest-framework。而且我好像真的抓不住。
型号:
class Day(models.Model):
date = models.DateField(default=date.today)
class ToDo(models.Model):
date = models.ForeignKey(Day)
name = models.CharField(max_length=100)
very_important = models.BooleanField(default=False)
finished = models.BooleanField(default=False)
普通视图:
def home(request):
days = Day.objects.all()
return render(request, 'test.html', {
'days':days
})
创建了一个 serializers.py 文件:
class DaySerializer(serializers.ModelSerializer):
class Meta:
model = Day
field = ('id', 'date')
class ToDoSerializer(serializers.ModelSerializer):
date = DaySerializer()
class Meta:
model = ToDo
field = ('id', 'date', 'name', 'very_important', 'finished')
在这之后我迷路了。假设我去url('^api/$')
,如何获取Day的json对象及其相关对象?
基本上这就是我想要的显示方式:
现在如何使用 django-rest-framework 在模板中看起来像上面那样。
更新
我想做这样的事情:
通过url获取json对象(例如:/api/.json)
[
{
"id": 1,
"date": "2015-06-23",
"day_todo_set": [
{
"id":5
"name": "Bloom",
"very_important": True,
"finished": False
},
{
"id":4
"name": "REST",
"very_important": True,
"finished": True
}
]
},
{
"id": 2,
"date": "2015-06-22",
"day_todo_set": [
{
"id":3
"name": "Alarm 1",
"very_important": True,
"finished": True
},
{
"id":2
"name": "Meet up with SIS",
"very_important": True,
"finished": False
},
{
"id":1
"name": "Buy Milk",
"very_important": True,
"finished": False
}
]
}
]
操纵对象
js:
$(function () {
var $days = $('#days')
$.ajax({
type: 'GET',
url: '/api/.json',
success: function(days) {
$.each(days, function(i, day) {
$days.append('<li>date: '+ day.date+ '</li>')
});
}
});
})
rest framework 并非旨在服务于在浏览器中显示的 html。它旨在将数据提供给另一个服务(移动设备、重型客户端、其他服务器等)
documentation第一行:
Django REST framework is a powerful and flexible toolkit that makes it
easy to build Web APIs.
如果要在浏览器中显示结果,请使用模板,不要使用 rest
model.py:
class Day(models.Model):
date = models.DateField(default=date.today)
def get_todo_list(self):
return self.day_todo_set.order_by('-id')[:5]
class ToDo(models.Model):
date = models.ForeignKey(Day, related_name="day_todo_set")
name = models.CharField(max_length=100)
very_important = models.BooleanField(default=False)
finished = models.BooleanField(default=False)
在serializers.py
class ToDoSerializer(serializers.ModelSerializer):
class Meta:
model = ToDo
field = ('id', 'date', 'name', 'very_important', 'finished')
class DaySerializer(serializers.ModelSerializer):
day_todo_set = ToDoSerializer(many=True, source="get_todo_list")
class Meta:
model = Day
field = ('id', 'date', 'day_todo_set')
使用序列化程序编写一个 Django 视图。
@csrf_exempt
def day_list(request):
"""
List all code snippets, or create a new snippet.
"""
if request.method == 'GET':
snippets = Day.objects.order_by('-date')[:10]
serializer = DaySerializer(snippets, many=True)
return JSONResponse(serializer.data)
在你的urls.py
url(r'^api/$', views.day_list, name='days_list')
请多多包涵。我刚学django-rest-framework。而且我好像真的抓不住。
型号:
class Day(models.Model):
date = models.DateField(default=date.today)
class ToDo(models.Model):
date = models.ForeignKey(Day)
name = models.CharField(max_length=100)
very_important = models.BooleanField(default=False)
finished = models.BooleanField(default=False)
普通视图:
def home(request):
days = Day.objects.all()
return render(request, 'test.html', {
'days':days
})
创建了一个 serializers.py 文件:
class DaySerializer(serializers.ModelSerializer):
class Meta:
model = Day
field = ('id', 'date')
class ToDoSerializer(serializers.ModelSerializer):
date = DaySerializer()
class Meta:
model = ToDo
field = ('id', 'date', 'name', 'very_important', 'finished')
在这之后我迷路了。假设我去url('^api/$')
,如何获取Day的json对象及其相关对象?
基本上这就是我想要的显示方式:
现在如何使用 django-rest-framework 在模板中看起来像上面那样。
更新
我想做这样的事情:
通过url获取json对象(例如:/api/.json)
[ { "id": 1, "date": "2015-06-23", "day_todo_set": [ { "id":5 "name": "Bloom", "very_important": True, "finished": False }, { "id":4 "name": "REST", "very_important": True, "finished": True } ] }, { "id": 2, "date": "2015-06-22", "day_todo_set": [ { "id":3 "name": "Alarm 1", "very_important": True, "finished": True }, { "id":2 "name": "Meet up with SIS", "very_important": True, "finished": False }, { "id":1 "name": "Buy Milk", "very_important": True, "finished": False } ] } ]
操纵对象
js:
$(function () {
var $days = $('#days')
$.ajax({
type: 'GET',
url: '/api/.json',
success: function(days) {
$.each(days, function(i, day) {
$days.append('<li>date: '+ day.date+ '</li>')
});
}
});
})
rest framework 并非旨在服务于在浏览器中显示的 html。它旨在将数据提供给另一个服务(移动设备、重型客户端、其他服务器等)
documentation第一行:
Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs.
如果要在浏览器中显示结果,请使用模板,不要使用 rest
model.py:
class Day(models.Model):
date = models.DateField(default=date.today)
def get_todo_list(self):
return self.day_todo_set.order_by('-id')[:5]
class ToDo(models.Model):
date = models.ForeignKey(Day, related_name="day_todo_set")
name = models.CharField(max_length=100)
very_important = models.BooleanField(default=False)
finished = models.BooleanField(default=False)
在serializers.py
class ToDoSerializer(serializers.ModelSerializer):
class Meta:
model = ToDo
field = ('id', 'date', 'name', 'very_important', 'finished')
class DaySerializer(serializers.ModelSerializer):
day_todo_set = ToDoSerializer(many=True, source="get_todo_list")
class Meta:
model = Day
field = ('id', 'date', 'day_todo_set')
使用序列化程序编写一个 Django 视图。
@csrf_exempt
def day_list(request):
"""
List all code snippets, or create a new snippet.
"""
if request.method == 'GET':
snippets = Day.objects.order_by('-date')[:10]
serializer = DaySerializer(snippets, many=True)
return JSONResponse(serializer.data)
在你的urls.py
url(r'^api/$', views.day_list, name='days_list')