@login_required导致问题

时间:2016-02-29 13:14:40

标签: python django django-views

美好的一天,我有以下观点:

class BookList(RequireLoginMixin, generic.ListView):
    model = Book
    template_name = 'book/list.html'

@login_required(login_url='/login/')
def fetch_book_author(request):
      context = {"context": Book.objects.all()}
      return render(request, 'book/pages/authors.html', context)

class RequireLoginMixin(object):
 @classmethod
 def as_view(cls, **initkwargs):
    view = super(RequireLoginMixin, cls).as_view(**initkwargs)
    return login_required(view)

我试图拒绝访问除主页之外的所有页面。我在应用装饰器或mixin后试图访问的任何页面都给出了以下错误:

^__debug__/
^admin/
^mwf/
The current URL, accounts/login/, didn't match any of these.

这是我的网址配置:

app_name = 'bookApp'
urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home'),
    url(r'^about/$', AboutView.as_view(), name='about'),
    url(r'^welcome/$', WelcomeView.as_view(), name='welcome'),
    url(r'^fetch-books/$', fetch_book_author, name='fetch'),
    url(r'^books/$', BookList.as_view(), name='books'),
    url(r'^login/$', 'django.contrib.auth.views.login', name='login'),
    url(r'^logout/$', 'django.contrib.auth.views.logout', kwargs={'next_page': '/mwf/'}),
    url(r'^signup/$', UserRegistrationView.as_view(), name='signup'),
    url('^', include('django.contrib.auth.urls')),
]

在我的设置中,我有:

LOGIN_REDIRECT_URL = 'login/'

不知道这里有什么问题。 非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

定义登录URL LOGIN_URL ='/ login /'

当您登录系统然后重定向时,

LOGIN_REDIRECT_URL ='login /'。

答案 1 :(得分:1)

你应该有

LOGIN_URL = '/login/'  # The absolute url

LOGIN_URL = 'login'  # the name of the url pattern.

第二个选项更好,因为它避免了对URL进行硬编码。

LOGIN_REDIRECT_URL设置是用户在登录后重定向到的网址。使用登录网址进行此设置没有意义。

如果您使用的是Django 1.9+,那么您可以使用login required mixin,而您不必自己编写。

答案 2 :(得分:1)

我找到了问题和解决方案。 因此,由于我正在使用app_name,在我的网址Page_Load中,我必须使用app_name为任何url name_space添加前缀。 所以,在申请中:

app_name = 'bookApp'

Et瞧,这就是诀窍。