drf学习之Django进阶点
一.Django migrations原理
1.makemigrattions:
相当于在每个app下的migrations文件夹下生成一个py脚本文件用于创建表或则修改表同步modes.py的改动,还未作用到数据库比如0001_initial.py,可以用python manger.py sqlmigrate theapp 0001查看文件中对应的sql命令。
2.migrate:
在每个app下的migrations下查找对应的py文件脚本运行同步到数据库,但做了很多次改变后里面有很对文件如何找到对应的oy文件并且只运行它,这就要依靠django_migrations这张表,里面详细的记录了运行了migrations下的哪些文件,执行migrate时会在这张表中查找运行了哪些文件,如果找到就会跳过不运行。如果执行migrate未执行脚本,有可能已经运行过了,就可以到表中查看对应记录及表删除从新运行。
二.Django信号量
三.Django从请求到响应的完整过程
四.独立使用Django的Model
1.导入数据:
# _*_ encoding:utf-8 _*_ __author__ = 'LYQ' __data__ = '2018/8/17 19:30' #独立使用django的model import sys import os #获取当前脚本文件的目录 pwd=os.path.dirname(os.path.realpath(__file__))
#将项目的根目录加入到搜索路径下 sys.path.append(pwd+'../')
#如果要单独使用django的model,必须导入django的环境变量,与项目的setting文件一致,django依赖里面的一些设置文件(因为设置了根目录,所以这样就能找到) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Vueshops.settings") import django django.setup() #位置要放对,配置好引入,不然会报错,很多东西还未配置好 from goods.models import GoodsCategory from db_tools.data.category_data import row_data for lev1_cat in row_data: lev1_instance=GoodsCategory() lev1_instance.code=lev1_cat['code'] lev1_instance.name=lev1_cat['name'] lev1_instance.category_type=1 lev1_instance.save() for lev2_cat in lev1_cat['sub_categorys']: lev2_instance = GoodsCategory() lev2_instance.code = lev2_cat['code'] lev2_instance.name = lev2_cat['name'] lev2_instance.category_type = 2 lev2_instance.parent_category=lev1_instance lev2_instance.save() for lev3_cat in lev2_cat['sub_categorys']: lev3_instance = GoodsCategory() lev3_instance.code = lev3_cat['code'] lev3_instance.name = lev3_cat['name'] lev3_instance.category_type = 3 lev3_instance.parent_category = lev2_instance lev3_instance.save()