Django基础概念和MVT架构(一)

1.1Django简介

Django简介

  • Django : 发音为 [ `dʒæŋɡəʊ ]. 名称来源于比利时爵士音乐家 Django Reinhardt
  • Python 语言写的开源web开发框架, 发布于2005年7月.
  • Django 的主要目的是简便、快速的开发数据库驱动的网站.
  • Django 强调代码复用, 多个组件可以很方便的以 “插件”形式服务于整个框架. 有许多功能强大的第三方插件.
  • Django 遵循MVC设计模式. 但是有一个专有名词 :MVT  

MVC介绍

  • MVC 全拼为Model-View-Controller
  • MVC 核心思想 : 解耦
    • 让不同的模块之间降低耦合, 增强代码的可扩展性和可移植性, 实现更好的向后续版本的兼容
    • 开发原则 : 高内聚, 低耦合
  • MVC 解析
    • M全拼为Model, 主要封装对数据库层的访问, 内嵌ORM框架, 实现面向对象的编程来操作数据库.
    • V全拼为View, 用于封装结果, 内嵌了模板引擎, 实现动态展示数据.
    • C全拼为Controller, 用于接收GET或POST请求, 处理业务逻辑, 与Model和View交互, 返回结果.
  • 当前主流的开发语言如 Java、PHP、Python、... 中都有MVC设计模式.

    MVT介绍

    • MVT 全拼为Model-View-Template
    • MVT 核心思想 : 解耦
    • MVT 解析
      • M (模型)全拼为Model, 与MVC中的M功能相同, 负责数据处理, 内嵌了ORM框架.
      • V (视图)全拼为View, 与MVC中的C功能相同, 接收HttpRequest, 业务处理,返回HttpResponse.
      • T (模板)全拼为Template, 与MVC中的V功能相同, 负责封装构造要返回的html, 内嵌了模板引擎.
    • MVT和MVC 差异就在于黑箭头标识出来的部分.

    总结

    学习 Django, 重点就是研究 Model-View-Template 三个模块间如何协同工作及各自模块的代码如何编写。

    补充

    设计模式

    • 设计模式:是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
    • 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
    • 设计模式使代码编写真正工程化。
    • 设计模式是软件工程的基石脉络,如同大厦的结构一样。

    高内聚,低耦合

    • 耦合性:指软件系统结构中各模块间相互联系紧密程度的一种度量。

      • 模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
      • 模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
    • 内聚性:指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。

      • 若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

1.2虚拟环境

为什么要搭建虚拟环境?

  • 在开发过程中, 当需要使用python的某些工具包/框架时需要联网安装

    • 比如联网安装Django框架django1.8.2版本

      sudo pip install django==1.8.2
      
  • 提示:使用如上命令, 会将django1.8.2安装到/usr/local/lib/python版本/dist-packages路径下
  • 问题 : 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.
  • 解决方案 : 虚拟环境
    • 作用 : 虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响.
    • 所有的虚拟环境都位于/home/下的隐藏目录.virtualenvs

如何搭建虚拟环境?

  • 安装虚拟环境的命令 :

    sudo pip install virtualenv
    sudo pip install virtualenvwrapper
    
  • 创建虚拟环境的命令 :

    • 提示:如果不指定python版本,默认安装的是python2的虚拟环境
    • 在python2中,创建虚拟环境

      mkvirtualenv 虚拟环境名称
      例 :
      mkvirtualenv py_django
      
    • 在python3中,创建虚拟环境

      mkvirtualenv -p python3 虚拟环境名称
      例 :
      mkvirtualenv -p python3 py3_django
      • 提示 :

        • 创建虚拟环境需要联网
        • 创建成功后, 会自动工作在这个虚拟环境上
        • 工作在虚拟环境上, 提示符最前面会出现 “虚拟环境名称”

      如何使用虚拟环境?

      • 查看虚拟环境的命令 :

          workon 两次tab键

        使用虚拟环境的命令 :

          workon 虚拟环境名称
        
          例 :使用python2的虚拟环境
          workon py_django
        
          例 :使用python3的虚拟环境
          workon py3_django

        退出虚拟环境的命令 :

          deactivate

        删除虚拟环境的命令 :

          rmvirtualenv 虚拟环境名称
        
          例 :删除虚拟环境py3_django
        
          先退出:deactivate
          再删除:rmvirtualenv py3_django

        如何在虚拟环境中安装工具包?

        • python3版本下安装django1.8.2的包 :

            pip install 包名称
          
            例 : 安装django1.8.2的包
            pip install django==1.8.2
          • 工具包安装的位置 :

            • python2版本下:
              • ~/.virtualenvs/py_django/lib/python2.7/site-packages/
            • python3版本下:
              • ~/.virtualenvs/py3_django/lib/python3.5/site-packages
          • 查看虚拟环境中安装的包 :

              pip freeze

1.3创建Django项目

  • 在Django项目中, 项目的组织结构为 : 一个项目包含多个应用, 一个应用对应一个业务模块.
  • 示例 : 创建项目的名称为BookManager, 创建应用名称为Book, 完成图书信息的维护.
  • 提示 : 在当前用户的某个目录下创建项目, 这样不会发生权限问题.

创建项目

  • ~/Desktop/.../目录下创建项目BookManager

      例 : 在桌面创建项目
      cd ~/Desktop/
    
  • 创建项目的命令 :

    • 创建好项目就可以使用PyCharm打开.

      django-admin startproject 项目名称
      例 :创建项目BookManager
      django-admin startproject BookManager
      
  • 项目结构

    • BookManager : 是与项目同名的文件, 内部包含如下项目的配置文件.
      • init.py : 是表示文件BookManager可以被当作包使用.
      • settings.py : 是项目的整体配置文件.
      • urls.py : 是项目的URL配置文件.
      • wsgi.py : 是项目与WSGI兼容的Web服务器入口.
    • manage.py : 是项目运行的入口, 指定配置文件路径.

创建应用

  • BookManager项目中, 创建应用Book

      cd BookManager/
      python manage.py startapp Book
    
  • 项目结构

    • admin.py : 是后台的站点管理注册文件.
    • init.py : 是表示文件Book可以被当作包使用.
    • migrations : 是做模型迁移的.
    • models.py : 是处理数据的.MVT中的M
    • tests.py : 是做测试用的.
    • views.py : 是处理业务逻辑的.MVT中的V

选取并添加对应虚拟环境下的python

  • 虚拟环境py_django下的python

      which python
    
      结果:
      /home/python/.virtualenvs/py_django/bin/python
    
  • 虚拟环境py3_django下的python

      which python
    
      结果:
      /home/python/.virtualenvs/py3_django/bin/python

    安装应用

  • 安装应用前安装应用后

    测试服务器

    • 在开发阶段, 为了能够快速预览到开发的效果, Django提供了一个纯Python编写的轻量级web服务器,
      • 仅在开发阶段使用,非正式服务器
    • 运行测试服务器的命令 :
        python manage.py runserver ip:端口
      
        python manage.py runserver 172.16.21.25:8001
        对应:
        http://172.16.21.25:8001/
      
    • ip和端口号可以不写, 默认ip为127.0.0.1;端口号为8000.

        python manage.py runserver
        对应:
        http://127.0.0.1:8000/
      • 提示:如果项目的虚拟环境由py3_django切换到py_django时,需要同时切换测试服务器的虚拟环境到py_django

      • 输入http://127.0.0.1:8000/即可访问.

        • 刷新网页就可以查看每次代码执行效果
        • 如果增加代码、修改代码、删除代码服务器会自动重启.
        • ctrl+c停止服务器

1.4模型

  • 当前项目的开发, 都是数据驱动的。
  • 以下为书籍信息管理的数据关系:书籍和人物是 :一对多关系

    • 要先分析出项目中所需要的数据, 然后设计数据库表.

    书籍信息表

    字段名字段类型字段说明
    id AutoField 主键
    name CharField 书名
    idname
    1 西游记
    2 三国演义

    人物信息表

    字段名字段类型字段说明
    id AutoField 主键
    name CharField 人名
    gender BooleanField 性别
    book ForeignKey 外键
    idnamegenderbook
    1 孙悟空 False 西游记
    2 白骨精 True 西游记
    3 曹操 False 三国演义
    4 貂蝉 True 三国演义

    使用Django进行数据库开发的提示 :

    • MVT设计模式中的Model, 专门负责和数据库交互.对应(models.py)
    • 由于Model中内嵌了ORM框架, 所以不需要直接面向数据库编程.
    • 而是定义模型类, 通过模型类和对象完成数据库表的增删改查.
    • ORM框架就是把数据库表的行与相应的对象建立关联, 互相转换.使得数据库的操作面向对象.

    使用Django进行数据库开发的步骤 :

    1. 定义模型类
    2. 模型迁移
    3. 操作数据库

    1. 定义模型类

    • 根据书籍表结构设计模型类:
      • 模型类:BookInfo
      • 书籍名称字段:name
    • 根据人物表结构设计模型类:
      • 模型类:PeopleInfo
      • 人物姓名字段:name
      • 人物性别字段:gender
      • 外键约束:book
        • 外键要指定所属的模型类 book = models.ForeignKey(BookInfo)
    • 说明 :
      • 书籍-人物的关系为一对多. 一本书中可以有多个英雄.
      • 不需要定义主键字段, 在生成表时会自动添加, 并且值为自增长.
    • 根据数据库表的设计

      • models.py中定义模型类,继承自models.Model

        from django.db import models
        
        # 准备书籍列表信息的模型类
        class BookInfo(models.Model):
          # 创建字段,字段类型...
          name = models.CharField(max_length=10)
        
        # 准备人物列表信息的模型类
        class PeopleInfo(models.Model):
          name = models.CharField(max_length=10)
          gender = models.BooleanField()
          # 外键约束:人物属于哪本书
          book = models.ForeignKey(BookInfo)
        
        # 模型类准备好之后,需要创建和执行迁移==建表
        

    2. 模型迁移 (建表)

    • 迁移由两步完成 :

      • 生成迁移文件:根据模型类生成创建表的语句
        python manage.py makemigrations
        
      • 执行迁移:根据第一步生成的语句在数据库中创建表
        python manage.py migrate
        
    • 迁移前

    • 迁移后

      • 提示:默认采用sqlite3数据库来存储数据

      3. 操作数据库

      • 通过模型类和对象完成数据库表的增删改查.
      • 进入项目的shell, 进行简单的增删改查 API操作.
        • ctrl+d或输入quit()可以退出shell.
          python manage.py shell
          
      • 测试增删改查 API操作

          # 引入应用中的模型类
          from Book.models import *
        
          # 创建书籍模型对象
          book = BookInfo()
          # 新增记录
          book.name = 'xiyouji'
          # 保存记录
          book.save()
          # 查询记录
          BookInfo.objects.all()
          # 删除记录 : 再查询时,表里数据为空
          book.delete()
        
          # 创建人物模型对象
          people = PeopleInfo()
          people.name = 'sunwukong'
          people.gender = True
          people.book = book
          people.save()
          # 外键查询 : 查询书里面保存的人物信息(peopleinfo_set是隐式生成的)
          book.peopleinfo_set.all()
        
          # 退出shell
          quit()
posted @ 2018-01-30 15:42  Demon神秘  阅读(2180)  评论(0编辑  收藏  举报