相关疑难解决方法(0)

如何在路由器上注册单个视图(而不是视图集)?

我正在使用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)

python django django-rest-framework

46
推荐指数
1
解决办法
8758
查看次数

将APIView添加到Django REST Framework Browsable API

我一直在使用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)

目前,只显示令牌端点.

谢谢.

python django rest django-rest-framework

27
推荐指数
2
解决办法
2万
查看次数

在Django Rest Framework中路由API视图?

使用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路由器 - 用于路由该视图?

django-rest-framework

18
推荐指数
2
解决办法
4993
查看次数

Django Rest Framework:使用路由器注册基于纯函数的视图,以便它出现在 API 根目录下

这是我的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 …

python django django-rest-framework

7
推荐指数
1
解决办法
1936
查看次数

标签 统计

django-rest-framework ×4

django ×3

python ×3

rest ×1