我正在使用带有此配置的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,urlfrom django.contrib import adminfrom djangoapp import vIEwsurlpatterns = [ 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_requiredfrom django.contrib.auth import logoutfrom django.contrib.auth.models import Userfrom django.vIEws.decorators.csrf import csrf_protectfrom django.shortcuts import render_to_responsefrom django.http import httpResponseRedirectfrom django.template import RequestContextfrom django.core.urlresolvers import reversefrom djangoapp.forms import RegistrationForm@csrf_protectdef 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_requireddef homeit(request): return render_to_response(('home.HTML',{'user': request.user}))
我的设置文件settings.py:
LOGIN_URL = '/djangoapp/accounts/login/'USE_X_FORWARDED_HOST = TrueSUB_SITE = "/djangoapp"
最后,我用来登录的登录页面:
{% extends "base.HTML" %}{% block Title %}Login{% endblock %}{% block @R_403_6882@ %}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.
总结以上是内存溢出为你收集整理的python – 部署在郊区的Django应用程序,登录后重定向到主页全部内容,希望文章能够帮你解决python – 部署在郊区的Django应用程序,登录后重定向到主页所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)