你可以通过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()),