将视图函数转换为django中的CBV

时间:2014-01-03 05:57:58

标签: django django-views

我正在尝试将我的观点转换为基于课程的观点用于学术目的,但我不知道从哪里开始,

这是我的观点

def friends(request):
if request.user.is_authenticated():
    form1 = FriendsForm(request.POST)
    form2 = request.POST.get('delete1',False)
    if form1.is_valid():
        form1 = form1.save(commit=False)
        form1.creator = request.user
        form1.save()
        send_mail('Confirmation email',
          # this is a link you wanted to
          "http://127.0.0.1:8000%s Please accept the request" % reverse('user_confirm',kwargs={'key': form1.key}),
            request.user.email, [form1.friend.email])
    if form2:
        user1 = User.objects.filter(username = form2)
        form3 = Friendship.objects.filter(friend = user1,creator=request.user)
        form3.delete()
    return render(request, 'mtweet/friends.html', {'FriendsForm':form1,'DeleteFriendForm':form2})
else:
    return HttpResponseRedirect(reverse('log-page'))

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

也许这可行(尚未测试):

from django.views.generic.edit import FormView ##### Import the FormView a Class Based View

基于类的视图:

    class Friends(FormView):
          template_name = 'mtweet/friends.html'
          form_class = FriendsForm
          success_url = '/myurl/'

          def post(self, request, *args, **kwargs):
             self.req = request
             form2 = self.req.POST.get('delete1',False)
             if form2:
                   user1 = User.objects.filter(username = form2)
                   form3 = Friendship.objects.filter(friend = user1,creator=request.user)
                   form3.delete()
             return super(Friends, self).post(request, *args,**kwargs)



          def form_valid(self, form):
              form = form.save(commit=False)
              form1.creator = self.request.user
              form1.save()
              ## send_mail
              return super(Friends, self).form_valid(form)

          def get_context_data(self, **kwargs)
              context = super(Friends, self).get_context_data(**kwargs)
              context['DeleteFriendForm'] = self.form2
              return context

您有四种方法可以执行request.user.is_authenticated

1:

from django.contrib.auth.decorators import login_required ##### import login required


class LoginRequiredMixin(object):

    @classmethod
    def as_view(cls):
        return login_required(super(LoginRequiredMixin, cls).as_view())

2:

from django.contrib.auth.decorators import login_required ##### import login required
from django.utils.decorators import method_decorator ## Import method decorator


class LoginRequiredMixin(object):

    @method_decorator(login_required)
     def dispatch(self, request, *args, **kwargs):
       return super(self.__class__, self).dispatch(request, *args, **kwargs)

在最后两项中,您必须将LoginRequiredMixin传递给Friends Class

class Friends(LoginRequiredMixin, FormView):
      ###### CODE ##########
  1. get方法中:

    您必须将get方法添加到Friends Class

     def get(self, request, *args, **kwargs):
         if not request.user.is_authenticated():
             return HttpResponseRedirect(reverse('log-page'))
    
  2. 您的网址必须是

    之类的内容
    url(r'^friends/$', Friends.as_view(), name='friends')
    

    4方式是在网址:

    url(r'^friends/$', login_required(Friends.as_view()), name='friends')
    

    如果您需要帮助,请希望这有助于您。