加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 部署在郊区的Django应用程序,登录后重定向到主页

发布时间:2020-12-20 13:07:06 所属栏目:Python 来源:网络整理
导读:我在http://example.com上部署了我的页面.我还在http://example.com/ djangoapp上部署了我的django应用程序. 我正在使用带有此配置的Apache 2.2(/etc/apache2/apache2.conf):WSGIPythonPath / home / brian / djangoprojects / djangoapp. 我还将WSGIScript
我在http://example.com上部署了我的页面.我还在http://example.com/ djangoapp上部署了我的django应用程序.

我正在使用带有此配置的Apache 2.2(/etc/apache2/apache2.conf):WSGIPythonPath / home / brian / djangoprojects / djangoapp.

我还将WSGIScriptAlias / djangoapp /home/brian/djangoprojects/djangoapp/djangoapp/wsgi.py这一行添加到默认的Apache Virtual Host文件中,它非常好用.

但是,登录后,我的应用程序会将我重定向到http://example.com/而不是http://example.com/djangoapp/homeit.

这是我的urls.py文件:

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/$',url(r'^register/$',views.register,name="register"),url(r'^register/success/$',views.register_success,name="register_success"),url(r'^homeit/$',views.homeit,name="homeit"),]

这是我的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}))

我的设置文件settings.py:

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

最后,我用来登录的登录页面:

{% 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 %}

解决方法

快速阅读

解决这个问题的方法:

>在settings.py中添加LOGIN_REDIRECT_URL =’/ djangoapp / homeit’
>将您的urls.py第9行更改为网址(r’^ accounts / login / $’,’django.contrib.auth.views.login’,{‘extra_context’:{‘next’:’/ djangoapp / homeit’} }),

说明

检查django.contrib.auth.views.login目前here的文档

def登录的代码如下:

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的默认值.>目前,由于您没有将任何内容作为下一个参数传递,因此它会自动生成redirect_to =”.> HttpResponseRedirect被称为HttpResponseRedirect(”)>因此它最终会重定向到您的主页,而不是/ djangoapp.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读