django吃火锅

学习环境

  1. Ubuntu
  2. 虚拟机(双系统安装)
    • 系统就是软件
    • 光盘安装(淘汰)
    • U盘安装(推荐)
    • 硬盘安装
  3. python开发环境
    • CentOS
      • python2.7
      • python3.4
    • Ubuntu
      • python2.7
      • python3.5
    • python虚拟环境
      • python特有
      • 隔离不同的python环境
      • 隔离不同项目的依赖
    • 数据库
      • 关系型数据库MySQL
        • apt install mysql-server
        • apt install mysql-workbench
      • 非关系型数据库(NoSQL)
        • Redis
        • MongoDB
    • MySQLWorkbench
    • VNC
    • Google Chrome
    • Sougou
  4. 完美解码(离线播放器)

安装Ubuntu

  1. 打开VMware
  2. 新建一个虚拟机,选系统为Ubuntu64
  3. 配置用户名,密码
  4. 安装的时候要想提升速度,把虚拟机的网络断掉(在右下角)

电脑

  1. 明确需求(开发,打游戏,出差...)
  2. 明确预算(9000,15000)
  3. 开发
    • SSD 固态硬盘
    • CPU(i7 7xxx),8系列,标压U,台式机CPU(95w)
    • 内存DDR4 2666,(8G起步,16G足够)
    • 显卡(GTX1050起步)游戏,运算,(机器学习)
  4. 神舟,炫龙...

虚拟机

  1. 用户 rock
  2. 密码 rock1204
  3. MySQL 用户root,密码rock1204
  4. 右击可以解除锁定

Ubuntu

  1. 安装
    • 导入环境集成好的虚拟机
  2. 如果是安装
    • 安装VMwareTools
    • 打开终端 control + alt + t

常用操作

  1. sudo 普通用户借用超级管理员(root)权限去执行权限
  2. vmware-install.pl
    • ./ .当前目录/
    • 看提示,背单词(每天5个,365*5,商务英语,专业英语)
    • 有道词典
  3. 工作区
    • 默认支持4个
    • 快捷键 win+s
    • control + alt + 方向
  4. 软件和更新
    • 将软件源修改为 aliyun 软件源

虚拟环境

  1. 安装pip

    • CentOS yum install pip
    • Ubuntu apt install python-pip
    • 记得最前面添加 sudo
  2. 包管理工具

    • apt apt-get(旧版本中,通用,兼容)
      • apt update 更新源中的软件包
      • apt install xxx 安装指定的软件xxx
      • apt remove xxx 卸载软件(仅卸载安装的软件)
      • apt autoremove xxx 卸载软件(会卸载软件和没有用依赖包)
  3. easy_install 和 apt install virtualenv

    • apt install virtualenv
    • sudo !! sudo使用超级管理员权限执行指令,!! 代表上一条指令
  4. 统一管理 pip install virtualenvwrapper

  5. pip python专用的包管理工具

    • pip install xxx 安装某一个软件
      • 可以指定下载源 -i
      • pip install xxx -i https://pypi.douban.com/simple
    • pip uninstall xxx 卸载某一个软件
    • pip list 列出我们所有的依赖包
    • pip freeze 列出我们自己安装的所有依赖包
  6. 配置虚拟环境

    • 在~/.bashrc中添加导出 export WORKON_HOME=/home/xxx/.virtualenvs
    • 添加激活 source xxx virtualenvwrapper.sh的路径(使用 whereis 或 find进行查找)
    • 创建workon_home
    • 刷新环境 source ~/.bashrc
  7. 虚拟环境使用

    • 创建虚拟环境 mkvirtualenv ENV_NAME
      • mkvirtualenv ENV_NAME -p PythonPath
    • 退出虚拟环境 deactivate
    • 进入虚拟环境 workon ENV_NAME
    • 删除虚拟环境 rmvirtualenv ENV_NAME
  8. 虚拟环境中的安装包是隔离的

    • 在哪个虚拟环境中安装,只有哪个虚拟环境中存在,其它虚拟环境不受影响

Note

安装Django

  1. pip install django==1.11.7
  2. 测试环境
    • import django
    • django.get_version()

开启Django项目

  1. django-admin startproject XXX
  2. 运行 python manage.py runserver
    • python manage.py runserver 0.0.0.0:8000 允许本机的所有ip被外网访问
    • python manage.py runserver 9000 使用本机运行,但端口是9000
  3. 默认运行在本地,使用的端口8000
  4. 创建应用 python manage.py startapp XXX

Django项目结构

  1. manage.py
    • 管理整个项目
  2. XXX/settings.py
    • 项目配置文件
  3. XXX/urls.py
    • 路由器,接收用户请求,分发给视图函数(控制器)
  4. XXX/wsgi.py
    • 网关接口,通常用在线上环境部署(开发过程中不会接触)

settings.py

  1. DEBUG 是否打开DEBUG
  2. ALLOWED_HOSTS 允许访问的主机
  3. INSTALLED_APPS 安装了的应用
  4. DATABASES 数据库配置
  5. LANGUAGE_CODE 中文 zh-hans
  6. TIME_ZONE 中国 Asia/Shanghai

Pycharm打开

  1. 解压
  2. 目录结构中会有 bin
  3. 进入bin
  4. bin 中pycharm.sh
  5. 执行 ./pycharm.sh
  6. 如果想在终端中的位置,那就配置到环境变量中

PyCharm

  1. alt + enter
    • 万能键,代码不会写了,爆红了,爆黄了
  2. 数据库连接工具
    • 支持常见关系型数据库
      • sqlite3
      • 在数据库上右击,add as source(Database)
      • 在PyCharm右侧就会有sqlite3的入口了
      • 第一次使用的时候需要下载驱动

Django

  1. urls - > views -> templates -> 用户
  2. 实际书写顺序,都是从后往前写
    • 最开始定制模板
    • 创建视图函数,渲染模板
    • 添加路由

数据动态加载

  1. 前提得有数据,数据存在数据库中
  2. 定义数据模型,和数据库中的表对应
    • 定义表
    • 迁移
      • 生成迁移,将模型转换成数据库对应的中间映射数据(数据库并没有发生任何变更)
      • 执行迁移,将中间映射的产物执行到数据库中(数据库结构发生改变)
  3. 动态数据请求
    • models定义
    • 映射到数据库中,填写数据
    • views接收请求,获取数据,渲染模板
    • views注册到urls(路由器)中
    • 在模板中展示数据 使用for

模板语法

  1. {% for item in items %} 表达式
  2. {{ var }} 变量

数据库

  1. ForeignKey
    • 外键,属于数据库约束
    • 外键默认是可重复,对应另外一张表的主键

网络状态码

  1. 2xx 都是成功
  2. 3xx 都是不干活的
    • 301 转发
  3. 4xx 错误,客户端错
  4. 5xx 错误,服务器内部错误

数据库连接

  1. 数据库连接需要驱动
  2. mysql
    • pymysql
    • python-mysql
    • mysqlclient (对mysql安装config有要求)

ORM

  1. Object Relational Mapping 对象关系映射
  2. 数据库和对象对应关系
  3. 理解ORM认为它是一个翻译机
    • 操作数据的时候,只需要操作对象就可以了
    • 不关注具体的数据存储逻辑
  4. 如果修改的是模型中的方法,非数据库字段 (models.XXXField),不需要重新迁移
  5. 如果修改了字段和表相关的任何信息,都需要重新迁移

DB

  1. var
    • 可变长度
  2. text

Template

  1. 使用的时候有两种位置
    • 第一种是自己的应用下,好处是不需要注册,不好的地方,有多个应用的时候不能复用页面
    • 第二种是放在工程的目录下,好处是如果有多个应用,可以调用相同的页面,需要注册
      • 路径是绝对路径 os.path.join(BASE_DIR, 'templates')

URLS

  1. 默认跟路由器urls在应用中
  2. 在实际开发中,我们通常在自己的应用中创建自己的urls
  3. 在根urls中将应用的urls包含进来
  4. 使用的时候,路径就变成 /根路径/自己的路径/

数据查询

  1. 过滤器
    • filter 获取符合条件的
    • exclude 去除 符合条件的
  2. 条件句写法
    • 属性__运算符=临界值
    • gt 大于
    • lt 小于
    • gte 大于等于
    • lte 小于等于
    • startswith 大小写敏感的(字母a和A不一样),sqlite 大小写不敏感
    • endswith
    • contains
    • exact
    • iexact i代表ignore (忽略),忽略大小写
    • icontains
    • istartswith
    • iendswith
    • 属性名=值 (忽略大小写)
  3. 缓存集
    • 查询的时候允许使用多个filter,多个exclude
    • 但是只有第一次回去数据库查询,后续操作是对已有结果集的筛选

Q对象

  1. 查询条件的封装
  2. 支持逻辑运算 与或非 & , | , ~
  3. 优点
    • 可以在查询的时候,更好的定位结果集的范围

对象属性

  1. 显示属性
    • 开发者手动定义的,直接看的到的
  2. 隐式属性
    • 系统根据需求,自动创建的对象
    • objects 它是model.Manager对象
    • 当我们手动创建了Manager对象的时候,它就不会自动生成了

Manager

  1. 创建模型
    • 自己书写方法创建
    • 创建对象的时候可以对字段指定默认值
  2. get_queryset 获取结果集的方法
    • get_queryset().filter().exclude

模型继承

  1. 默认模型就是允许继承的,但是默认的继承处理方式不是很合理
    • 默认在父类中定义的字段会存在父类的表中,子类的数据通用部分会存在父表中,子类特有数据会在子表中,子类通过外键进行级联
    • 默认方式比较垃圾,效率比较低
    • 数据库优化策略
      • 避免IO
      • 避免关系过多级联
  2. 开发中,需要将父类抽象化,在元信息中使用abstract=True
    • 抽象化的父类不会再数据库生成表了
    • 子类会将父类中的通用数据,复制到子表中

django_migration

  1. 作用,用来记录数据库迁移的
  2. 每次迁移都会在数据库中进行一个记录
  3. 每次生成迁移的时候,都会去库中进行检索上一次的迁移记录
  4. 如果我们复用数据库的时候,需要删除迁移记录

模型关系

  1. 1:1
    • OneToOneField
    • 通过外键实现
    • 对外键添加唯一约束
    • 人和身份证
    • 在身份证中声明关系(身份证关联到人)
    • 默认情况下,删除人,关联的身份证会自动被删除
    • 删除身份证,人不受影响的
    • 主表 (Person) 从表 (IDCard),声明关系的表就是从表
    • 级联数据获取
      • 从获取主, 关系是直接声明的,它是一个显性属性
      • 主获取从, 关系字段是隐性属性,对象.关系模型名 (小写)
  2. 1:M
    • 级联数据获取
      • 从获取主,(多获取一),显性属性,直接获取
      • 主获取从, 一获取多,隐性属性,和model.Manager同源
        • 也支持查询的各种过滤
        • 对象.关联对象_set. all
        • all ,exclude,last,first,filter,get
  3. N:M
    • 底层是通过两个外键实现,两个外键存在关系表中
  • UNIQUE(XX,YY) 存储的数据不能同时相等 1,1 1,2 2,1 2,2
  • 删除数据的时候会删除自己的数据和关系表中的数据
  • 级联数据获取
    • 通过商品获取购买者(从获取主),也是一个集合,类似model.Manager 也可以进行filter,exclude,all
    • 通过购买者获取所有商品(从主获取从),隐性属性 对象.关联对象_set. all fliter exclude
  1. on_delete

    • CASECADE 默认,默认删除级联数据
    • PROTECT 保护模式,当存在级联数据的时候,删除会抛出,保护异常,不存在级联数据的时候,是允许删除的
    • SETXXX
      • NULL 值本身允许为空
      • DEFAULT 字段本身有默认值
      • 具体值 具体值

你可能感兴趣的:(django吃火锅)