我是python世界的新手,现在我使用Rest Framework构建一个带有Django 1.8的应用程序,我想创建一个类视图来干我的代码。
例如,我想在我的系统中为学生提供班级视图
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class SnippetList(APIView):
def getWorstStudents(self, request, format=None):
# Logic here
如何在 urls.py 中指定指定的网址来点击此方法?
我还实现了 REST框架JWT Auth http://getblimp.github.io/django-rest-framework-jwt/用于令牌身份验证。
如何限制访问权限以仅允许经过身份验证的用户访问此网址?
提前谢谢!
答案 0 :(得分:3)
首先,从ModelViewSet
而不是APIView
继承您的观点。其次,在@list_route
方法中使用getWorstStudents
装饰器。第三,用路由器将urls.py
中的所有内容捆绑在一起。
应该看起来像(我还没有测试过代码):
class StudentsViewSet(viewsets.ViewSet):
@list_route(methods=['get'], permission_classes=(IsAuthenticated,)) # you can define who can access this view here
def getWorstStudents(self, request, format=None):
# Logic here
# routers.py
router = routers.DefaultRouter()
router.register(r'students', views.StudentsViewSet, base_name='student')
# urls.py
import .routers import router
urlpatterns = [
url(r'^', include(router.urls)),
]
路由器将生成一个名为student-getWorstStudents
的视图,该视图可从students/getWorstStudents
网址访问。
答案 1 :(得分:1)
您可以像任何其他Django应用documented here
一样设置网址# urls.py
from django.conf.urls import url
from somewhere import SnippetList
urlpatterns = [
url(r'^your/url/$', SnippetList.as_view()),
]
关于使用您的方法的DRY,您可以定义要响应的方法,并调用getWorstStudents
(顺便说一下,我称之为get_worst_students)。我们假设您要回复post
方法:
# views.py
from rest_framework.response import Response
def getWorstStudents(params)
class SnippetList(APIView):
def post(self, request, *args, **kwargs):
# call getWorstStudents method here and response a Response Object
您可以在getWorstStudents
类或其他文件中定义SnippetList
,以便在需要的地方导入。
最后,关于身份验证,DRF为此提供了类documented here。
从文档中,您需要在settings.py
文件中定义:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
在你的观点中使用它:
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication)
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
content = {
'user': unicode(request.user), # `django.contrib.auth.User` instance.
'auth': unicode(request.auth), # None
}
return Response(content)
您还可以定义自己的身份验证类,并在authentication_classes
元组中进行设置。 Custom authentication classes documented here.