2015-05-06 35 views
1

这是我使用DjangoRestFramework基本观点: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,我会返回一个html模板,它将位于我的Django App目录中名为“模板”的文件夹中。我被告知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?

回答

2

首先,有一些事情可以让Django Rest Framework更好地发挥角度。直到我决定尝试烬,我正在通过this utorial工作。要尽量为您的问题提供了一个有用的例子:

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

  2. 如果你正在做看似无处不在的单页面应用程序,那么你可以将index.html作为模板提供服务(即只需将你的默认主视图作为TemplateView以index.html作为模板)

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

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

+0

当你说“通常你想把你的DjangoRestFramework REST API放入类似/ api的东西。”你的意思是我需要DRF API作为它自己的应用程序吗?或者在settings.py文件所在的文件夹中?因为在你链接到的教程中(https://github.com/kevinastone/django-api-rest-and-angular/tree/master/example/api),看起来好像“example”是项目和“api “是'settings.py'文件所在的文件夹。它看起来像'api'基本上是它自己的应用程序(有models.py,serializers.py和urls.py),但没有views.py。该设置有点混乱。 – user2719875