我正在使用Django REST框架,并一直在尝试创建一个返回一小部分信息的视图,并在我的路由器上注册它.
我有四个存储信息的模型,所有模型都有一个created_time字段.我试图在一个视图中创建一个返回最新对象(基于created_time)的视图,其中只返回四个创建时间.
因此,视图中可能的JSON输出看起来像
{
"publish_updatetime": "2015.05.20 11:53",
"meeting_updatetime": "2015.05.20 11:32",
"training_updatetime": "2015.05.20 15:25",
"exhibiting_updatetime": "2015.05.19 16:23"
}
Run Code Online (Sandbox Code Playgroud)
我也希望在我的路由器上注册这个视图,因此当加载API根时,它会显示在我的其他端点上.
router.register(r'updatetime', views.UpdateTimeView)
Run Code Online (Sandbox Code Playgroud)
以下是我尝试使用的四种型号
class Publish(models.Model):
user = models.ForeignKey(MyUser)
name = models.CharField(max_length=50)
created_time = models.DateTimeField( default=datetime.now)
class Meeting(models.Model):
user = models.ForeignKey(MyUser)
name = models.CharField(max_length=50)
file_addr = models.FileField(upload_to=get_file_path)
created_time = models.DateTimeField(default=datetime.now)
class Training(models.Model):
user = models.ForeignKey(MyUser)
name = models.CharField(max_length=50)
image = models.ImageField(upload_to=get_file_path, max_length=255)
created_time = models.DateTimeField(default=datetime.now)
class Exhibiting(models.Model):
user = models.ForeignKey(MyUser)
name = models.CharField(max_length=50)
file_addr = models.FileField(upload_to=get_file_path)
created_time = …Run Code Online (Sandbox Code Playgroud) 我一直在使用Django REST Framework开发REST后端.
但是,我在向Web浏览器API添加APIView实例时遇到问题.
该文件与以前的答案表明,所有我需要做的就是添加一个文档字符串.
它对我不起作用.
我假设可浏览的API仅显示Viewset端点已在路由器中注册.
如果是这样,我如何将APIView类注册到路由器?
以下是我当前的路由器代码:
router = DefaultRouter(trailing_slash=False)
router.register(r'tokens', TokenViewSet, base_name='token')
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include(router.urls)),
url(r'^api/register$', RegisterUser.as_view(), name='register_user'),
url(r'^api/auth$', ObtainAuthToken.as_view(), name='obtain_token'),
url(r'^api/me$', ObtainProfile.as_view(), name='obtain_profile'),
url(r'^api/recover$', FindUsername.as_view(), name='recover_username'),
)
Run Code Online (Sandbox Code Playgroud)
目前,只显示令牌端点.
谢谢.
使用Django Rest Framework 有路由APIViews(即,不是 ViewSets)的常见模式吗?
例如,如果我有一个带有可选参数的API视图:
class ReportView(APIView):
def get(self, request, report_name=None):
# … stuff …
return Response(report)
Run Code Online (Sandbox Code Playgroud)
是否有任何标准模式 - 除了写出标准的Django URL路由器 - 用于路由该视图?
这是我的views.py:
class ChoicesViewSet(viewsets.ModelViewSet):
queryset = SingleChoice.objects.all()
serializer_class = SingleChoiceSerializer
...
class AssessmentTakersViewSet(viewsets.ModelViewSet):
queryset = AssessmentTaker.objects.all()
serializer_class = AssessmentTakersSerializer
...
@api_view(['POST'])
@parser_classes((JSONParser,))
def studio_create_view(request, format=None):
""""
A view that accept POST request with JSON content and in turn build out the
questions and choices. Post with application/json type.
"""
...
Run Code Online (Sandbox Code Playgroud)
这是我的urls.py:
urlpatterns = [
# http://localhost:8000/survey/api/studio-create
path('api/studio-create', views.studio_create_view, name='studio-create-api'),
]
# drf config
router = routers.DefaultRouter()
router.register('api/choices', views.ChoicesViewSet)
router.register('api/assessment-takers', views.AssessmentTakersViewSet)
urlpatterns += router.urls
Run Code Online (Sandbox Code Playgroud)
这在功能上有效,并且被认为是功能完整的,但由于studio-create_view未在路由器中注册,因此该路径不会显示在 API …