这是我使用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的能力?
答案 0 :(得分:2)
首先,有些事情可以让Django Rest Framework更好地发挥角度。在我决定尝试使用ember之前,我正在研究this utorial。试着为您的问题提供有用的示例:
通常,您希望将DjangoRestFramework REST Api放在/ api之类的内容中。
如果您正在进行看似无处不在的单页应用程序,那么您可以将index.html作为模板提供(即将您的默认主视图设为以index.html为模板的TemplateView)
然后你会有你的角度html模板和你的角度/ jquery /等。 javsascripts和你的css文件作为普通的静态文件。注意,您通常不希望django模板生成角度代码。首先,它使调试更加困难,其次,默认的角度和django模板语法使用相同的<%字符,这意味着您必须小心确保不会尝试解释其他模板代码
当你加载http://yourserver/时,这将打开index.html页面,然后拉下有意义的东西,然后开始对你的REST api进行RESTful调用以生成数据。请注意,您可以开始混合使用Django表单等,但我建议保持简单,然后在完成基本操作后阅读链接的文章(或其他文章)。