是否有可能将基于类的视图委托给特定的基于类的视图?具体来说,我想要做的是指向一个名为“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