DjangoRestFramework - 如何自定义前端?

时间:2015-05-06 22:23:01

标签: django angularjs django-rest-framework frontend

这是我使用DjangoRestFramework的基本视图:

class user_list(APIView):
    """
    List all users, or create a new user.
    """
    def get(self, request):
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = UserSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

当我转到调用此视图的URL(localhost:8000 / CMS / users)时,DjangoRestFramework已经有一个前端说:

GET /CMS/users
HTTP 200 OK
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json

[
    {
        "username": "t",
    }
]

如何自定义?我想在前端使用AngularJS。我知道如果没有DjangoRestFramework,我会返回一个html模板,该模板将位于我的Django App目录中名为" Templates"的文件夹中。我已经被告知DjangoRestFramework很有用,因为我可以创建一个返回JSON对象的RESTful API。我尝试将以下内容添加到我的settings.py文件中:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    )
}

但我仍然无法弄清楚如何自定义Django应用程序的前端。我知道有:

renderer_classes = (TemplateHTMLRenderer,)

我可以在我的视图中返回一个html页面,如下所示:

return Response({'user': self.object}, template_name='user_detail.html')

但是没有返回实际的HTML页面,这违背了DjangoRestFramework返回JSON对象和创建RESTful API的能力?

1 个答案:

答案 0 :(得分:2)

首先,有些事情可以让Django Rest Framework更好地发挥角度。在我决定尝试使用ember之前,我正在研究this utorial。试着为您的问题提供有用的示例:

  1. 通常,您希望将DjangoRestFramework REST Api放在/ api之类的内容中。

  2. 如果您正在进行看似无处不在的单页应用程序,那么您可以将index.html作为模板提供(即将您的默认主视图设为以index.html为模板的TemplateView)

  3. 然后你会有你的角度html模板和你的角度/ jquery /等。 javsascripts和你的css文件作为普通的静态文件。注意,您通常不希望django模板生成角度代码。首先,它使调试更加困难,其次,默认的角度和django模板语法使用相同的<%字符,这意味着您必须小心确保不会尝试解释其他模板代码

  4. 当你加载http://yourserver/时,这将打开index.html页面,然后拉下有意义的东西,然后开始对你的REST api进行RESTful调用以生成数据。请注意,您可以开始混合使用Django表单等,但我建议保持简单,然后在完成基本操作后阅读链接的文章(或其他文章)。