Django中间件,可以自动删除尾随URL斜杠和301重定向到非斜杠终止URL。
tocka-django-unslashed的Python项目详细描述
这个中间件提供了django commonmiddleware的反向功能 APPEND_SLASH功能。它可以自动删除尾随的url 斜杠和301重定向到非斜杠终止的url。这种行为 如果初始URL以斜线结尾且无效,则执行 尾随斜杠生成有效的url,并且REMOVE_SLASH设置为 是的。否则没有效果。
例如,如果没有,foo.com/bar/将被重定向到foo.com/bar 具有foo.com/bar/的有效url模式,但具有有效的模式 对于foo.com/bar和REMOVE_SLASH=True。
分叉信息
这是https://github.com/harshvb7/django-unslashed的叉子,它 依次是https://github.com/dghubble/django-unslashed的叉。
对此分叉的更改:*更新为django 1.10,兼容到 1.8和python 2.7、3.3-3.5。*带前缀的pypi包名称 tocka-*添加了circleci和codecov,删除了travisci
安装
安装django-unslashed,
pip install tocka-django-unslashed
如果您使用的是requirements.txt文件,请添加 django-unslashed>=0.3.0到它。
用法
修改要添加的djangosettings.py文件 unslashed.middleware.RemoveSlashMiddleware到您的 MIDDLEWARE_CLASSES前后 django.middleware.common.CommonMiddleware。
MIDDLEWARE_CLASSES=(# ...'unslashed.middleware.RemoveSlashMiddleware','django.middleware.common.CommonMiddleware',# ...)
将REMOVE_SLASH设置为true,将APPEND_SLASH设置为false,
APPEND_SLASH=FalseREMOVE_SLASH=True
如果REMOVE_SLASH为false或未设置,则removeSlashMiddleware没有 效果。
如果要使用UNSLASHED_USE_302_REDIRECT,请将其设置为true httpedirect而不是httppermanentredirect,
UNSLASHED_USE_302_REDIRECT=True
基本原理
Web应用程序 should 有一个url结构:
- 如果斜线无效,则使用尾部斜线和重定向来附加斜线 访问非斜杠终止的URL。
- 不使用尾随斜杠URL,如果无效,则重定向到非斜杠URL 访问以斜杠结尾的URL。前一个是django违约, 而通过将此中间件添加到 项目。
注释
紧密基于django的附加斜杠通用中间件 implementation。
测试
tox
这将在python和django的多个版本上运行测试,如 在tox.ini中定义。
$ git clone https://github.com/frnhr/django-unslashed.git $ cd django-unslashed $ pip install -r requirements-dev.txt $ tox ... ... ... ________________________________________________________________________________________________________ summary _________________________________________________________________________________________________________ django_master-py35: commands succeeded django_master-py34: commands succeeded django_master-py27: commands succeeded django110-py35: commands succeeded django110-py34: commands succeeded django110-py27: commands succeeded django19-py35: commands succeeded django19-py34: commands succeeded django19-py27: commands succeeded django18-py35: commands succeeded django18-py34: commands succeeded django18-py33: commands succeeded django18-py27: commands succeeded lint: commands succeeded congratulations :)