美好的一天,我有以下观点:
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/'
不知道这里有什么问题。 非常感谢任何帮助
答案 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瞧,这就是诀窍。