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() # ...
随机推荐
- Django(十二)—关于查询知识点总结
https://www.cnblogs.com/haiyan123/p/7763710.html models.Book.objects.filter(**kwargs): querySet ...
- 在views中引用UserProfile报错RuntimeError: Model class apps.users.models.UserProfile doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
如图报错,在settings中,该加的也加了啊! 显然类似于网上最容易遇到的解决方案如下图,是没有任何意义的 只要在view中有 from .models import UserProfile,Ver ...
- Day7--Python--基础数据类型补充,集合,深浅拷贝
一.基础数据类型补充 1.join() 把列表中的每一项(必须是字符串)用字符串拼接 与split()相反 lst = ["汪峰", "吴君如", " ...
- postgresql安装概览
先从官网下载解压包:https://www.enterprisedb.com/download-postgresql-binaries 这种是解压后,进行配置就可以使用. 另外一种是要用./confi ...
- (string 数组) leetcode 804. Unique Morse Code Words
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- (等比数列)P1423 小玉在游泳 洛谷
题目描述 小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦.已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%.现在小玉想知道,如果 ...
- 爬虫之requests请求库高级应用
1.SSL Cert Verification #证书验证(大部分网站都是https) import requests respone=requests.get('https://www.12306. ...
- centos7下安装pip以及mysql等软件
1.安装pip 安装失败了的提示: No package pip available.Error: Nothing to do 解决方法: 需要先安装扩展源EPEL. EPEL(http://fedo ...
- idea中加入tomcat
File—>Setting—>Build,Execution,Deployment—->Application Servers—>”+”这里添加了之后Edit Configur ...
- 有关mysql的innodb_flush_log_at_trx_commit参数
一.参数解释 0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下在事务提交的时候,不会主动触发写入磁盘的操作. 1:每次事务 ...