简体   繁体   中英

Redirect example.com users to example.com/#/login

I am working on a project that uses Django and Angular. I do not have a background as a web developer so please try to explain your answer so that a novice person can understand it.

Basically I want to make it so that the login page is the default page instead of the index page.

I currently have the following url handler in my main Django project urls.py:

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

I also have another urls.py in an app called core that sends visitors to the login page:

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

Now I want the login page to become the default page instead if the index page. How can I do that?

I have tried adding the following the the views file in the core app:

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

Unfortunately I get the message

This webpage has a redirect loop

I do not know how to solve this problem. Basically I want users to be redirected to the login page if they enter any URL that is not handled by other URL handlers. When they successfully log in they are redirected to a dashboard page automatically.

EDIT:

The login page URL is handled in the core urls.py file and points to a different view than index.

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

Web servers, in this case Django, do not see the fragment after the # . You are redirecting from / to / , creating a redirect loop.

If you want to redirect to the Django login url, you need login_url='/login' .

As an aside, you should remove the leading slash from your regex r'^/login$ .

In @login_required(redirect_field_name='', login_url='#/login') remove redirect_field_name='', it really is not neccessary and make sure that #/login in login_url='#/login is the same as in your url.py file: like

views.py

@login_required(redirect_field_name='', login_url='accounts/login/')

as url.py

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

I assume your Angular & Django apps are running in two seperate ports, like:

  • Django on port 8000
  • Angular on port 1000

So if you give /#/login it will redirect for the same with Django port ( 8000/#/login ).

So why don't you give the full URL www.example.com/#/login ?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM