Вы можете получить доступ по глаголу http
class SoveView(View):
def get(self, request):
return #somestuff
def post(self, request)
return #somestuff
path('about/' SomeView.as_view())
При посещении about/
с запросом на получение SomeView.get
.Когда будет выполнен запрос с сообщением на about/
SomeView.post
.
В вашем случае, я думаю, вам понадобятся два разных класса, потому что у вас есть две get
конечные точки, что-то вроде:
class NewPosts(View):
def get(self, request):
return #somestuff
class OldPosts(View):
def get(self, request):
return #somestuff
path('newposts/', NewPosts.as_view()),
path('oldposts/', OldPosts.as_view()),
Если NewPosts
и OldPosts
имеют общее поведение, вы можете создать базовый класс или некоторую вспомогательную функцию
class PostsMixin(View):
def get(self, request):
if request.user.username == 'fake':
raise Exception()
# do something
class NewPosts(PostsMixin):
def get(self, request):
super().get(request)
return #somestuff
class OldPosts(PostsMixin):
def get(self, request):
super().get(request)
return #somestuff
path('newposts/', NewPosts.as_view()),
path('oldposts/', OldPosts.as_view()),
Вместо базового класса будет работать простая функциятоже
def common_stuff(request):
if request.user.username == 'fake':
raise Exception()
# do something
class NewPosts(View):
def get(self, request):
common_stuff(request)
return #somestuff
class OldPosts(View):
def get(self, request):
common_stuff(request)
return #somestuff
path('newposts/', NewPosts.as_view()),
path('oldposts/', OldPosts.as_view()),
Другим способом может быть использование того же представления, но передача параметра этому представлению
class Posts(View):
def get(self, request):
type = request.GET.get('type', 'new') # get type query param, if is not present the default will be new
if type == 'new': # /posts/?type=new
result = Category.objects.all()
elif type == 'old': #/posts/?type=old
result = OldCategory.objects.all()
else:
raise Http404() # just as example
return #somestuff
path('posts/', NewPosts.as_view()),
class Posts(View):
def get(self, request, type):
if type == 'new': # /posts/?type=new
result = Category.objects.all()
elif type == 'old': #/posts/?type=old
result = OldCategory.objects.all()
else:
raise Http404() # just as example
return #somestuff
path('posts/<str:type>/', NewPosts.as_view()),