我只是想知道你认为Django中基于类的视图的最佳实践是什么。
一方面,你有类似的东西使用GET和POST。
class User_Logout(View):
def get(self, request):
auth.logout(request)
return HttpResponseRedirect(reverse('frontend-login'))
这将映射到包含以下内容的urls.py:
from frontend.views import User_Logout
urlpatterns = patterns('',
url(r'logout$', User_Logout.as_view(), name="frontend-logout"),
)
或者,使用特定方法的东西。例如,我可以创建一个名为Score_Dashboard(View)的类,将与分数相关的每个页面封装为该类的方法。
有些事情......
class Scores(View):
def score_one(self, request):
return HttpResponseRedirect('http://www.youtube.com')
def score_two(self, request):
return HttpResponseRedirect('http://www.youtube.com')
然后将这些作为urls.py中每个类的实例的方法调用:
from views import Scores
scores = Scores()
urlpatterns = patterns('',
url(r'score_one$', scores.score_two, name="score_one"),
url(r'score_two$', scores.score_two, name="score_one"),
)
所以我的问题是,哪一个更适合'甚至可能更好的'为什么?
另一种问这个问题的方法是,每个页面都应该有自己的类吗?
谢谢!
答案 0 :(得分:1)
如果您不需要使用基于类的视图,请不要使用它。
视图的最简单定义是使用函数。您的视图应该已按照应用进行组织,因此您无需创建其他子组(或者如果确实想要在应用内部组织视图,只需创建两个不同的视图文件):
def score_one(request):
return HttpResponseRedirect('http://www.youtube.com')
def score_two(request):
return HttpResponseRedirect('http://www.youtube.com')
如果您正在扩展Django提供的内置类,制作对象列表,更改表单等,则应该颠倒CBV。
答案 1 :(得分:1)
关于您的问题,您可以更轻松地在网址中捕获不同的args并在一个视图中处理它们:
def scores(request, score):
if score == "score_one":
# do something
if score == "score_two":
# do something else
urlpatterns = patterns('',
url(r'(?P<score>score_one|score_two)$', scores, name="scores"),
)
在这种情况下使用基于类的视图可能不需要(特别是如果你只是重定向)。