Django框架简介
MVC框架和MTV框架
MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
想要更详细的了解MVC模式? :>>点我
Django的MTV模式
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
Django框架图示
HTTP 知识补充
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内容
Python web框架的本质
a. 收发socket消息 --> 按照HTTP协议消息格式去解析消息 b. 路径和要执行的函数的对应关系 --> 主要的业务逻辑 c. 字符串替换 --> 模板(特殊符号 --> 数据)
一个完整得请求流程
0. 启动服务端,等待客户端(用户的浏览器)来连接 1. 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求 2. 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数 3. 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容 4. 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应) 5. 浏览器收到响应的消息之后,按照HTML的规则渲染页面. 6. 关闭连接
Django知识
安装
1. Django版本 1.11.xx 2. 安装方式 1. 命令行 --> Python环境(双版本,pip的使用) pip3 install django==1.11.11 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11 2. PyCharm安装
Django项目启动
1. 命令行启动 在项目的根目录下(也就是有manage.py的那个目录),运行: python3 manage.py runserver IP:端口--> 在指定的IP和端口启动 python3 manage.py runserver 端口 --> 在指定的端口启动 python3 manage.py runserver --> 默认在本机的8000端口启动 2. PyCharm启动 点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)
创建Django项目
1. 创建方式 1. 命令行创建方式 1. cd到你要保存Django项目的目录 2. Django-admin startproject 项目名 --> 会在当前目录创建Django项目 3. django-admin startproject mysite 2. PyCharm创建方式 1. File --> new project --> ... 2. 创建完之后一定要选在新窗口打开!!! 3. File --> New project --> 左侧选Django --> 右侧填项目路径,并且勾选python.exe
配置Django项目 项目名/settings.py文件
1. settings.py文件 1. templates文件夹的位置 2. Templates(存放HTML文件的配置) <-- 告诉Django去哪儿找我的HTML文件 2. 静态文件(css/js/图片) 1. STATIC_URL --> 静态文件夹的别名(在HTML文件中用的) 2. STATICFILES_DIRS --> 静态文件夹的真正路径 例如: # 静态文件保存目录的别名 STATIC_URL = '/static/' # 所有静态文件(css/js/图片)都放在我下面你配置的文件夹中 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") ] 3. 注释掉 csrf 相关的中间件 # 'django.middleware.csrf.CsrfViewMiddleware', # 默认在47行
views.py
1. 专门用来定义处理请求的函数 1. 基本必备三件套 from django.shortcuts import HttpResponse, render, redirect 1. HttpResponse("要返回的内容") --> 通常用于直接返回数据 2. render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换 3. redirect("URL") --> 告诉用户的浏览器去访问其他的URL 2. request相关 1. request.method --> 查看请求的方法 2. request.POST --> 获取POST请求的数据
ORM
1. 什么是ORM? 是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.) import pymysql pymysql.connect( ... ... ) 1. 不同的程序员写的SQL水平参差不齐 2. 执行效率也参差不齐 python语法 --自动翻译--> SQL语句 jQuery DOM $("#d1") --自动翻译--> document.getElementById("d1") 优点: 1. 简单,不用自己写SQL语句 2. 开发效率高 缺点: 1. 记忆你这个特殊的语法 2. 相对于大神些的SQL语句,肯定执行效率有差距 2. ORM的本质(ORM的对应关系:): 类 ---> 数据表 对象 ---> 数据行 属性 ---> 字段 按照规定的语法写,自动翻译成对应的SQL语句. 3. ORM的功能: 1. 操作数据表 --> 创建表/删除表/修改表 2. 操作数据行 --> 数据的增删改查
使用Django的ORM详细步骤
1. 手动创建数据库 create database 数据库名; 2. 在settings.py里面,配置数据库的连接信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型 'NAME': 'day62', # 数据库名称 'HOST': '127.0.0.1', # 连接数据库的地址 'PORT': 3306, # 端口 'USER': 'root', # 用户名 'PASSWORD': '123456', # 密码 } } 3. 在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库 import pymysql pymysql.install_as_MySQLdb() 4. 在app下面的models.py文件中定义一个类,这个类必须继承models.Model # 出版社 class Publisher(models.Model): id = models.AutoField(primary_key=True) # 自增的ID主键 # 创建一个varchar(64)的唯一的不为空的字段 name = models.CharField(max_length=64, null=False, unique=True) 5. 执行两个命令(在项目的根目录(有manage.py文件的那个目录)) 1. python3 manage.py makemigrations --> 把models.py里面的更改记录到小本本上 2. python3 manage.py migrate --> 把更改翻译成SQL语句,去数据库执行
表和表之间的关系
1、一对多(出版社和书) class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64) class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=64) # 外键(models.ForeignKey 一对多) publisher = models.ForeignKey(to="Publisher") 2、多对多(作者和书) class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64) class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=64) # 外键(models.ForeignKey 一对多) publisher = models.ForeignKey(to="Publisher") class Author(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) # 外键(models.ManyToManyField 多对多) books = models.ManyToManyField(to="Book")
GET 请求和 POST 请求
1. GET请求和POST请求 都属于HTTP协议规定的请求方法 2. 什么时候用GET请求? 1. 浏览器想要得到一个HTML页面的时候 2. 搜索引擎查询关键字的时候 (GET请求携带的数据都拼在了URL上) www.sogo.com/web/?query=迪丽热巴 3. GET请求携带的数据有长度限制 40k 3. 什么时候用POST? 1. 向后端提交数据(form表单提交数据) 1. 大段的数据 2. 包含隐私的数据 3. 上传文件 4. 实际中GET和POST的应用场景 1. GET: 1. 直接在浏览器地址栏输入URL访问网站 2. 点击a标签 2. POST: 1. 登录注册 2. 修改(新增)大段的数据 3. 上传文件
request相关的知识点
1. request.method 1. GET 2. POST 2. request.POST ——> 所有和POST请求相关的数据 3. request.GET ——> 所有和GET请求相关的数据