动态导入模块

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)

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

Django返回序列化数据 

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

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

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

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

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

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

Python Django 实用小案例2的更多相关文章

  1. Python 21 Django 实用小案例1

    实用案例 验证码与验证   KindEditor      组合搜索的实现 单例模式      beautifulsoup4 验证码与验证 需要安装Pillow模块 pip stall pillow ...

  2. Python趣味实用小工具

    代码地址如下:http://www.demodashi.com/demo/12918.html python 趣味实用小工具 概述 用python实现的三个趣味实用小工具: 图片转Execl工具 , ...

  3. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import time start = time.time() ...

  4. Python的应用小案例

    1.python统计文本中每个单词出现的次数: #coding=utf-8__author__ = 'zcg' import collectionsimport os with open('abc.t ...

  5. python数据分析实用小抄

    1. python数据分析基础 2. numpy 3. Scikit-Learn 4. Bokeh 5. Scipy 6. Pandas   转载于:http://www.jianshu.com/p/ ...

  6. python 客户端点对点通信小案例

    点对点通讯分为客户端和服务器,多个客户端通过服务器进行信息的交流 服务器端代码  service端 #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  7. 6.Python使用Pandas小案例

    1.使用以下命令引入Pandas和xlrd,引入成功后在pycharm的setting导入即可使用(pip3是由于个人python版本为3.6)==在dos命令行输入以下信息 pip3 install ...

  8. 15.Selenium+Python滑动解锁小案例

    1.代码实现 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChai ...

  9. Turtle绘图——python简单上手小案例

    Turtle绘图 Turtle模块提供了在二维平面上移动的环境. Turtle可以实现位置.航向和各种可能的状态和动作. import turtle as tu roo = tu.Turtle() # ...

随机推荐

  1. PMP学习经验总结——ITTO第六版教材

    今天小编送的都是干货哦!大家可以收藏一下对学习PMP和项目管理都有很大收获. 4.1 制定项目章程——启动——一次或仅在项目的预定义点开展 概念:编写一份正式批准项目并授权项目经理在项目活动中使用组织 ...

  2. 无法删除foo.length

  3. python赋值和生成器

    在python赋值过程中,对单个变量的赋值,在所有语言中都是通用的,如果是对两个变量同时进行赋值,这个时候,就会出现一点点小的差异.例如在下面的一两行代码中. a , b = b , a+b 这是同时 ...

  4. C# 实现身份验证之WCF篇(1)

    WCF身份验证一般常见的方式有:自定义用户名及密码验证.X509证书验证.ASP.NET成员资格(membership)验证.SOAP Header验证.Windows集成验证.WCF身份验证服务(A ...

  5. Struts2中文件上传下载实例

    1.单文件上传 jsp页面: <!-- 单文件上传 --> <form action="Fileupload.action" method="post& ...

  6. css: position的使用;

    position有四种模式: static, relative, position, fixed; 1.static(静态定位):默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, ...

  7. Event Recommendation Engine Challenge分步解析第一步

    一.简介 此项目来自kaggle:https://www.kaggle.com/c/event-recommendation-engine-challenge/ 数据集的下载需要账号,并且需要手机验证 ...

  8. hadoop datanode 启动出错

    FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block po ...

  9. struct sock注释

    针对 struct sock 的一些注释: struct sock { /* Socket demultiplex comparisons on incoming packets. */ __u32  ...

  10. C#设计模式(14)——模板方法模式

    1.模板方法模式介绍 提到模板我们经常会想到简历模板/PPT模板等,以简历模板为例,不同的人可以使用一样的简历模板,在填充内容时根据自己的名字/工作经历等填写自己的内容,从而形成不同的简历.在OO中模 ...