中间件
中间件函数是Django框架预留的函数接口,让我们可以改动请求的应答的过程
获取浏览器端的ip地址,禁止ip
使用request对象的META属性:request.META['REMOTE_ADDR']
禁止某些ip:
EXCLUDE_IPS = ['127.0.0.1']
def index(request):
'''首页'''
# 获取浏览器端的ip
user_ip = request.META['REMOTE_ADDR']
if user_ip in EXCLUDE_IPS:
return HttpResponse('<h1>您的ip被禁止</h1>')
return render(request,'booktest/index.html')
使用装饰器,使得全部页面禁止ip
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def blocked_ips(view_func):
def wrapper(request,*view_args,**view_kwargs):
user_ip = request.META['REMOTE_ADDR']
if user_ip in EXCLUDE_IPS:
return HttpResponse('<h1>您的ip被禁止</h1>')
else:
return view_func(request,*view_args,**view_kwargs)
return wrapper
@blocked_ips
def static_test(request):
return render(request,'booktest/static_test].html')
EXCLUDE_IPS = ['127.0.0.1']
@blocked_ips
def index(request):
'''首页'''
# 获取浏览器端的ip
return render(request,'booktest/index.html')
通过中间件禁止IP
以上的方法是通过装饰器禁止IP的,实际上我们还可以通过中间件函数禁止IP.
在booktest应用下新建middleware.py文件.
定义中间件类,中间件类的名字可以自己起,但是类里面的中间件函数名不可以随便起,这些函数都是Django预留的接口.
from django.http import HttpResponse
class BlockedIPSMiddleware(object):
'''中间件类'''
EXCLUDE_IPS = ['127.0.0.1']
def process_view(self,request,view_func,*view_args,**view_kwargs):
'''中间件函数,视图函数调用之前会调用这个函'''
user_ip = request.META['REMOTE_ADDR']
if user_ip in BlockedIPSMiddleware.EXCLUDE_IPS:
return HttpResponse('<h1>您的ip被禁止</h1>')
__init__:服务器相应第一个请求时候的调用
process_request:是在产生request对象,进行url匹配之前的调用
process_view:在url匹配之后,调用食欲函数之前
process_response:调用视图函数之后,内容返回给浏览器之前
process_exception:视图函数出现异常,会调用这个函数
如果注册的多个中间件类包含process_exception函数的时候,调用顺序和注册顺序相反
最后需要到setting.py,注册中间件类
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'booktest.middleware.BlockedIPSMiddleware',#注册中间件类
)
demo
class TestMiddleware(object):
'''中间件类'''
def __init__(self):
'''服务器重启之后接受第一个请求时候调用'''
print('__init__')
def process_request(self,request):
'''产生request之后,url匹配之前调用'''
print('process_request中间件函数')
def process_view(self,request,view_func,*view_args,**view_kwargs):
'''url匹配之后,视图函数调用之前'''
print('process_view')
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'booktest.middleware.BlockedIPSMiddleware',#注册中间件类
'booktest.middleware.TestMiddleware',
)
现在访问的时候看看后台的打印