1、django.middleware.common.CommonMiddleware
功能:通用中间件,会处理一些URL,比如baidu.com会自动的处理成www.baidu.com。比如/blog/111会处理成/blog/111/自动加上反斜杠,还有能对User-Agent进行限制:限制settings.DISALLOWED_USER_AGENTS中指定的请求头来访问本网站。DISALLOWED_USER_AGENTS是一个正则表达式列表。
实例代码:
import re
DISALLOWED_USER_AGENTS = [
re.compile(r'^\s$|^$') 空白字符或空字符
re.compile(r'.*PhantomJS.*') 包含PhantomJS
]
但是,如果请求中不带User-Agent字段,就不能进行检验,因此要自定义中间件。
def process_request(self, request):
"""
Check for denied User-Agents and rewrite the URL based on
settings.APPEND_SLASH and settings.PREPEND_WWW
"""
#检查User-Agents
# Check for denied User-Agents
if 'HTTP_USER_AGENT' in request.META:
for user_agent_regex in settings.DISALLOWED_USER_AGENTS:
if user_agent_regex.search(request.META['HTTP_USER_AGENT']):
raise PermissionDenied('Forbidden user agent')
#检查WWW,没有就给你添加
# Check for a redirect based on settings.PREPEND_WWW
host = request.get_host()
must_prepend = settings.PREPEND_WWW and host and not host.startswith('www.')
redirect_url = ('%s://www.%s' % (request.scheme, host)) if must_prepend else ''
#检查是否应附加斜线
# 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