War*_*arz 1 django backbone.js django-rest-framework
当使用backbone.js和django以及Django-restframework时,我对路由和url设置非常困惑.
例如,我有一个基于类的视图为我的一个url定义,我想使用backbone.js来更新div显示的学生:
url(r'^home/students/$', views.StudentList.as_view()),
class StudentList(APIView):
"""
List all students
"""
def get(self, request, format=None):
students = Person.objects.filter(person_type = Person.STUDENT)
serializer = PersonSerializer(students)
return Response(serializer.data, "core/teachers/teacher_teaching.html")
def pre_save(self, obj):
obj.owner = self.request.user
Run Code Online (Sandbox Code Playgroud)
Backbone路由如何适应django的url路由.我有一个文件router.js,像这样:
function($,jqueryui, _, Backbone, HomeView, StudentsView) {
var AppRouter = Backbone.Router.extend({
routes: {
// Define some URL routes
':home': 'showStudents',
'users': 'showContributors',
// Default
'*actions': 'defaultAction'
}
});
var initialize = function(){
var app_router = new AppRouter;
app_router.on('route:showStudents', function(){
// Call render on the module we loaded in via the dependency array
var studentsView = new StudentsView();
studentsView.render();
});
Run Code Online (Sandbox Code Playgroud)但这些路线从未实际发表过我的看法?
使用REST框架时模板适合哪里?
它没有; Django模板适用于普通的Django HTML页面,而不适用于REST框架API.REST框架API响应是以编程方式生成的文档(通常是JSON或XML),因此它们不需要模板.
Backbone路由如何适应django的url路由
它们100%完全分开.假设你有一个像这样的网址:
www.example.com/foo/bar#baz
Run Code Online (Sandbox Code Playgroud)
Django将处理这个URL:
www.example.com/foo/bar
Run Code Online (Sandbox Code Playgroud)
而Backbone将处理剩余的:
#baz
Run Code Online (Sandbox Code Playgroud)
当然,这假设Django返回一个使用Backbone的网页; 如果没有,那么它#baz甚至都不会发挥作用.
作为一个快速摘要,当你访问一个网址像上面,浏览器会询问www.example.com/的/foo/bar.这是你urls.py在Django进来的时候; 它有:
url(r'^foo/bar/?$', views.FooBar.as_view()),
Run Code Online (Sandbox Code Playgroud)
所以你的网络服务器知道发回任何views.FooBar.as_view()给它的东西(无论是REST框架生成的JSON文档还是旧式的Django HTML文档).
一旦该文档返回到服务器,它就会呈现它,这就是Backbone及其路由器等客户端代码轮到他们的地方.Backbone Router(无论何时调用Backbone.history.start())查看URL(即.window.location)并查找URL 的锚点或"哈希"部分(例如#baz).然后,它将URL的该部分与其路由列表进行比较(类似于您的Web服务器将早期部分与urls.py进行比较),如果找到匹配,则"将您发送到页面".
这是理解的关键,它根本不会送你到任何地方; 所有它真正做的是改变URL的哈希部分,然后运行一些操纵DOM的Javascript.因此,Backbone路由器不可能将您发送到Django URL; 如果你想要一个服务器路由,你需要使用AJAX或window.location =.
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |