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)
备注一下:列表给字符串赋值

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的更多相关文章
- Python 21 Django 实用小案例1
实用案例 验证码与验证 KindEditor 组合搜索的实现 单例模式 beautifulsoup4 验证码与验证 需要安装Pillow模块 pip stall pillow ...
- Python趣味实用小工具
代码地址如下:http://www.demodashi.com/demo/12918.html python 趣味实用小工具 概述 用python实现的三个趣味实用小工具: 图片转Execl工具 , ...
- Python:通过一个小案例深入理解IO多路复用
通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import time start = time.time() ...
- Python的应用小案例
1.python统计文本中每个单词出现的次数: #coding=utf-8__author__ = 'zcg' import collectionsimport os with open('abc.t ...
- python数据分析实用小抄
1. python数据分析基础 2. numpy 3. Scikit-Learn 4. Bokeh 5. Scipy 6. Pandas 转载于:http://www.jianshu.com/p/ ...
- python 客户端点对点通信小案例
点对点通讯分为客户端和服务器,多个客户端通过服务器进行信息的交流 服务器端代码 service端 #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...
- 6.Python使用Pandas小案例
1.使用以下命令引入Pandas和xlrd,引入成功后在pycharm的setting导入即可使用(pip3是由于个人python版本为3.6)==在dos命令行输入以下信息 pip3 install ...
- 15.Selenium+Python滑动解锁小案例
1.代码实现 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChai ...
- Turtle绘图——python简单上手小案例
Turtle绘图 Turtle模块提供了在二维平面上移动的环境. Turtle可以实现位置.航向和各种可能的状态和动作. import turtle as tu roo = tu.Turtle() # ...
随机推荐
- PMP学习经验总结——ITTO第六版教材
今天小编送的都是干货哦!大家可以收藏一下对学习PMP和项目管理都有很大收获. 4.1 制定项目章程——启动——一次或仅在项目的预定义点开展 概念:编写一份正式批准项目并授权项目经理在项目活动中使用组织 ...
- 无法删除foo.length
- python赋值和生成器
在python赋值过程中,对单个变量的赋值,在所有语言中都是通用的,如果是对两个变量同时进行赋值,这个时候,就会出现一点点小的差异.例如在下面的一两行代码中. a , b = b , a+b 这是同时 ...
- C# 实现身份验证之WCF篇(1)
WCF身份验证一般常见的方式有:自定义用户名及密码验证.X509证书验证.ASP.NET成员资格(membership)验证.SOAP Header验证.Windows集成验证.WCF身份验证服务(A ...
- Struts2中文件上传下载实例
1.单文件上传 jsp页面: <!-- 单文件上传 --> <form action="Fileupload.action" method="post& ...
- css: position的使用;
position有四种模式: static, relative, position, fixed; 1.static(静态定位):默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, ...
- Event Recommendation Engine Challenge分步解析第一步
一.简介 此项目来自kaggle:https://www.kaggle.com/c/event-recommendation-engine-challenge/ 数据集的下载需要账号,并且需要手机验证 ...
- hadoop datanode 启动出错
FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block po ...
- struct sock注释
针对 struct sock 的一些注释: struct sock { /* Socket demultiplex comparisons on incoming packets. */ __u32 ...
- C#设计模式(14)——模板方法模式
1.模板方法模式介绍 提到模板我们经常会想到简历模板/PPT模板等,以简历模板为例,不同的人可以使用一样的简历模板,在填充内容时根据自己的名字/工作经历等填写自己的内容,从而形成不同的简历.在OO中模 ...