经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django框架静态文件使用/中间件/禁用ip功能实例详解
来源:jb51  时间:2019/7/22 13:24:17  对本文有异议

本文实例讲述了Django框架静态文件使用/中间件/禁用ip功能。分享给大家供大家参考,具体如下:

静态文件

一、静态文件的使用

静态文件:网页中使用的css,js,图片

静态文件的使用:

在项目下创建静态目录,比如:static,导入静态文件(HTML、CSS、js)

在setting.py中配置静态目录

  1. # 通过此url来引用静态文件,可以隐藏服务器的文件的实际保存目录
  2. STATIC_URL = '/abc/'
  3. # 指定静态文件所在的物理目录
  4. STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
  5.  

通过setting.py中的STATIC_URL的值来引用静态文件,好处:可以隐藏服务器的文件的实际保存目录。比如:

  1. <img src="/abc/image/mm.jpg" />
  2. <script src="/abc/js/jquery-1.12.4.min.js"></script>
  3.  

二、使用static标签动态引用

上述写法是硬编码,存在维护问题,可以使用static标签动态引用

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. {% load staticfiles %}
  4. <head>
  5. ...
  6. </head>
  7. <body>
  8. 动态引用:<br/>
  9. <img src="{% static 'image/mm.jpg' %}"/>
  10. </body>
  11. </html>
  12.  

中间件

MIDDLEWARE: 中间件

一、案例: 禁止指定ip地址的访问

使用request对象的META属性,可以获取用户访问的ip地址:

  1. request.META.get('REMOTE_ADDR')
  2.  

二、中间件

中间件: django框架预留的接口,可以控制请求和响应的过程。Django在中间件中预置了6个方法,这些方法会在不同的阶段执行,对输入或输出进行干预。

初始化:无需任何参数,服务器响应第一个请求的时候调用一次:

  1. def __init__():
  2. pass
  3.  

处理请求前(url匹配前)调用: 返回None或HttpResponse对象

  1. def process_request(self, request):
  2. pass
  3.  

url匹配后视图函数处理前调用: 返回None或HttpResponse对象

  1. def process_view(self, request, view_func, view_args, view_kwargs):
  2. pass
  3.  

视图函数出异常时调用:返回一个HttpResponse对象

  1. def process_exception(self, request, exception):
  2. return response
  3.  

视图函数处理后,模板响应处理前调用: 返回实现了render方法的响应对象

  1. def process_template_response(self, request, response):
  2. pass
  3.  

视图函数返回TemplateReponse时才会调用,返回HttpResponse对象不会调用

视图函数处理后,返回内容给浏览器前调用:返回HttpResponse对象

  1. def process_response(self, request, response):
  2. return response
  3.  

禁用ip功能

在MyMiddleware的process_view方法中,新增代码如下:

  1. class MyMiddleware(object):
  2. ...
  3. exclude_ips = ['127.0.0.1']
  4. def process_view(self, request, view_func, view_args, view_kwargs):
  5. print('--process_view--')
  6. # 禁用ip,以下代码也可以添加到process_request方法
  7. ip = request.META.get('REMOTE_ADDR')
  8. if ip in exclude_ips:
  9. return HttpResponse('禁止访问')
  10.  

异常处理

异常处理: 视图函数执行出错之后,会调用中间件的process_exception方法,可以在该方法中执行异常操作。

在index视图函数中,添加执行出错代码:

  1. def index(request):
  2. """进入首页"""
  3. print('=====index====')
  4. # 添加出错代码
  5. aa = None
  6. print('aa='+ aa)
  7. return render(request, 'app01/index.html')
  8.  

在前面编写的MyMiddleware中: 添加处理异常的中间件方法,并注释前面的拦截ip的拦截:

  1. # middleware.py
  2. class MyMiddleware(object):
  3. ...
  4. def process_view(self, request, view_func, view_args, view_kwargs):
  5. print('-------process_view')
  6. # # 禁止ip访问
  7. # ip = request.META.get('REMOTE_ADDR')
  8. # if ip in exclude_ips:
  9. # return HttpResponse('禁止访问')
  10. def process_exception(self, request, exception):
  11. print('-----process_exception')
  12.  

访问首页,查看服务器,发现:处理异常的中间件方法process_exception执行了

处理出错: 在process_exception方法中返回HttpResponse对象就可以了:

  1. # middleware.py
  2. class MyMiddleware(object):
  3. ...
  4. def process_exception(self, request, exception):
  5. print('-----process_exception')
  6. return HttpResponse('运行出错了:%s' % exception)
  7.  

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号