1、WEB与服务器
1. WEB
表示用户可以浏览的网页内容(HTML,CSS,JS)
2. 服务器
能够给用户提供服务的机器
1. 硬件与软件
硬件范畴:一台机器
软件范畴:一个能够接收用户请求并给出响应的程序
- APACHE
- TOMCAT
- IIS
- Nginx
2. 作用
- 存储web所需要的信息(HTML,图片,文件,…)
- 能够处理用户的请求(request),并给出响应(response)
- 执行服务器端程序:数据库操作
3. WEB与服务器之间的关系

4. Django框架
使用python语言来开发服务器端处理程序
2、框架
1. 什么是框架
框架是一个为了解决开放性问题而存在的一种结构。框架本身提供了一些最基本的功能。我们只需要在框架的基础功能之上搭建属于自己的操作即可。
2. Python中的框架
- Django:重量级的WEB框架
- Tornado:异步框架
- Flask:轻量级的WEB框架
3、Django框架
1. 什么是Django
是一个开源框架,2005年发布,采用python语言开发。早期是做新闻以及内容管理的网站的。提供了非常强大的后台管理系统。
2. Django的框架模式 - MTV

- M:Models 层
模型层,负责数据库的建模以及CRUD的操作
- T:Templates 层
模板层,用于处理用户显示的内容,如HTML
- V:Views 层
视图层,处理与用户交互的部分操作,从模型中获取数据,再将数据发送给模板,并显示给用户
MVC
M:Models 模型层 - 负责数据库的建模以及CRUD的操作
V:Views 视图层 - 用于处理用户显示的内容
C:Controllers 控制层 - 处理与用户交互的部分内容,从模型中获取数据,再交给视图层,再显示给用户
4、Django的使用
1. Django介绍
Django官网:https://www.djangoproject.com/
DjangoBook:http://djangobook.py3k.cn/2.0/
2. Django的安装
1. 查看自己已安装的Django版本
- 进入到终端以及python的交互模式 python3/ipython3
- 在交互模式中输入 import django
如果未报错:说明已经安装过django
如果报错:说明从未安装
- 查看已安装的版本
交互模式中:django.VERSION
2. 安装
sudo pip3 install django
3. 使用Django
1. 创建Django项目
使用django-admin 指令,创建Django项目
django-admin startproject 项目名
2. 启动服务,用于访问
使用manage.py 文件启动服务
python3 manage.py runserver
3. 访问网站
启动服务成功后,在浏览器中,通过以下地址访问
http://127.0.0.1:8000
5、Django项目结构介绍
1. manage.py
负责执行django中的各项操作文件
如:
启动服务
创建管理员
创建应用
数据库的同步操作
调用方式:
1.python3 manage.py 子命令
2…/manage.py 子命令
2. 主目录(名称与项目名称相同)
- init.py
项目初始化文件,每当服务器启动的时候,都会自动执行
- urls.py
项目的基础url(路由)配置文件
- wsgi.py
应用服务器配置文件
- settings.py
项目的主设置文件
- BASE_DIR - 获取当前项目的根目录路径
- DEBUG - 调试模式,开发过程推荐使用True
- ALLOWED_HOSTS - 设置允许访问本项目的地址列表,如果不设置,只有本机能访问,推荐写"*";python3 manage.py runserver 0.0.0.0:8000
- INSTALLED_APPS - 指定已安装的应用,如果有自定义应用的话,需要在此位置进行注册
- MIDDLEWARE - 指定注册的中间件
- ROOT_URLCONF - 指定项目的基础路由配置文件
- TEMPLATES - 指定模板的信息
- DATABASES - 指定数据库的信息
- LANGUAGE_CODE - 指定网站的显示语言,如果要使用中文则可以修改为zh-Hans
- TIME_ZONE - 指定时区,如果指定中国的时区,则可以修改为Asia/Shanghai
6、URL的使用
1. urls.py
默认是在主目录中,主路由配置文件,会包含最基本的地址映射。
每个请求到达之后,都会由urls.py中的urlpatterns列表中的url()进行匹配
url()函数匹配上之后,可能将请求转交给其他的urls.py或视图(Views)去处理
1. url函数
url函数的语法:
url(regex, views, kwargs=None, name=None)
1.regex:正则表达式,匹配请求的url
2.views:视图处理函数或其他的urls.py
3.kwargs:字典,用来向views传参,没有参数则可以省略
4.name:字符串,给url()起别名,主要在模板中使用
ex:
urlpatterns = [
url(r"^run/$", run_views),
]
2. 通过url向views传参
- 使用正则表达式传参
使用子组传参,一个子组是一个参数,想要多个参数的话,可以使用多个子组
子组 - ()
urlpatterns = [
#访问路径是run/的时候,交给run_views去处理
url(r"^run/$“, run_views),
#访问路径是run/任意两位数字,交给run_args_views去处理
url(r”^run/(\d{2})", run_args_views)
]
注意:
1.在url()中,一个子组()表示一个参数
2.在views.py中,对应的处理函数要根据url()中子组的个数,相应的定义参数,定义的参数要位于request之后
ex:
url(r"^run/(\d{2})", run1_views),
def run1_views(request, num)
url(r"^run/(\d{2})/(\d{4})", run2_views),
def run2_views(request, num1, num2)
"""first URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path
from .views import *
urlpatterns = [
re_path('admin/', admin.site.urls),
re_path(r"^run/$", run_views),
re_path(r"^run/(\d{2})/$", run1_views),
re_path(r"^run/(\d{4})/(\d{2})/$", run2_views)
]
- 使用url()第三个参数,字典传参
url(r"^show/$", show_views, {“name”:“laoshe”, “age”:“89”})
def show_views(request, name, age):
name:表示的就是字典name参数的值
age:表示的就是字典age参数的值
注意:
1.视图处理函数中,必须声明参数
2.参数的名称和位置,必须要与字典中的名称和位置保持一致
7、Django中的应用
1. 什么是应用
应用就是网站中的一个独立的程序模块
在Django中,主目录一般不处理用户的具体请求,主目录主要做的是项目的初始化和设置,以及请求的分发
2. 创建应用
- 命令
./manage.py startapp 应用名称
ex: ./manage.py startapp news
- 在settings.py 中进行注册
在 INSTALLED_APPS中进行注册
INSTALLED_APPS = [
“django.contrib.admin”,
… …,
“news”,
]
3. 应用的结构组成
- migrations 目录
存放数据库中间文件(日志文件)
- init.py
应用的初始化文件
- admin.py
应用的后台管理配置文件
- apps.py
应用的属性配置文件
- models.py
模型文件,与数据库有关
- tests.py
测试模块
- views.py
定义视图的文件
8、Django的模板(Templates)
1. 什么是模板
模板就是要动态的给用户呈现的网页内容
其实就是一个网页 - 前后端结合的一个网页
2. 模板的设置
在settings.py中,TEMPLATES变量
TEMPLATES = [
{
“BACKEND”:“… …”,
“DIRS”:[… …],
}
]
- BACKEND:指定模板的搜索引擎,不用动
- DIRS:指定模板所存放的目录们
DIRS=[“index.temp”, “music.temp”]
但是,如果DIRS中为空的话,那么Django会自动到每个应用中去搜索一个叫templates的目录来作为模板的管理目录。
推荐:
1.DIRS内容保持为空
2.在每个应用中,都创建一个templates目录
- APP_DIRS
True:首先从DIRS中指定的目录中查找模板,如果没有找到的话,再搜索templates目录
3. 模板的加载方式
- 使用loader获取模板,并通过HttpResponse进行响应
from django.template import loader
1.通过loader加载模板
t = loader.get_template(“模板名称”)
2.通过t对象,将模板渲染成字符串
html = t.render()
3.通过HttpResponse将html响应给客户端
return HttpResponse(html)
- 使用render直接加载模板并返回
from django.shortcuts import render
return render(request, “模板名称”)
4. 模板的语法
- 变量
1.作用:允许将后端的数据传递给模板,在模板中,会根据变量的值进行显示
2.在Django中允许传递给模板做变量的数据类型:数字,字符串,列表,元组,字典,函数,对象
3.变量的语法
loader:
dic={“变量名1”:“值1”, “变量名2”:“值2”}
t = loader.get_template(“xxx.html”)
html = t.render(dic)
return HttpResponse(html)
render:
return render(request, “xxx.html”, dic)
2. 标签
1.什么是标签
允许将服务器端的一些功能嵌入到模板中
2.语法
{% 标签内容 %}
3.常用标签
- for
{% for 变量 in 列表|元组|字典 %}
{% endfor %}
允许使用for提供的内置变量 - forloop
forloop.counter - 记录当前循环的次数,从1开始
forloop.first - 是否是第一次循环(第一项)
forloop.last - 是否是最后一次循环(最后一项)
- if
{% if 条件%}
满足条件要运行的内容
{% endif %}
条件中允许使用比较运算符(>,<,>=,<=,==,!=),逻辑运算符(not, and, or)
注意:and和or不能同时出现
{% if 条件 %}
满足条件运行内容
{% else %}
不满足条件运行的内容
{% endif %}
{% if 条件1 %}
{% elif 条件2 %}
{% elif 条件3 %}
{% else %}
{% endif %}
3. 过滤器
1.作用:过滤数据
在显示变量的数据之前,允许对数据进行筛选或改变
2.语法
{ {变量|过滤器:参数}}
3.简单的过滤器
{ {value|upper}} - 将value变为大写字符
{ {value|lower}} - 将value变为小写字符
{ {value|add:num}} - 将num累加到value之后
{ {value|floatformat:n}} - 将value四舍五入到n位小数
{ {value|truncatechars:n}} - 将字符串截取到n位(包含…)
5. 静态文件
- 什么是静态文件
不需要嵌入服务器端内容的文件,一律都是静态文件,如:图片,css,js,html都是静态文件
- Django中静态文件的处理
需要在settings.py中设置静态文件的访问路径和存储路径
1.指定静态文件的访问路径
STATIC_URL = /static/
作用:当访问路径是:http://localhost:8000/static/*** 一律到静态文件路径中去搜索静态文件
2.定义静态文件的存储路径
STATICFILES_DIRS
STATICFILES_DIRS=(BASE_DIR, 文件夹名)
允许在项目中以及所有的应用中都创建对应名称的目录
3. 访问静态文件
1.直接使用localhost:8000/static//
/”>
2.使用{% static %}访问静态资源
在模板的最顶层增加{% load static %}
在使用静态文件时{% static %}表示的就是静态文件的访问路径

6. 模板的继承
- 什么是模板的继承
当多个模板(网页)具备大部分相同的内容时,就可以使用继承的方式,将相同的东西继承过来,再增加/修改属于自己的内容即可。
- 模板继承的语法
1.在父模板中
必须要标识出来哪些内容是允许被修改的
标签:
{% block 名称 %}
父模板中正常显示的东西
{% endblock %}
block 的作用:定义在子模板中允许被修改的地方;在父模板中正常显示;在子模板中,如果不修改block内容的话则按照父模板中的内容正常显示
2.在子模板中
在最顶层增加一句话
{% extends ‘父模板的名称’ %}
增加block 标签,改写属于自己的内容
{% block 名称 %}
子模板中的内容
{% endblock %}
注意:子模板中的block会覆盖父模板中同名的block内容
9、模型 - Model
1. 什么是模型
模型,是根据数据库中数据表的结构来创建出来的class。每一张表到编程语言中就是一个class,表中的每一个列,到编程语言中就是class的一个属性。并且在模型中还可以完成对数据的CRUD操作。
2. 创建和使用模型 - ORM
- 什么是ORM
ORM:Object Relational Mapping
中文:对象关系映射
简称:ORM,O/RM,O/R Mapping
三大特征:
1.数据表到类(class)的映射:将数据表自动生成一个class类,同时也允许将一个class类自动生成数据库中的一张表。
2.数据类型的映射:允许将表中的字段的数据类型自动映射成编程语言中对应的数据类型,也允许将编程语言的数据类型自动映射成表中的字段的数据类型。
3.关系映射:在编程语言中允许将表与表之间的关系映射出来,表与表之间的关系也可以自动映射到编程语言的class中
- ORM的优点
1.提高了开发的效率,能够自动完成表到对象的映射
2.不用SQL编码,也能够完成对数据的CRUD操作,可以省略庞大的数据访问层
- 创建和配置数据库
1.创建数据库(支持中文)
create database 数据库名 default charset utf8 collate utf8_general_ci;
2.配置数据库(Django)
在settings.py中配置数据库的信息
DATABASES = {
"default":{
"ENGINE": "... ...",
"NAME": "...",
}
}
连接MYSQL的配置如下:
1、ENGINE:引擎
django.db.backends.mysql
2、NAME:要连接到的数据库名
webdb
3、USER:登录到数据库的用户名,一般为root
4、PASSWORD:登录到数据库的密码
5、HOST:要连接的主机,本机的话localhost或127.0.0.1
6、PORT:指定端口,MYSQL的是3306
注意:Django中连接MySQL的话依赖pymysql
在主目录中 init.py
import pymysql
pymysql.install_as_MySQLdb()
- 数据库的同步操作
1../manage.py makemigrations - 将每个应用下的models.py文件生成一个数据库的中间文件,并保存在migrations目录中。
2../manage.py migrate - 将每个应用下的migrations目录中的中间文件同步到数据库中。
- 编写Models
1.注意:
1、Models中的每个class都称为模型类(Model类),实体类(Entry/Entity)
2、Models中的每个模型类,必须继承自models.Model
2.编写模型类
from django.db import models
class Entry(models.Model):
属性1 = models.字段类型(字段选项)