2020.4.29 Django模型

发布于 2020-04-29  13 次阅读


1.复习内容

  • 模板变量的语法

    • {{ 变量名 }}
    • {{变量名.值}}
    • {{变量名.KEY}}
    • {{变量名.方法}}
  • 模板的过滤器

    • {{变量 | 过滤器:参数1|过滤器}}
  • 反向解析(使用)

    • url(正则表达式,视图函数,name = 别名)
    • {% url ‘别名’ %}
    • {% url ‘别名’ ‘参数1‘ ’参数2‘ %}
  • fork使用

    • 1.创建fork
    • 2.接收参数
    • 3.在if中判断进程
    • pid = os.fork() 返回值是一个整数
      • 原有进程中返回新进程的PID,
      • 在新进程中返回0
      • 注意事项:
        • 子进程复制父进程空间,从fork下一句开始执行
        • 父子进程运行顺序不一定,都是独立运行
        • 利用if来判断pid,限制父子进程执行不同代码
        • 父子进程有各自的特征 PID PCB等
        • 父进的变量,子进程也可以使用,并且相互之间不被影响
  • 进程相关的函数

    • os.getpid() 返回进程PID值
    • os.getppid() 返回父进程PID值
    • os._exit() 结束一个进程 ,可以返回状态码
    • sys.exit([status]) 结束一个进程,退出时打印status
  • fork进程处理僵尸进程

    • 1.os.wait()处理

      • 使用方法:
        • 在父进程中使用
        • pid,status = os.wait() 阻塞等待子进程退出
      • pid是退出子进程的PID
      • status子进程退出状态
    • 2.waitpid()处理

      • 使用方法
        • 在父进程中使用
        • pid,status = os.waitpid(pid,option)
      • pid参数的作用
        • -1表示等待任意子进程退出
        • >0 指定PID退出
      • option 参数的作用
        • 0 表示阻塞等待
        • WNOHANG 表示非阻塞等待
      • 返回值
        • pid是退出子进程的PID
        • status子进程退出状态
    • 3.创建二级子进程处理僵尸进程

    • 4.通过信号处理子进程退出

      • import signal
      • signal.signal(signal.SIGCHLD,signal.SIG_IGN)
      • 非阻塞,不影响父进程,可以处理所有子进程退出
  • multiprocessing Process创建进程

    • 流程特点:

      • 主进程一般只用来管理子进程
      • 子进程的执行,被封装成一个函数,传递到Process类中
      • 可以通过进程对象设置进程信息属性
      • 调用使用start(),回收使用join()
    • 创建方法

      • 1.导入Process
      • 2.创建Process(target , *args , **kwagrs)
        • target 绑定子进程执行函数
        • args和kwargs都是要传递给target的变量
      • 3.创建的对象调用start()方法 //此时才是真正的执行
      • 4.创建的对象调用join([timeout])方法 //阻塞等待子进程,可以设置超时时间
      • 注意:multiprocessing中不能使用标准输入
    • Process对象相关属性
      • p.name 进程名称
      • p.pid 对应子进程Pid
      • p.is_alive() 查看子进程是否活着
      • p.daemon 设置父进程退出,子进程也退出,
        • 要在start()前设置
        • 通常join() 和 p.daemon只使用一个
  • multiprocessing 进程池使用

    • 为什么要使用进程池

      • 1.重复的创建进程,销毁进程,占用资源
      • 2.任务众多的时候,频繁创建销毁,计算机压力过大
    • 进程池的原理:

      • 创建指定个数的进程,等待执行任务,可以重复利用
    • 创建进程池的方法

      • 1.导入Pool
        • from multiprocessing import Poll
        • Pool([processes]) processes参数是进程数量,默认是系统自动判定
      • 2.将事件加入到进程池队列
        • pool.apply_async(target,args,kwds)
        • 参数说明
          • target 是一个函数
          • args kwds是函数的参数 , args类型是一个元组
          • 注意这里第二个参数是kwds,类型是一个字典
          • 一定要注意参数个数
        • 返回值:返回函数事件对象
      • 3.关闭进程池
        • pool.close()
        • 先关闭进程池,关闭之后就不能加入新的进程
      • 4.回收进程池
        • pool.join()

2.灵感代办

  • 线程的复习
  • 函数式开发复习

3.学习内容

  • Django静态文件使用

    • Django静态文件

      • 不能和服务器交互(例如js,css,图片,音视频)
    • 静态文件配置

      • settings.py中(配置路由访问地址,跟文件所存实际地址)
        • 设置STATIC_URL=’路由地址‘
        • 设置STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)
    • 访问静态文件

      • 1.静态路径直接访问
        • <\img src="http://127.0.0.1:8000/static/images/lena.jpg">
      • 2.标签访问
        • 1.加载static目录 {% load static%}
        • 2.使用静态资源 {% static ‘路径’ %}
  • Django APP

    • 什么是应用

      • 模块化开发,将相应模块写到一个地方,易于管理
      • 可以包含自己的路由,视图
      • 使用include(“包名”)来转发urls
    • 如何创建应用

      • python manage.py startapp 应用名称
    • Django应用结构组成

      • migrations 保存数据迁移的中间文件
      • __init__ 包路径的默认文件
      • admin.py 应用后台管理配置文件
      • apps.py 应用属性配置文件
      • models.py 与数据库相关模型映射文件
      • tests.py 应用单元测试文件
      • views.py 定义视图处理函数文件
    • 配置安装应用APP

      • settings.py文件中
      • INSTALLED_APPS = [ ‘自定义应用名称’ ]
    • Django 应用的路由分布式

      • url(r'^news/',include('news.urls')),
      • urls文件需要自己创建
  • Django 数据库和模型

    • 数据库配置文件

      • 在settings.py中的DATABASES变量中
      • ‘default’ = {‘ENGINE’:””,
        • ’NAME’:’databaseName’
        • ‘USER’:’用户名’
        • ‘PASSWORD’:’密码‘
        • ‘HOST’:’主机地址’
        • ‘PORT’:端口号
      • }
    • 数据库后端引擎(django.db.backends.)

      • mysql 、sqlite、oracle、postgresql
    • 数据名命名方式

      • APP名称_类名(小写)
    • pymsql支持

      • 写在项目根目录的init中
        • import pymysql
        • pymysql.install_as_MySQLdb()
      • django2.2以上 ,不支持pymysql
    • models模块使用

      • 类要继承model.Model

      • FIELD_TYPE 字段类型

        • 作用:创建指定的字段
        • BooleanField() 真假
        • CharField() varchar 必须执行max_length=数字
        • DateField() 数据库类型 date
          • 参数:DateField.auto_now 自动设置该字段为当前时间(True/False)
          • 参数:DateField.auto_now_add 第一次被创建就设置当前时间(True/False)
          • 参数:DateField.defalut 设置当前时间(True/False)
          • 以上参数只能选一个使用
        • DateTimeField() 数据库类型 datatime()
        • DecimalField() 数据库类型decimal(x,y)
          • DecimalField.max_ddigits:位数总数
          • DecimalField.decimal_places:小数点后面数字数量
        • FloatField() 数据库类型 double()
        • TextField() 数据库类型longtext
      • FIELD_OPTIONS 字段选项

        • 作用:创建列时候做修饰,多个选项用,隔开
        • primary_key (True,False) 是否设置主键,主键就不能null和unique
        • null (True,False) 是否可以设置为空
        • default ’默认值‘ 给字段设置一个默认值
        • db_index (True,False) 是否增加索引
        • unique (True,False) 是否设置值为一
        • db_column 指定一个列名,不指定就使用属性名
    • 数据库的迁移:

      • 迁移就是将py写好的模型,同步到数据库
      • 1.生成更新文件: makemiarations
      • 2.执行迁移脚本: migrate
    • 执行迁移失败处理

      • 1.删除所有APP下migrataions下的000开头的Py文件
      • 2.删除mysql的数据表,或者数据库
      • 3.重新执行命令/重新创建数据库
    • 数据库的操作(CURD操作)

      • 数据库的增删改查通过模型管理器实现
      • 模型管理器:
        • 自己创建的类.objects
    • 创建数据对象

      • 原理:通过python对象 和数据库做映射
      • 创建方法:
        • 1.自己定义的模型类.objects.create(属性=值,属性=值)
          • 一个create 就代表数据库的一条记录
        • 2.创建对象(自己定义的类)调用save() 保存
        • 3.使用字典创建对象,并调用save()进行保存
          • 就是传递参数时候用**kwargs

4.扩展延伸知识

5.知识内容个人梳理

6.今天都复习了之前的什么内容


Ares个人进阶之路