Django其他技术

1. 静态文件

1.1 静态文件使用

网页中的css、js、图片等称为静态文件,Django中使用静态文件需要在项目目录下新建static目录进行配置:

请输入图片描述

  • STATICFILES_DIRS设置静态文件所在的物理目录
  • STATIC_URL设置模板中访问静态文件对应的url
1.2 静态文件搜索顺序
  • 先去配置的静态文件物理路径寻找(STATICFILES_DIRS)
  • 再去安装应用目录下寻找static目录

动态生成静态文件的路径:

  • 使用{% load staticfiles %}标签加载静态文件配置
  • 使用{% static “路径” %}标签拼接静态文件路径(动态生成)

注意:这种方案可以隐藏真实的静态文件路径,但是结合Nginx布署时,会将所有的静态文件都交给Nginx处理,而不用转到Django部分,所以这项配置就无效。

2. 中间件

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC。

Django的中间件类提供了五个方法,分别在于不同的阶段执行,对输入或输出进行干预:

1. __init__(self):无需任何参数,服务器重启后接收第一个请求的时候调用一次,用于确定是否启用当前中间件
2. process_request(self, request):request对象产生之后,url匹配之前调用,返回None或HttpResponse对象
3. process_view(self, request, view_func, *view_args, **view_kwargs):url匹配之后,视图函数调用之前调用,返回None或HttpResponse对象
4. process_response(self, request, response):视图函数调用之后,内容返回给浏览器之前调用,返回HttpResponse对象
5. process_exception(self, request, exception):当视图抛出异常时调用,返回HttpResponse对象

注意:如果注册的多个中间件类中包含process_exception函数的时候,调用的顺序跟注册的顺序是相反的

请输入图片描述

案例:禁止某些IP访问网站(处理Django的输入和输出过程)

1. 装饰器函数实现(每个页面都加装饰器,任务较大)
# 禁止访问的IP列表
EXCLUDE_IPS = ['192.168.31.157']


# 禁止访问装饰器
def blocked_ips(view_func):
    def inner(request, *args, **kwargs):
        user_ip = request.META['REMOTE_ADDR']  # 获取用户浏览器ip
        if user_ip in EXCLUDE_IPS:
            return HttpResponse('<h1>Forbidden</h1>')
        else:
            return view_func(request, *args, **kwargs)
    return inner
    
2. 自定义中间类实现
    - 应用目录下创建middleware.py文件
    - 在文件内部编写process_view(self, request, view_func, *view_args, **view_kwargs)函数  (视图函数调用之前调用)
    - 注册中间件类,在项目配置文件MIDDLEWARE_CLASSES项注册
    
from django.http import HttpResponse

# 中间件类
class BlockIpMiddleWare(object):
    EXCLUDE_IPS = ['192.168.31.157']

    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """中间件函数:视图函数调用前调用"""
        user_ip = request.META['REMOTE_ADDR']
        if user_ip in BlockIpMiddleWare.EXCLUDE_IPS:
            return HttpResponse('<h1>Forbidden</h1>'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值