Django中自定义中间件模块--自动搜索stackoveflow答案
2018-10-14 21:19
399 查看
版权声明:本文采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。 https://blog.csdn.net/u011230692/article/details/83051033
Django的中间件MIDDLEWARE的分类:
请求期间:
process_request(request) process_view(request, view_func, view_args, view_kwargs)
返回期间:
process_exception(request, exception) (only if the view raised an exception) process_template_response(request, response) (only for template responses) process_response(request, response)
如果需要自定义,在MIDDLEWARE_CLASSES中添加对应路径的文件即可
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', // 自定义Middleware方法 'app_name.middleware.StackOverflowMiddleware', )
需求场景
在平时django开发调试中,会遇到这样那样的exception报错,我们自定义一个简单的中间件,django的自定义步骤很简单,实现process_exception方法即可
根据exception的name和信息,调用stackoveflow的接口,当debug报错时自动搜索相关的答案,节省一些时间,实现起来很简单
备注:仅为介绍思路,线上代码不要这么使用
代码实现
app目录下 middleware.py文件
import requests from django.conf import settings class StackOverflowMiddleware(object): def process_exception(self, request, exception): if settings.DEBUG: intitle = u'{}: {}'.format(exception.__class__.__name__, exception.message) url = 'https://api.stackexchange.com/2.2/search' params = { 'order': 'desc', 'sort': 'votes', 'site': 'stackoverflow', 'pagesize': 3, 'tagged': 'python;django', 'intitle': intitle } r = requests.get(url, params=params) questions = r.json() if len(questions['items']) > 0: print '\nThe stackoverflow answer top 3 is :\n' for question in questions['items'][:3]: print '\n' print question['title'] print question['link'] + '\n' else : print '\nstackoverflow answer not found\n' return None
效果如下:
Django版本:1.9.4
python版本:2.7.6
调试时,settings.DEBUG处于开启模式
相关文章推荐
- 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能
- python实现百万答题自动百度搜索答案
- 自定义Django中间件(登录验证中间件实例)
- 详解Django中间件的5种自定义方法
- (五)带属性值的ng-app指令,实现自定义模块的自动加载
- JAVA实现的百万英雄,芝士超人等答题,自动搜索答案,答题辅助
- django导入自定义模块
- 用python搭建 百万答题 、自动百度搜索答案
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
- python笔记13 - 系统模块,自定义模块的编写,模块的搜索路径,PYTHONPATH环境变量,模块的属性:__doc__, __all__,__file__,标准库模块,包
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- Django自定义中间件简单介绍
- AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
- django自动重新加载模块 源码分析
- django-自定义中间件
- 67:zabbix之添加主动/被动模式|添加监控主机|自定义模块|图形中乱码|自动发现
- django学习笔记---如何自定义中间件详解
- Django的模板语言自定义,Django的中间件
- 自定义自动搜索控件
- Django自定义访问日志模块