是否有可能將基於類的視圖委託給特定的基於類的視圖?具體來說,我想要做的是指向一個名爲「home」的視圖,以及如果用戶已登錄,則將委託給View A的視圖,如果沒有用戶登錄,則視圖B也可以。重定向到一個不同的URL。我不確定這裏最好的做法是什麼。基於類的視圖委託給另一個視圖
4
A
回答
7
你可以調用另一個視圖從視圖中在網址
class HomeView(TemplateView):
template_name="index.html"
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
view=UserHomeView.as_view()
return view(request, *args, **kwargs)
return super(HomeView, self).dispatch(request, *args, **kwargs)
class UserHomeView(TemplateView):
template_name="user.html"
1
您可以直接重定向到一個不同的URL使用的相同方式和網址也由一個基於類視圖服務。
urls.py
url(r'^$', HomeView.as_view(), name='home'),
url(r'^login/', LoginView.as_view(), name='login'),
url(r'^welcome/$', WelcomeView.as_view(), name='welcome')
views.py
class HomeView(TemplateView):
def get(self, request, *args, **kwargs):
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('welcome'))
else:
return HttpResponseRedirect(reverse('login'))
class WelcomeView(TemplateView):
def get(self, request, *args, **kwargs):
#do something
class LoginView(TemplateView):
def get(self, request, *args, **kwargs):
#show login page
0
,以確保用戶進行驗證
最佳做法是使用密新:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
class LoginRequiredMixin(object):
u"""Ensures that user must be authenticated in order to access view."""
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)
class MyView(LoginRequiredMixin, TemplateView):
def get(self, request, *args, **kwargs):
#do something
相關問題
- 1. 從另一個基於類的視圖Django調用基於視圖
- 2. 委託子視圖
- 3. 事件委託給子視圖Backbone.js的
- 4. 使用委託給視圖控制器
- 5. Oracle基於另一個視圖創建視圖
- 6. 基於Eclipse插件中另一個視圖呈現視圖
- 7. Django:在基於類的視圖中添加另一個子類
- 8. 將委託傳遞給另一個視圖控制器的代表
- 9. 委託模態視圖swift
- 10. Backbone.LayoutManager委託視圖事件
- 11. iphone addSubView委託從另一個視圖控制器
- 12. 基於視圖的視圖基於等
- 13. 基於類的視圖和基於視圖的功能
- 14. Android:Draggable視圖來顯示另一個視圖(類似於Facebook)
- 15. 基於類的基於Django的視圖
- 16. 委託給基類實現
- 17. 把另一個UIViewController的視圖放在一個「主」UIViewController中 - 委託方法
- 18. Android ConstraintLayout - 將一個視圖置於另一個視圖上
- 19. 從一個視圖控制器到另一個視圖控制器進行委託調用
- 20. 將視圖中的數據傳遞給另一個視圖
- 21. 將基於功能的視圖轉換爲僅基於視圖的基於類的視圖(對象)
- 22. 如何從基於視圖的應用程序中打開另一個視圖
- 23. 將另一個視圖添加到基於視圖的應用程序
- 24. 將視圖從一個視圖移動到另一個視圖
- 25. 視圖或委託中的iOS AsyncSocket
- 26. 將對話框視圖分配給另一個視圖
- 27. 將列表視圖傳遞給另一個列表視圖
- 28. 用另一個視圖替換視圖
- 29. 從另一個視圖調用視圖
- 30. 從另一個視圖呈現視圖
當然,但可以這樣做僅用於爲登錄用戶提供服務的視圖。對於給定的URL,您的答案不解決如何針對登錄用戶使用1個視圖以及針對未登錄用戶使用1個視圖。 – dgrant 2013-04-25 04:32:17