资讯专栏INFORMATION COLUMN

Django中自定义中间件模块--自动搜索stackoveflow答案

wizChen / 2521人阅读

摘要:中间件的分类请求期间返回期间如果需要自定义,在中添加对应路径的文件即可自定义方法需求场景在平时开发调试中,会遇到这样那样的报错,我们自定义一个简单的中间件,的自定义步骤很简单,实现方法即可根据的和信息,调用的接口,当报错时自动搜索相关的答案

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 "
The stackoverflow answer top 3 is :
"
                for question in questions["items"][:3]:
                    print "
"
                    print question["title"]
                    print question["link"] + "
"
            else :
                print "
stackoverflow answer not found
"

        return None

效果如下:

Django版本:1.9.4
python版本:2.7.6
调试时,settings.DEBUG处于开启模式

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44790.html

相关文章

  • Tornado vs Django选型分析

    摘要:前言项目中开发的几个服务一直使用作为服务器,本人也曾提出过疑问,为什么是,得到的答案是比较,,,的并发性能最好,而且最为轻量级。的卖点是超高的开发效率,其性能扩展有限的性能表现前两天有写一篇的帖子传送门使用对鉴权接口加压,看的性能表现。 前言 项目中开发的几个服务一直使用tornado作为http服务器,本人也曾提出过疑问,为什么是tornado,得到的答案是比较tornado,fla...

    Arno 评论0 收藏0
  • 利用Django开发个小型商城(一)

    摘要:利用开发个小型商城我们本期的教程是教大家如何利用开发一个小型的商城这里所说的小型商城只是功能上的简朴。并于年月在许可证下发布。这套框架是以比利时的吉普赛爵士吉他手来命名的。是重量级选手中最有代表性的一位。 利用Django开发个小型商城 我们本期的教程是教大家如何利用Django开发一个小型的商城,这里所说的小型商城只是功能上的简朴。 作者:黄志成(小黄) 作者博客:博客地址 前提 1...

    RobinTang 评论0 收藏0
  • Django定义信号(signals)

    摘要:中自定义了一些,用于监听一些操作,并发出通知官方解释提供一个信号分发器,允许解耦的应用在框架的其它地方发生操作时会被通知到。简单来说,信号允许特定的通知一组某些操作已经发生。或者在请求时,记录请求信息。 django中自定义了一些singals,用于监听一些操作,并发出通知 官方解释: Django 提供一个信号分发器,允许解耦的应用在框架的其它地方发生操作时会被通知到。 ...

    Hegel_Gu 评论0 收藏0
  • django创建model错误解答

    摘要:在没有添加解决在中添加数据库配置参数出错解决查看中参数是否配置出错,比如数据库指定,数据库权限,密码之类因为在中自定义了命令,报命令重复解决删掉自定制的,简单的也可以在中,注释掉模块 1.在settings没有添加AUTH_USER_MODEL auth.User.groups: (fields.E304) Reverse accessor for User.groups clashe...

    terro 评论0 收藏0

发表评论

0条评论

wizChen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<