Django

Code

Ticket #285: script_name_path_info2.diff

File script_name_path_info2.diff, 15.4 kB (added by jmelesky, 10 months ago)

corrected and far more comprehensive patch, against [6292]

  • django/http/__init__.py

    old new  
    2626    def __init__(self): 
    2727        self.GET, self.POST, self.COOKIES, self.META, self.FILES = {}, {}, {}, {}, {} 
    2828        self.path = '' 
     29        self.full_path = '' 
    2930        self.method = None 
    3031 
    3132    def __repr__(self): 
     
    5758            location = self.get_full_path() 
    5859        if not ':' in location: 
    5960            current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http', 
    60                                          get_host(self), self.path) 
     61                                         get_host(self), self.full_path) 
    6162            location = urljoin(current_uri, location) 
    6263        return location 
    6364 
  • django/core/handlers/wsgi.py

    old new  
    7575class WSGIRequest(http.HttpRequest): 
    7676    def __init__(self, environ): 
    7777        self.environ = environ 
    78         self.path = force_unicode(environ['PATH_INFO']) 
     78        self.path = force_unicode(environ.get('PATH_INFO', '/')) 
     79        self.full_path = (force_unicode(environ.get('SCRIPT_NAME', '')) 
     80                          + force_unicode(environ.get('PATH_INFO', '/'))) 
    7981        self.META = environ 
    8082        self.method = environ['REQUEST_METHOD'].upper() 
    8183 
     
    102104            (get, post, cookies, meta) 
    103105 
    104106    def get_full_path(self): 
    105         return '%s%s' % (self.path, self.environ.get('QUERY_STRING', '') and ('?' + self.environ.get('QUERY_STRING', '')) or '') 
     107        return '%s%s' % (self.full_path, self.environ.get('QUERY_STRING', '') and ('?' + self.environ.get('QUERY_STRING', '')) or '') 
    106108 
    107109    def is_secure(self): 
    108110        return 'HTTPS' in self.environ and self.environ['HTTPS'] == 'on' 
  • django/core/handlers/modpython.py

    old new  
    1414class ModPythonRequest(http.HttpRequest): 
    1515    def __init__(self, req): 
    1616        self._req = req 
    17         self.path = force_unicode(req.uri) 
     17        self.full_path = force_unicode(req.uri) 
     18        root = req.get_options().get('django.root', '') 
     19        if root and req.uri.startswith(root): 
     20            self.path = force_unicode(req.uri[len(root):]) 
     21        else: 
     22            self.path = self.full_path 
    1823 
    1924    def __repr__(self): 
    2025        # Since this is called as part of error handling, we need to be very 
     
    3944            (self.path, get, post, cookies, meta) 
    4045 
    4146    def get_full_path(self): 
    42         return '%s%s' % (self.path, self._req.args and ('?' + self._req.args) or '') 
     47        return '%s%s' % (self.full_path, self._req.args and ('?' + self._req.args) or '') 
    4348 
    4449    def is_secure(self): 
    4550        # Note: modpython 3.2.10+ has req.is_https(), but we need to support previous versions 
  • django/views/generic/create_update.py

    old new  
    2121    """ 
    2222    if extra_context is None: extra_context = {} 
    2323    if login_required and not request.user.is_authenticated(): 
    24         return redirect_to_login(request.path) 
     24        return redirect_to_login(request.full_path) 
    2525 
    2626    manipulator = model.AddManipulator(follow=follow) 
    2727    if request.POST: 
     
    8787    """ 
    8888    if extra_context is None: extra_context = {} 
    8989    if login_required and not request.user.is_authenticated(): 
    90         return redirect_to_login(request.path) 
     90        return redirect_to_login(request.full_path) 
    9191 
    9292    # Look up the object to be edited 
    9393    lookup_kwargs = {} 
     
    163163    """ 
    164164    if extra_context is None: extra_context = {} 
    165165    if login_required and not request.user.is_authenticated(): 
    166         return redirect_to_login(request.path) 
     166        return redirect_to_login(request.full_path) 
    167167 
    168168    # Look up the object to be edited 
    169169    lookup_kwargs = {} 
  • django/views/debug.py

    old new  
    345345    </tr> 
    346346    <tr> 
    347347      <th>Request URL:</th> 
    348       <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.path|escape }}</td> 
     348      <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.full_path|escape }}</td> 
    349349    </tr> 
    350350    <tr> 
    351351      <th>Exception Type:</th> 
     
    634634      </tr> 
    635635      <tr> 
    636636        <th>Request URL:</th> 
    637       <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.path|escape }}</td> 
     637      <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.full_path|escape }}</td> 
    638638      </tr> 
    639639    </table> 
    640640  </div> 
  • django/contrib/syndication/feeds.py

    old new  
    2525    def __init__(self, slug, request): 
    2626        self.slug = slug 
    2727        self.request = request 
    28         self.feed_url = request.path 
     28        self.feed_url = request.full_path 
    2929        self.title_template_name = self.title_template or ('feeds/%s_title.html' % slug) 
    3030        self.description_template_name = self.description_template or ('feeds/%s_description.html' % slug) 
    3131 
  • django/contrib/comments/views/userflags.py

    old new  
    1919    comment = get_object_or_404(Comment,pk=comment_id, site__id__exact=settings.SITE_ID) 
    2020    if request.POST: 
    2121        UserFlag.objects.flag(comment, request.user) 
    22         return HttpResponseRedirect('%sdone/' % request.path) 
     22        return HttpResponseRedirect('%sdone/' % request.full_path) 
    2323    return render_to_response('comments/flag_verify.html', {'comment': comment}, 
    2424        context_instance=RequestContext(request, extra_context, context_processors)) 
    2525flag = login_required(flag) 
     
    5050            comment.save() 
    5151            m = ModeratorDeletion(None, request.user.id, comment.id, None) 
    5252            m.save() 
    53         return HttpResponseRedirect('%sdone/' % request.path) 
     53        return HttpResponseRedirect('%sdone/' % request.full_path) 
    5454    return render_to_response('comments/delete_verify.html', {'comment': comment}, 
    5555        context_instance=RequestContext(request, extra_context, context_processors)) 
    5656delete = login_required(delete) 
  • django/contrib/admin/views/auth.py

    old new  
    2020            msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': 'user', 'obj': new_user} 
    2121            if "_addanother" in request.POST: 
    2222                request.user.message_set.create(message=msg) 
    23                 return HttpResponseRedirect(request.path) 
     23                return HttpResponseRedirect(request.full_path) 
    2424            else: 
    2525                request.user.message_set.create(message=msg + ' ' + _("You may edit it again below.")) 
    2626                return HttpResponseRedirect('../%s/' % new_user.id) 
  • django/contrib/admin/views/main.py

    old new  
    276276                    (pk_value, force_unicode(new_object).replace('"', '\\"'))) 
    277277            elif "_addanother" in request.POST: 
    278278                request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name))) 
    279                 return HttpResponseRedirect(request.path) 
     279                return HttpResponseRedirect(request.full_path) 
    280280            else: 
    281281                request.user.message_set.create(message=msg) 
    282282                return HttpResponseRedirect(post_url) 
     
    353353            if "_continue" in request.POST: 
    354354                request.user.message_set.create(message=msg + ' ' + _("You may edit it again below.")) 
    355355                if '_popup' in request.REQUEST: 
    356                     return HttpResponseRedirect(request.path + "?_popup=1") 
     356                    return HttpResponseRedirect(request.full_path + "?_popup=1") 
    357357                else: 
    358                     return HttpResponseRedirect(request.path) 
     358                    return HttpResponseRedirect(request.full_path) 
    359359            elif "_saveasnew" in request.POST: 
    360360                request.user.message_set.create(message=_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(new_object)}) 
    361361                return HttpResponseRedirect("../%s/" % pk_value) 
     
    778778        # is screwed up with the database, so display an error page. 
    779779        if ERROR_FLAG in request.GET.keys(): 
    780780            return render_to_response('admin/invalid_setup.html', {'title': _('Database error')}) 
    781         return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1') 
     781        return HttpResponseRedirect(request.full_path + '?' + ERROR_FLAG + '=1') 
    782782    c = template.RequestContext(request, { 
    783783        'title': cl.title, 
    784784        'is_popup': cl.is_popup, 
  • django/contrib/admin/views/decorators.py

    old new  
    2222        post_data = _encode_post_data({}) 
    2323    return render_to_response('admin/login.html', { 
    2424        'title': _('Log in'), 
    25         'app_path': request.path, 
     25        'app_path': request.full_path, 
    2626        'post_data': post_data, 
    2727        'error_message': error_message 
    2828    }, context_instance=template.RequestContext(request)) 
     
    9999                        return view_func(request, *args, **kwargs) 
    100100                    else: 
    101101                        request.session.delete_test_cookie() 
    102                         return http.HttpResponseRedirect(request.path) 
     102                        return http.HttpResponseRedirect(request.full_path) 
    103103            else: 
    104104                return _display_login_form(request, ERROR_MESSAGE) 
    105105 
  • django/contrib/admin/views/doc.py

    old new  
    2727 
    2828def bookmarklets(request): 
    2929    # Hack! This couples this view to the URL it lives at. 
    30     admin_root = request.path[:-len('doc/bookmarklets/')] 
     30    admin_root = request.full_path[:-len('doc/bookmarklets/')] 
    3131    return render_to_response('admin_doc/bookmarklets.html', { 
    3232        'admin_url': "%s://%s%s" % (request.is_secure() and 'https' or 'http', get_host(request), admin_root), 
    3333    }, context_instance=RequestContext(request)) 
  • django/contrib/databrowse/plugins/objects.py

    old new  
    88    def model_view(self, request, model_databrowse, url): 
    99        # If the object ID wasn't provided, redirect to the model page, which is one level up. 
    1010        if url is None: 
    11             return http.HttpResponseRedirect(urlparse.urljoin(request.path, '../')) 
     11            return http.HttpResponseRedirect(urlparse.urljoin(request.full_path, '../')) 
    1212        easy_model = EasyModel(model_databrowse.site, model_databrowse.model) 
    1313        obj = easy_model.object_by_pk(url) 
    1414        return render_to_response('databrowse/object_detail.html', {'object': obj, 'root_url': model_databrowse.site.root_url}) 
  • django/contrib/databrowse/sites.py

    old new  
    110110 
    111111        `url` is the remainder of the URL -- e.g. 'comments/comment/'. 
    112112        """ 
    113         self.root_url = request.path[:len(request.path) - len(url)] 
     113        self.root_url = request.full_path[:len(request.full_path) - len(url)] 
    114114        url = url.rstrip('/') # Trim trailing slash, if it exists. 
    115115 
    116116        if url == '': 
  • django/contrib/auth/views.py

    old new  
    4747        return render_to_response(template_name, {'title': _('Logged out')}, context_instance=RequestContext(request)) 
    4848    else: 
    4949        # Redirect to this page until the session has been cleared. 
    50         return HttpResponseRedirect(next_page or request.path) 
     50        return HttpResponseRedirect(next_page or request.full_path) 
    5151 
    5252def logout_then_login(request, login_url=None): 
    5353    "Logs out the user if he is logged in. Then redirects to the log-in page." 
     
    7575                form.save(domain_override=request.META['HTTP_HOST']) 
    7676            else: 
    7777                form.save(email_template_name=email_template_name) 
    78             return HttpResponseRedirect('%sdone/' % request.path) 
     78            return HttpResponseRedirect('%sdone/' % request.full_path) 
    7979    return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)}, 
    8080        context_instance=RequestContext(request)) 
    8181 
     
    9090        errors = form.get_validation_errors(new_data) 
    9191        if not errors: 
    9292            form.save(new_data) 
    93             return HttpResponseRedirect('%sdone/' % request.path) 
     93            return HttpResponseRedirect('%sdone/' % request.full_path) 
    9494    return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)}, 
    9595        context_instance=RequestContext(request)) 
    9696password_change = login_required(password_change) 
  • django/contrib/flatpages/views.py

    old new  
    2525    # logged in, redirect to the login page. 
    2626    if f.registration_required and not request.user.is_authenticated(): 
    2727        from django.contrib.auth.views import redirect_to_login 
    28         return redirect_to_login(request.path) 
     28        return redirect_to_login(request.full_path) 
    2929    if f.template_name: 
    3030        t = loader.select_template((f.template_name, DEFAULT_TEMPLATE)) 
    3131    else: 
  • django/middleware/common.py

    old new  
    3333 
    3434        # Check for a redirect based on settings.APPEND_SLASH and settings.PREPEND_WWW 
    3535        host = http.get_host(request) 
    36         old_url = [host, request.path] 
     36        old_url = [host, request.full_path] 
    3737        new_url = old_url[:] 
    3838        if settings.PREPEND_WWW and old_url[0] and not old_url[0].startswith('www.'): 
    3939            new_url[0] = 'www.' + old_url[0]