2015-05-22 5 views
-2

как я могу изменить эти взгляды класса, ориентированные на взгляды, я всегда хотел бы знать, как это сделать: спросмотры функций в класс на основе-просмотры

Я знаю, что класс Based-взгляды лучшх thatn вида фикции, но я не знаю разницы. Как я могу изменить FW на CBV и сделать то же самое.

def login(request): 
    context = RequestContext(request, { 
     'request': request, 'user': request.user 
     }) 
    return render(request, 'login.html') 

@login_required(login_url='/') 
def home(request): 
    return render_to_response('home.html') 

def logout(request): 
    auth_logout(request) 
    return redirect('/') 

Я бы очень признателен, если кто-то может помочь мне :)

EDIT

Прямо сейчас есть встроенные в представлениях, основанных класса для этих двух вещей, как LoginView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LoginView так гораздо проще сделать это с помощью CBV и LogoutView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LogoutView

Если вы хотите реализовать или изменить это, вы должны посмотреть на документацию, это действительно он lpfull для этого.

ответ

1
from django.contrib.auth.decorators import login_required 
from django.utils.decorators import method_decorator 
from django.views.generic.base import TemplateView, View 

class LoginTemplateView(TemplateView): 
    template_name = 'login.html' 

class HomeTemplateView(TemplateView): 
    template_name = 'home.html' 

    @method_decorator(login_required(login_url='/')) 
    def dispatch(self, request, *args, **kwargs): 
     return super(HomeTemplateView, self).dispatch(request, *args, **kwargs) 

class LogoutView(View): 
    def get(self, request, *args, **kwargs): 
     auth_logout(request) 
     return redirect('/') 

Я не тестировал его, но я думаю, что так. TemplateView передает данные запроса в шаблон, поэтому нам не нужно декларировать снова. Если вам нужно передать больше данных, вы можете переопределить метод get_context_data. На этой странице показаны все методы в CBV и поток запроса/ответа. https://ccbv.co.uk/projects/Django/1.8/django.views.generic.base/TemplateView/

+0

Это работа! Спасибо за ответ Харви, теперь я понимаю это намного лучше. Ты потрясающий: D Хорошая ссылка, кстати – ikenshu

Смежные вопросы