zoukankan      html  css  js  c++  java
  • Python Django 实用小案例2

    动态导入模块

    Django返回序列化数据 

    动态导入模块

    在Django里面,经常会看到一些方法或者类是动态导入,尤其是以settings文件为代表,经常把一些类放在里面动态调配,比如随便拿Django的settings里面的中间件来作为案例。

    在PyCharm里面随便改一下其中一条发现是可以导入的

    那是如何做到实现这样可配置的动态导入呢?以在做的一个CMDB为例。

    首先创建一个config文件(不写在settings里面是为了区分出来,也怕万一碰巧。。。)

    PLUGINS_DICT = {
        'basic': 'api.service.asset.HandleBasic',
        'nic': 'api.service.asset.HandleNic',
        'memory': 'api.service.asset.HandleMemory',
        'disk': 'api.service.asset.HandleDisk',
    }
    config

    代码通过设置规则动态导入

            for k, v in config.PLUGINS_DICT.items():
                # v = 'api.service.asset.HandleDisk'
                module_path, cls_name = v.rsplit('.', 1)
                # module_path = 'api.service.asset'
                # cls_name = 'HandleDisk'
    
                # 先动态导入api.service.asset
                # 再通过反射去获取对应的类, cls就是对应的类
                cls = getattr(importlib.import_module(module_path), cls_name)
    
                # 拿到类可以实例化,这里因为是静态方法,所以不需要实例化直接用
                response = cls.process(server_obj, server_info, None)
    View Code

    备注一下:列表给字符串赋值

    Django返回序列化数据  

    通常通过ajax返回给前端的数据都是字典,需要序列化成json数据。正常请看下之前都是这样写

            ret = {
                'status': 400,
                'message': '****'
            }
            import json
            return HttpResponse(json.dumps(ret))
    View Code

    这里有一个看起来高大上一点的写法:

            from django.http import JsonResponse
            ret = {
                'status': 400,
                'message': '****'
            }
            return JsonResponse(ret)
    View Code

    另外还需提及的一点是,JsonResponse跟HttpResponse的导入位置不一样。

    在django.shortcuts里面输入J提示,在django3.0这个导入会被移除,确实在http里面是有更多导入的,稍微记一下就好了。

  • 相关阅读:
    从零开始PHP学习
    从零开始PHP学习
    从零开始PHP学习
    从零开始PHP学习
    从零开始PHP学习
    [暂停一天]从零开始PHP学习
    [Laravel 5] 表单验证 Form Requests and Controller Validation
    JQuery 在$(window).load() 事件中 不运行 $(window).resize()
    JS计算两个日期相差几天
    python 学习之Windows 下的编码处理!
  • 原文地址:https://www.cnblogs.com/wuzdandz/p/9440041.html
Copyright © 2011-2022 走看看