来源:自学PHP网 时间:2019-08-07 16:06 作者:小飞侠 阅读:次
[导读] python-django中的APPEND_SLASH实现方法...
关于django中的APPEND_SLASH
看变量名大概能知道做什么,就是添加斜线,用路由系统那里。 路由文件,只写了路由关系代码 ...... urlpatterns = [ url(r'^test/$', views.test), ] ...... APPEND_SLASH这个常量默认为True,就是假如你没有添加斜线,他会帮你添加上(总体是这样,具体得看源码怎么写的了) 执行命名行代码启动django项目 python manage.py runserver 目前APPEND_SLASH=True,我们打开浏览器的开发者工具,查看网络请求,输入 仔细看下网络请求,我们输入127.0.0.1:8000/test,看起来只发送了一次,其实真实发送了两次请求。 我们继续再访问这个url: 我们也同样访问了一个url,但是这次和上面不同的是,只发送了一次请求。 两次都是发送一个get请求,访问服务器的一个资源。 第一次请求的url为 第二次请求的url为 先大致总结下:APPEND_SLASH=True的情况下,先会根据前端传来的url,先检测这个url能不能访问资源,如果可以访问的话,那么就去执行相应的业务代码,最后返回。如果这个url不能访问到资源的话,会判断这个url最后有没有 那么APPEND_SLASH=False的情况,就不会帮你加 在走到路由层之前,请求会先走到中间件这一层,在这一层就执行了上面分析的逻辑 这一个中间件实现了上面的逻辑 看这一句注释:# Check if a slash should be appended,检测是否需要加上斜线 看这个方法 下面贴上 def should_redirect_with_slash(self, request): """ Return True if settings.APPEND_SLASH is True and appending a slash to the request path turns an invalid path into a valid one. """ if settings.APPEND_SLASH and not request.path_info.endswith('/'): urlconf = getattr(request, 'urlconf', None) return ( not is_valid_path(request.path_info, urlconf) and is_valid_path('%s/' % request.path_info, urlconf) ) return False 就说下
这样的话,上面这段代码就很简单了。首先判断APPEND_SLASH,如果为False的。那么这个方法
# Check if a slash should be appended if self.should_redirect_with_slash(request): path = self.get_full_path_with_slash(request) else: path = request.get_full_path() 后面根据 继续往下看 # Return a redirect if necessary if redirect_url or path != request.get_full_path(): redirect_url += path return self.response_redirect_class(redirect_url) 如果if后面的表达式为True的话,最终稿返回了一个状态码为301的Httpresponse对象,这个对象里带这一个数据,这个数据就是在原url基础上加上斜线( django的中间件会根据每个中间件里的process_request方法或者process_response方法不同的返回值会执行相应的操作,具体操作不说了,不是这个知识点的内容。 那么中间件的 好了,关于APPEND_SLASH的知识总结完毕。APPEND_SLASH它默认为True,如果想要修改的话,需要在settings.py文件中定义这个常量,赋值为False,这样就可以覆盖原django中配置文件里对应的常量了。至于django内部怎么操作的,下次再总结吧 最后还是补个图吧,我把APPEND_SLASH设置为False,访问 如果你设置了APPEND_SLASH为False,访问上面这个url,还是能访问到页面的话,清理下浏览器的缓存,就可以了 总结 以上所述是小编给大家介绍的python-django中的APPEND_SLASH实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对自学php网网站的支持! |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com