Fork me on GitHub

Django基础知识


Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。

1.MVC与MTV模型

1.1 MVC

Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:

1.2 MTV

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

  • M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
  • T 代表模板 (Template):负责如何把页面展示给用户(html)。
  • V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。

除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:

一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
以上内容借鉴自 点击原文《Django框架——Django简介》

2. 开始的准备工作

2.1 HTTP协议消息的格式

  • 1.请求(request)

    请求方法 路径 HTTP/1.1\r\n
    k1:v1\r\n
    …\r\n
    \r\n
    请求体 <– 可以有,可以没有

  • 2.响应(response)

    HTTP/1.1 状态码 状态描述符\r\n
    k1:v1\r\n
    Content-Type: text/html; charset=utf8\r\n
    \r\n
    响应正文 <– HTML内容

  • 3.GET请求和POST请求

    • GET请求:
      1. 浏览器请求一个页面
      2. 搜索引擎检索关键字的时候
    • POST请求:
      1. 浏览器向服务端提交数据,比如登录/注册等

2.2 Python web框架的本质

  • 收发socket消息 –> 按照HTTP协议消息格式去解析消息
  • 路径和要执行的函数的对应关系 –> 主要的业务逻辑
  • 字符串替换 –> 模板(特殊符号 –> 数据)
  • 一个完整得请求流程:
    1. 启动服务端,等待客户端(用户的浏览器)来连接
    2. 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求
    3. 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数
    4. 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容
    5. 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应)
    6. 浏览器收到响应的消息之后,按照HTML的规则渲染页面.
    7. 关闭连接

2.3 Django项目基本命令

  • 创建项目:
    1
    django-admin startproject 项目名
  • 命令行启动项目:
    1
    2
    3
    python3 manage.py runserver IP:端口  --> 在指定的IP和端口启动
    python3 manage.py runserver 端口 --> 在指定的端口启动
    python3 manage.py runserver --> 默认在本机的8000端口启动
  • 创建app:
    1
    python3 manage.py startapp app名字

2.4 Django静态文件配置

  • 1.Templates(存放HTML文件的配置) <– 告诉Django去哪儿找我的HTML文件。
  • 2.静态文件(css/js/图片)
    1
    2
    #静态文件保存目录的别名
    STATIC_URL = '/static/'
    1
    2
    3
    4
    5
    6
    7
    '''
    所有静态文件(css/js/图片)都放在该特定文件夹中
    下面的路径可指定多个,全都使用别名来引用,会自动从下面的目录中依次查找文件
    '''
    STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    ]

2.5 注释掉setting.py中 带有 csrf 的那一行(大概45~47行)

3. Django的ORM

3.1 什么是ORM

ORM 全拼Object-Relation Mapping.中文意为 对象-关系映射.在MVC/MVT设计模式中的Model模块中都包括ORM

3.2 ORM优势

  • 只需要面向对象编程, 不需要面向数据库编写代码.

    对数据库的操作都转化成对类属性和方法的操作。
    不用编写各种数据库的sql语句。

  • 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异。

    不在关注用的是mysql、oracle…等。
    通过简单的配置就可以轻松更换数据库, 而不需要修改代码。

3.3 ORM劣势

  • 相比较直接使用SQL语句操作数据库,有性能损失。
  • 根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失。

3.4 ORM和数据库关系

  • 每个模型都是一个Python类,它是django.db.models.Model的子类。
  • 模型的每个属性都代表一个数据库字段。
  • 综上所述,Django为您提供了一个自动生成的数据库访问API。

3.4 使用Django的ORM详细步骤

  • 自己动手创建数据库
    1
    create database 数据库名;
  • 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 数据库相关的配置
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
    'HOST': '127.0.0.1', # 连接数据库的地址
    'PORT': 3306, # 端口
    'NAME': "day61", # 数据库名称
    'USER': 'root', # 用户
    'PASSWORD': '123456' # 密码
    }
    }
  • 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库。

    在项目/init.py文件中,写下面两句:

    1
    2
    3
    import pymysql
    # 告诉Django用pymysql来代替默认的MySQLdb
    pymysql.install_as_MySQLdb()
  • 在app下面的models.py文件中定义一个类,这个类必须继承models.Model
    1
    2
    class 类名(models.Model):
    ...
  • 执行两个命令
    1
    2
    python3 manage.py makemigrations # 保存修改操作信息,类似于.git相关操作
    python3 manage.py migrate # 执行

未完待续哦…

本文结束啦 感谢您阅读
路漫漫其修远兮 吾将上下而求索