Django app deployed to suburl, redirecting to homepage after login

I have my page expanded to http://example.com. I also have a django application deployed to http://example.com/djangoapp.

I use Apache 2.2this configuration ( /etc/apache2/apache2.conf) WSGIPythonPath /home/brian/djangoprojects/djangoapp.

I also added a line WSGIScriptAlias /djangoapp /home/brian/djangoprojects/djangoapp/djangoapp/wsgi.pyto the default file Apache Virtual Host, and it works very well.

However, after logging in, my application redirects me to http://example.com/instead http://example.com/djangoapp/homeit.

Here is my urls.pyfile:

from django.conf.urls import include, url
from django.contrib import admin
from djangoapp import views

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'django.contrib.auth.views.login', name="login"),
    url(r'^logout/$', views.logout_page, name="logout"),
    url(r'^accounts/login/$', 'django.contrib.auth.views.login', name="login"),
    url(r'^register/$', views.register, name="register"),
    url(r'^register/success/$', views.register_success, name="register_success"),
    url(r'^homeit/$', views.homeit, name="homeit"),
]

Here is my file views.py:

from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth.models import User
from django.views.decorators.csrf import csrf_protect
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.core.urlresolvers import reverse
from djangoapp.forms import RegistrationForm


@csrf_protect
def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(
                username=form.cleaned_data['username'],
                password=form.cleaned_data['password1'],
                email=form.cleaned_data['email']
            )
            return HttpResponseRedirect(reverse('register_success'))
    else:
        form = RegistrationForm()
    variables = RequestContext(request, {
        'form': form
    })

    return render_to_response(
        'registration/register.html',
        variables,
    )


def register_success(request):
    return render_to_response('registration/success.html')


def logout_page(request):
    logout(request)
    return HttpResponseRedirect(reverse('login'))


@login_required
def homeit(request):
    return render_to_response(('home.html', {'user': request.user}))

My settings file settings.py:

LOGIN_URL = '/djangoapp/accounts/login/'
USE_X_FORWARDED_HOST = True
SUB_SITE = "/djangoapp"

And finally, the login page that I use to login:

{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% block head %}Login{% endblock %}
{% block content %}
    {% if form.errors %}
        <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    <form method="post" action=".">{% csrf_token %}
        <table border="0">
            <tr><th><label for="id_username">Username:</label></th><td>{{ form.username }}</td></tr>
            <tr><th><label for="id_password">Password:</label></th><td>{{ form.password }}</td></tr>
        </table>
        <input type="submit" value="Login" />
        <input type="hidden" name="next" value="{% url "homeit" %}" />
    </form>
    <a href="{% url "register" %}">Register</a>
{% endblock %}
+4
1

:

  • LOGIN_REDIRECT_URL = '/djangoapp/homeit' settings.py
  • urls.py 9 url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'extra_context': {'next':'/djangoapp/homeit'}}),

django.contrib.auth.views.login,

def login :

def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm,
          current_app=None, extra_context=None):
    """
    Displays the login form and handles the login action.
    """
    redirect_to = request.POST.get(redirect_field_name,
                                   request.GET.get(redirect_field_name, ''))

    if request.method == "POST":
        form = authentication_form(request, data=request.POST)
        if form.is_valid():

            # Ensure the user-originating redirection url is safe.
            if not is_safe_url(url=redirect_to, host=request.get_host()):
                redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

            # Okay, security check complete. Log the user in.
            auth_login(request, form.get_user())

            return HttpResponseRedirect(redirect_to)
    else:
        form = authentication_form(request)

    current_site = get_current_site(request)

    context = {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }
    if extra_context is not None:
        context.update(extra_context)

    if current_app is not None:
        request.current_app = current_app

    return TemplateResponse(request, template_name, context)

:

  • django.contrib.auth.views.login redirect_field_name
  • redirect_field_name next.
  • , - next, redirect_to = '' .
  • HttpResponseRedirect HttpResponseRedirect('')
  • , , /djangoapp.
0

Source: https://habr.com/ru/post/1605843/


All Articles