2012-04-23 27 views
10

मैं Django के साथ नए हूँ और मैं djangoproject.com पर 4 भाग ट्यूटोरियल समाप्तDjango जेनेरिक डेकोरेटर का उपयोग कर दृश्य login_required

मेरे समस्या मैं अपने चुनाव एप्लिकेशन पर एक लॉगिन प्रमाणीकरण रखना चाहते है। मैंने सजावटी @login_required का उपयोग किया है और यह ठीक से काम करता है लेकिन मेरे views.py के पास केवल वोट() विधि है।

के तहत मेरे views.py "चुनाव फ़ोल्डर"

from django.shortcuts import render_to_response, get_object_or_404 
from django.http import HttpResponseRedirect, HttpResponse 
from django.contrib.auth.decorators import login_required 
from django.views.decorators.cache import never_cache 
from django.core.urlresolvers import reverse 
from django.template import RequestContext 
from polls.models import Poll, Choice 


@login_required 
@never_cache 
def vote(request, poll_id): 
    p = get_object_or_404(Poll, pk=poll_id) 
    try: 
     selected_choice = p.choice_set.get(pk=request.POST['choice']) 
    except (KeyError, Choice.DoesNotExist): 
     return render_to_response('polls/detail.html', { 
      'poll': p, 
      'error_message': "You didn't select a choice.", 
     }, context_instance=RequestContext(request)) 
    else: 
     selected_choice.votes += 1 
     selected_choice.save() 
     return HttpResponseRedirect(reverse('poll_results', args=(p.id,))) 
    return HttpResponse("You're voting on poll %s." % poll_id) 

के तहत मेरे urls.py "चुनाव फ़ोल्डर"

from django.conf.urls.defaults import patterns, include, url 
from django.views.generic import DetailView, ListView 
from polls.models import Poll 

urlpatterns = patterns('', 
    url(r'^$', 
     ListView.as_view(
      queryset = Poll.objects.order_by('-pub_date')[:5], 
      context_object_name = 'latest_poll_list', 
      template_name = 'polls/index.html'), name='poll_lists'), 
    url(r'^(?P<pk>\d+)/$', 
     DetailView.as_view(
      model = Poll, 
      template_name = 'polls/detail.html'), name='poll_details'), 
    url(r'^(?P<pk>\d+)/results/$', 
     DetailView.as_view(
      model = Poll, 
      template_name = 'polls/results.html'), name = 'poll_results'), 
    url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'), 
) 

मेरी urls.py के तहत मैं सामान्य दृश्यों का उपयोग कर सकते है।

समस्या यह है कि: मैं चुनाव ऐप के "अनुक्रमणिका" के तहत आवश्यक लॉगिन कैसे रखूंगा। ताकि उपलब्ध चुनाव देखने से पहले उपयोगकर्ता पहले लॉगिन करेगा।

वर्तमान है: मैंने अपने views.py और विधि वोट() के तहत आवश्यक लॉगिन का उपयोग किया है, इसे वोटिंग के बाद लॉगिन की आवश्यकता होगी।

कोई भी मेरी मदद कर सकता है?

धन्यवाद, जस्टिन

उत्तर

22

1nd दृष्टिकोण

urls.py में:

urlpatterns = patterns('', 
    url(r'^$', 
     login_required(ListView.as_view(
      queryset = Poll.objects.order_by('-pub_date')[:5], 
      context_object_name = 'latest_poll_list', 
      template_name = 'polls/index.html'), name='poll_lists')), 
) 

2 दृष्टिकोण

views.py में:

+०१२३५१६४१०६१
class IndexView(ListView): 
    queryset = Poll.objects.order_by('-pub_date')[:5] 
    context_object_name = 'latest_poll_list' 
    template_name = 'polls/index.html' 

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

तो urls.py

urlpatterns = patterns('', 
     url(r'^$', 
      IndexView.as_view(), name='poll_lists'), 
    ) 
+0

पकड़ा ImportError में जबकि प्रतिपादन: नाम ListVieiw आयात नहीं कर सकते << जब मैं अपने urls.py जवाब – justin

+0

मैं अपने जवाब – San4ez

+0

मैं एक ही त्रुटि प्राप्त अद्यतन का उपयोग मैं इस त्रुटि मिलती है, मैं दूसरे दृष्टिकोण का पालन करता हूं – justin

संबंधित मुद्दे