2016-02-29 2 views
2

Добрый день, у меня есть следующие мнения:@login_required вызывающие проблемы

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) 

Я пытаюсь запретить доступ ко всем моим страницах, кроме главной страницы. Любая страница, которая Im пытается получить доступ после применения декоратора или подмешать на, дает мне следующее сообщение об ошибке:

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

Вот конфигурация моей URL:

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/' 

Не знаю, что здесь не так. действительно будет признателен за любую помощь

+1

Похоже, что URL-адрес для входа, который вы пытаетесь использовать, - это 'accounts/login /', но в URL-адресах нет соответствующего URL. Попробуйте изменить свой шаблон входа в 'r^'accounts/login/$'' – dkhaupt

+0

И используйте 'LOGIN_REDIRECT_URL = reverse_lazy ('login')', чтобы избежать жестко закодированных URL-адресов. – Risadinha

+0

Вы импортировали django.contrib.auth.views?, Также попробуйте написать 'login' вместо 'login /' – jsanchezs

ответ

1

Вы должны либо

LOGIN_URL = '/login/' # The absolute url 

или

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

Второй вариант лучше, так как это позволяет избежать жесткого кодирования URL.

Установка LOGIN_REDIRECT_URL является URL, который пользователь будет перенаправлен на после они войти в систему. Это не имеет смысла использовать URL входа для этого параметра.

Если вы используете Django 1.9+, то вы можете использовать login required mixin, и вам не придется писать самостоятельно.

1

DEFINE Войти URL login_url = '/ логин /' 'для входа /'

LOGIN_REDIRECT_URL = используется, когда вы получаете войти в систему перенаправить.

+0

Пробовал всю эту же проблему, –

1

Я нашел проблему и решение. Итак, поскольку я использую имя app_, в моих URL-адресах, app_name = 'bookApp', мне нужно будет префикс любого url name_space с именем app_. Таким образом, в применении:

LOGIN_URL = 'bookApp:login' 
LOGIN_REDIRECT_URL = reverse_lazy('welcome') 

Et вуаля, это делает трюк.

+0

Я думаю, что это должно быть 'LOGIN_URL = 'bookApp: login''. – Alasdair

+0

Кроме того, вам не нужен 'reverse_lazy', поэтому вы можете сделать' LOGIN_REDIRECT_URL = 'bookApp: welcome''. – Alasdair

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