将example.com用户重定向到example.com/#/login

时间:2015-10-27 09:36:02

标签: python django redirect

我正在开发一个使用Django和Angular的项目。我没有Web开发人员的背景,所以请尝试解释您的答案,以便新手可以理解。

基本上我想这样做,以便登录页面是默认页面而不是索引页面。

我目前在我的主Django项目urls.py中有以下url处理程序:

url(r'^$', 'core.views.generic.index')

我还在一个名为core的应用程序中有另一个urls.py,它将访问者发送到登录页面:

url(r'^/login$', private.MeLogin.as_view())

现在我希望登录页面成为默认页面,而不是索引页面。我怎么能这样做?

我尝试在核心应用中添加以下视图文件:

@login_required(redirect_field_name='', login_url='#/login')
def index(request):
    return render_to_response('html/index.html', locals(), context_instance=RequestContext(request))

不幸的是我收到了消息

  

此网页有重定向循环

我不知道如何解决这个问题。基本上,如果用户输入任何未由其他URL处理程序处理的URL,我希望将用户重定向到登录页面。成功登录后,它们会自动重定向到仪表板页面。

修改

登录页面URL在核心urls.py文件中处理,并指向与索引不同的视图。

url(r'^/login$', private.MeLogin.as_view())

3 个答案:

答案 0 :(得分:0)

Web服务器(在本例中为Django)在#之后看不到该片段。您正在从/重定向到/,从而创建了重定向循环。

如果您想重定向到Django登录网址,则需要login_url='/login'

另外,您应该从正则表达式r'^/login$中删除前导斜杠。

答案 1 :(得分:0)

@login_required(redirect_field_name='', login_url='#/login') 删除redirect_field_name='',它确实不是必需的,并确保#/login中的login_url='#/login与您的url.py文件中的@login_required(redirect_field_name='', login_url='accounts/login/')相同: 像

views.py

url(r'^accounts/login/', auth_views.login),

如 url.py

$('.home .bxslider').bxSlider({ initLeftVal: 20 }); //first, add extra property to defautls var defaults = { initLeftVal: 0; } //check for this function and replace whole function( dont replace just comment out) var setSlidePosition = function(){ var initLeftVal = slider.settings.initLeftVal; // if last slide, not infinite loop, and number of children is larger than specified maxSlides if(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){ if (slider.settings.mode == 'horizontal'){ // get the last child's position var lastChild = slider.children.last(); var position = lastChild.position(); // set the left position setPositionProperty(-(position.left + initLeftVal - (slider.viewport.width() - lastChild.outerWidth())), 'reset', 0); }else if(slider.settings.mode == 'vertical'){ // get the last showing index's position var lastShowingIndex = slider.children.length - slider.settings.minSlides; var position = slider.children.eq(lastShowingIndex).position(); // set the top position setPositionProperty(-(position.top+initLeftVal), 'reset', 0); } // if not last slide }else{ // get the position of the first showing slide var position = slider.children.eq(slider.active.index * getMoveBy()).position(); // check for last slide if (slider.active.index == getPagerQty() - 1) slider.active.last = true; // set the repective position if (position != undefined){ if (slider.settings.mode == 'horizontal') setPositionProperty(-(position.left+initLeftVal), 'reset', 0); else if (slider.settings.mode == 'vertical') setPositionProperty(-(position.top+initLeftVal), 'reset', 0); } } }

答案 2 :(得分:0)

我假设你的Angular& Django应用程序运行在两个单独的端口,如:

  • 端口8000上的Django
  • 端口1000上的Angular

因此,如果你给/#/login它将重定向与Django端口(8000/#/login)相同。

那么为什么不提供完整的网址www.example.com/#/login

相关问题