Django其他技术

一.静态文件

2.使用

在Django 如果要使用静态文件需要建立一个静态文件夹。

二.中间件

中间件函数是Django框架给我们预留的函数接口,让我们可以干预请求和应答过程。

1.获取浏览器端的IP地址

使用request对象META属性:

1
ip = request.META['REMOTE_ADDR']

获取访问者IP

1
2
3
4
5
6
def index(request):
'''首页'''
#获取浏览器端的ip地址
user_ip request.META['REMOTE_ADDR']
print(user_ip)
return render(request, 'booktest/index.html')

阻止某IP访问

1
2
3
4
5
6
7
8
9
EXCLUDE_IPS = ['172.16.19.26']
def index(request):
'''首页'''
#获取浏览器端的ip地址
user_ip request.META['REMOTE_ADDR']
if user_ip in EXCLUDE_IPS:
return HttpResponse('禁止访问')
print(user_ip)
return render(request, 'booktest/index.html')

阻止IP访问装饰器

1
2
3
4
5
6
7
8
9
10
11
from django.conf import settings

EXCLUDE_IPS = ['172.16.19.26']
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('禁止访问')
else:
return view_func(request, *views_args, **view_kwargs)
return wrapper

2.使用中间件

中间件是每个函数调用之前自动会执行的。

  1. 新建一个middleware.py文件。

    • app文件下创建这个文件。

    • 名字可以改变但是一般都叫做这middleware

  2. 打开middleware.py 创建中间件函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.http import HttpResponse

    class BlockedIPSMiddleware(object): #中间件类
    EXCLUDE_IPS = ['172.16.19.26']
    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('禁止访问')
  3. 在setting 的 MIDDLEWARE 里面注册中间件类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'booktest.middleware.BlockedIPSMiddleware', #注册中间件类
    ]

在类中定义中间件预留函数

1
2
3
4
5
6
__init__:服务器响应第一个请求的时候调用。
process_request:是在产生request对象,进行url匹配之前调用。
process_view:是在url匹配之后,调用视图函数之前。
process_response:视图函数调用之后,内容返回给浏览器之前。
process_exception:视图函数出现异常,会调用这个函数。
如果注册多个中间件包含process_exception函数的时候,调用的顺序跟注册的顺序相反的。

中间件函数执行过程、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class TestMiddleware(object):
'''中间件类'''
def __init__(self):
'''服务器重启之后,接收第一个请求时调用'''
print('----init------')

def process_request(self):
'''产生request对象之后,url匹配之前调用'''
print('----process_request------')

def process_view(self,qequest, view_func, *view_args, **view_kwargs):
'''url匹配之后,视图函数调用之前调用'''
print('----process_view------')

def process_response(self,qequest, response):
'''url匹配之后,视图函数调用之前调用'''
print('----process_response------')
return response


class ExceptionTestMiddleware(object):
def process_exption(self, request ,exception):
'''视图函数发生异常时候调用'''
print('----process_exportion------')

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com
目录
主站