Eli*_*era 5 django rest deserialization
我,几天前盯着使用REST Framework,但是我找不到如何使用参数创建一个自定义的url,在Django中这种url是这样编写的.
url(r'^author/(?P<author>\d+)/books/$', BooksList.as_view(), name = 'books'),
Run Code Online (Sandbox Code Playgroud)
为了这
http://mysite/author/1/books
Run Code Online (Sandbox Code Playgroud)
我试试:
router.register(r'author/(?P<author>\d+)/books', BooksList, base_name = 'Books')
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
这是我的代码.
# models.py
class Author(models.Model):
Name = models.CharField(max_length = 50)
class Book(models.Model):
Book = models.ForeignKey(Author)
Title = models.CharField(max_length = 200)
def __unicode__(self):
return self.Title
# views.py
class BooksList(viewsets.ModelViewSet):
model = Book
serializer_class = BookSerializer
def get_queryset(self):
author = self.kwargs['author']
queryset = Book.objects.filter(Author = author)
return queryset
# urls.py
router = routers.DefaultRouter()
router.register(r'books', BooksList, base_name = 'Books')
admin.autodiscover()
urlpatterns = patterns('',
url(r'^api/', include('rest_framework.urls', namespace = 'rest_framework')),
)
Run Code Online (Sandbox Code Playgroud)
我解决了这个问题,阅读教程第二部分“向我们的 URL 添加可选格式后缀”,
最后我得到这样的网址:
http://localhost:8001/books/author/1/
Run Code Online (Sandbox Code Playgroud)
这是我的代码。
# urls.py
url(r'^books/author/(?P<author>\d+)/$', BooksByAuthor, name='BooksByAuthor'),
# serializer.py
class BooksSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('id', 'Title')
# views.py
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from .serializers import *
class JSONResponse(HttpResponse):
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
def BooksByAuthor(request, author):
try:
books = Book.objects.filter(Author = author).order_by('Title')
except Book.DoesNotExist:
return HttpResponse(status=400)
if request.method == 'GET':
serializer = BooksSerializer(books)
return JSONResponse(serializer.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3534 次 |
| 最近记录: |