DjangoRestFramework - 如何自定义前端?(DjangoRestFramewor

2019-10-23 00:12发布

这是我使用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(本地主机:8000 / CMS /用户),DjangoRestFramework已经有一个前端,其表示:

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

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

如何定制呢? 我想在前端使用AngularJS。 我知道,如果没有DjangoRestFramework,我将返回其将设在我的Django应用程序目录中一个名为“模板”文件夹中的HTML模板。 我已经告诉DjangoRestFramework是有用becauase我可以创建一个RESTful API,返回JSON对象。 我尝试添加以下到我的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能力的目的是什么?

Answer 1:

首先,有一些事情,使Django的REST框架具有角发挥得更好。 直到我决定尝试烬,我是通过工作这个utorial 。 要尽量为您的问题提供了一个有用的例子:

  1. 通常,您想要把你DjangoRestFramework REST API中类似/ API。

  2. 如果你正在做看似ubiquitiious单页的应用程序,你就可以有index.html的得到服务了作为模板(即只需要您的默认主页视图与index.html的一个TemplateView作为模板)

  3. 然后,您将有您的角度HTML模板和您的角/ jQuery的/等。 javsascripts和你的CSS文件作为普通的静态文件。 NB,你通常不希望有Django模板生成角码。 首先,它使事情变成一种痛苦的调试,其次,默认角度和Django的模板语法使用相同的<%字符,这意味着你必须要小心,以确保一个不尝试解释别人的代码模板化。

当加载的http:// yourserver / ,这将打开index.html页面,然后拉低角的东西,然后开始进行基于REST调用您的REST API生成数据。 请注意,您可以开始在东西使用Django表单等混合,但我建议你保持简单,然后阅读链接的文章(或其它)一旦你有基础去。



文章来源: DjangoRestFramework - How do I customize the frontend?