美文网首页记忆
django吃火锅

django吃火锅

作者: riverstation | 来源:发表于2018-07-07 09:20 被阅读14次

    学习环境

    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 安装某一个软件
      • 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吃火锅

        本文链接:https://www.haomeiwen.com/subject/zbapuftx.html