是否有可能將基於類的視圖委託給特定的基於類的視圖?具體來說,我想要做的是指向一個名爲「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. 將PickerView的代表委託給另一個視圖
- 2. 從另一個基於類的視圖Django調用基於視圖
- 3. 委託崩潰時,在另一個類,而不是主視圖
- 4. 委託子視圖
- 5. 事件委託給子視圖Backbone.js的
- 6. 使用委託給視圖控制器
- 7. 更改視圖顏色基於另一個視圖的顏色
- 8. Oracle基於另一個視圖創建視圖
- 9. Django:在基於類的視圖中添加另一個子類
- 10. 將委託傳遞給另一個視圖控制器的代表
- 11. WKWebView滾動視圖委託
- 12. 委託模態視圖swift
- 13. Backbone.LayoutManager委託視圖事件
- 14. iphone addSubView委託從另一個視圖控制器
- 15. 基於視圖的視圖基於等
- 16. 類視圖基於功能視圖
- 17. 基於Django的類視圖調用的另一個
- 18. Rest框架基於部分視圖的基於類的視圖
- 19. 基於類的視圖和基於視圖的功能
- 20. Android:Draggable視圖來顯示另一個視圖(類似於Facebook)
- 21. CLLocationManager委託/多個視圖控制器
- 22. 委託給基類實現
- 23. 基於類的基於Django的視圖
- 24. Xcode的應用程序委託給每個視圖控制器
- 25. 把另一個UIViewController的視圖放在一個「主」UIViewController中 - 委託方法
- 26. Android ConstraintLayout - 將一個視圖置於另一個視圖上
- 27. 設置一個UIimage視圖等於另一個UIimage視圖
- 28. 從一個視圖控制器到另一個視圖控制器進行委託調用
- 29. 類基於視圖指定
- 30. 將視圖中的數據傳遞給另一個視圖
當然,但可以這樣做僅用於爲登錄用戶提供服務的視圖。對於給定的URL,您的答案不解決如何針對登錄用戶使用1個視圖以及針對未登錄用戶使用1個視圖。 – dgrant 2013-04-25 04:32:17