2 python django django-rest-framework
我是Django REST Framework的新手.我有一个index.html,我有简单的表单来添加项目和后端与Django.我无法理解,我如何将index.html连接到Django REST Framework.我有下一个代码文件:
models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
category = models.CharField(max_length=100)
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
views.py
from django.shortcuts import render
from django.views.generic import TemplateView
from .models import Book
from rest_framework import viewsets
from .serializers import BookSerializer
class Index(TemplateView):
template_name = "index.html"
def get_context_data(self):
context = super(Index, self).get_context_data()
return context
class BookViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Book.objects.all().order_by('title')
serializer_class = BookSerializer
Run Code Online (Sandbox Code Playgroud)
urls.py
from django.conf.urls import url, include
from rest_framework import routers
from myapp import views
router = routers.DefaultRouter()
router.register(r'books', views.BookViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^$', views.Index, name='index'),
]
Run Code Online (Sandbox Code Playgroud)
serializers.py
from .models import Book
from rest_framework import serializers
class BookSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Book
fields = ('title','category')
Run Code Online (Sandbox Code Playgroud)
如果我运行localhost:8000/index我收到错误'找不到页面'.我无法理解我应该如何将我的html页面包含在django代码中.我应该使用router.register吗?
让我们从定义什么django-rest-framework
是什么,什么不是什么开始.
它是构建Web API的好工具包.这意味着您可以定义几个将处理传入的端点(url),requests
并返回response
in JSON
或XML
format.
它不是一个HTML渲染工具.这意味着您无法返回response
包含html代码的内容,以便在浏览器中呈现为页面.它将返回纯粹json
或xml
数据.
现在,您的问题包括两个问题:
index.html
页面.books
端点连接.关于问题1
检查TEMPLATES
设置.你index.html
放在哪里?django知道在哪里找到它吗?检查TEMPLATES
设置并确保您已正确设置.
关于问题2
由于django-rest-framework
端点处理传入的事实requests
,您需要生成这样的请求.但是,如果您只是在浏览器中访问端点,则页面将加载/重新加载,您将json
在页面上以表单形式查看端点中的数据.
为了使页面保持不变,但同时向端点发出请求,您需要在页面中使用ajax
(异步JavaScript和XML)index.html
.您可以ajax
使用以下方法之一发出请求:
XMLHttpRequest
类.看到这个问题和答案,看看如何做到这一点.jQuery
,它有一个jQuery.ajax()
提出ajax
请求的方法.ajax
调用的实现.检查他们的文档.基本上就是这样.祝好运!
归档时间: |
|
查看次数: |
4861 次 |
最近记录: |