49.框架介绍
【一】Web框架本质
- web框架其实就是一个TCP服务端
- TCP服务端与客户端进行交互的过程
- 客户端和服务端通过网络请求实现数据交互,从架构层面上简单的将web框架看做是对前端、数据库的全方位整合
- 客户端(应用、浏览器)<> Web框架 <> 数据库
【二】分层web框架
1)manage.py
- 对浏览器的访问路径进行分配
import socket
from response import response
from urls import urlpatterns
server = socket.socket()
ip = "127.0.0.1"
port = 8802
addr = (ip, port)
server.bind(addr)
server.listen(5)
conn, addr = server.accept()
# 接收数据,解码
from_client_data = conn.recv(1024)
from_client_data = from_client_data.decode()
# 获取路径
visit_path = from_client_data.split(" ")[1]
for path_view in urlpatterns:
path, view = path_view
if path == visit_path:
data = view()
conn.send(response(data))
2)response.py
def response(to_client_data):
# 响应首行:协议版本 + 状态码 + 空白行
back_statue = "HTTP/1.1 200 OK \r\n\r\n"
response_data = back_statue + to_client_data
response_data = response_data.encode()
return response_data
3)urls.py
- 存储函数
from view import index, login, register
urlpatterns = [
("/", index),
("/login", login),
("/register", register)
]
4)view.py
- 存储路由器与函数对应关系
def index():
to_client_data = "this is index "
return to_client_data
def login():
to_client_data = "this is login"
return to_client_data
def register():
to_client_data = "this is register"
return to_client_data
【三】动静态网页
1)静态网页
1.概念
- 一种基本的网页形式,其中的数据和布局在编写 HTML 文件时就已经固定下来,不随用户的请求或时间的变化而改变
2.特点
- 内容固定
- 无需服务器处理
- 加载速度快
2)动态网页
1.概念
- 在服务器端运行脚本语言来生成和处理数据,然后再将处理后的数据以HTML格式发送至浏览器
2.特点
- 内容实时更新
- 需要服务器处理
- 数据交互性强
【四】jinja2模块语法
1)下载
pip3 install jinja2
2)功能
- 支持将数据传递到HTML页面并提供近似后端的处理方式简单快捷的操作数据
【五】基于wsgiref封装响应
from wsgiref import simple_server
def run(request, response):
# 固定响应格式
response("200 OK", [])
return [b"Hello World"]
if __name__ == '__main__':
ip = "127.0.0.1"
port = 8819
server = simple_server.make_server(ip, port, run)
server.serve_forever()
【六】请求架构流程分享下
- 浏览器(客户端)发起请求
- 服务端是由 wsgiref 模块启动起来的
- 浏览器的请求会打到 wsgiref 的 request 对象身上
- 比如可以获取到 请求路径 PATH_INFO
- 有了请求路径以后调用 urls.py 模块
- 对请求路径进行映射 根据请求路径获取到指定的 函数 地址
- 交给 wsgiref 模块去启动访问
- 到了视图函数 view 内部
- 访问你的数据库读取响应的数据 读取到了小说的标题和内容
- 借助 jianjia2 模块的 模拟语法
- 创建模版对象 将 读取到了小说的标题和内容 渲染到前端页面上
- 模版语法进行渲染 {{ }} /
- 返回给浏览器数据
- 遵循 HTTP 协议 ---> 到了 wsgiref 模块的 response 对象上
- response("200 OK", [])
- return 前端页面的二进制数据
- 被浏览器接收到
- 直接对响应体数据进行渲染
【七】Python框架初识
1)网络框架及MVC架构
1.网络框架
- 所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面。这样能大大提高开发者的工作效率,同时提高网络应用程序的质量。
2.MVC架构
- 软件工程中的一种软件架构模式
- MVC把Web应用系统分为3个基本部分
- 模型(Model)
- 用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能
- 视图(View)
- 负责数据的显示和呈现,View是对用户的直接输出
- 控制器(Controller)
- 负责从用户端收集用户的输入,可以看成提供View的反向功能
- 模型(Model)
2)Python主流的后端框架
1.Django
- 大而全
- 自带的功能非常的多
- 但是有时候会略显笨重
2.Flask
- 小而精
- 自带的功能非常的少
- 但是第三方模块非常的多
- 类似于'游骑兵'
- flask的第三方模块加到一起甚至比django还多
- 并且也越来越像django
- flask由于过多的依赖于第三方模块
- 有时候也会受制于第三方模块
3.Tornado
- 异步非阻塞框架
- 速度极快
- 常被用作大型站点的接口服务框架
- 甚至可以用于充当游戏服务器
4.Fastapi
- 自动文档
- Python 类型提示
- 数据验证
- 异步支持
- 依赖注入
- 安全功能
【八】Django框架安装
1)注意实现
- Django项目名和路径不能出现中文
- 一个Django项目是一个独立的项目,不建议文件里套Django
2)pip安装
# 不指定版本会默认安装最新版
pip install django==3.2.12
# 显示出当前模块的所有版本信息
pip install django==
3)命令行基本使用
1.创建Django项目
-
到指定路径下的终端输入创建语法
django-admin startproject 项目名
__init__.py 空的初始化的包信息
asgi.py 将项目上线到服务器上用到服务对象
settings.py 整个Djangoode配置文件
urls.py 路由映射关系
wsgi.py 本地Django启动的时候用的tcp服务对象
manage.py 整个Django项目的控制器
2.创建APP
-
到指定Django路径下的终端输入创建语法
cd 项目名 python manage.py startapp 应用名
migrations 数据库迁移文件
admin.py 操作Django后台
apps.py app的信息
models.py 定义数据库模型表字段的位置
tests.py 测试文件
views.py 视图函数
3.启动Django项目
python manage.py runserver
python manage.py runserver [IP:Port]
4)PyCharm基本使用
1.创建Django项目
新建项目 --> 选择Django(路径不能有中文)
2.创建APP
工具 --> 运行manage.py任务... -->输入指令(startapp 应用名)
3.指定启动ip
5)注册和使用APP
- 创建APP后,如果想使用相关的功能,必须将创建的APP注册到配置文件中
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 必须注册app才能使用app(写入创建的APP名称)
'user'
]
-
使用APP
-
定义视图函数(视图函数必须有一个位置参数request)
# views.py from django.shortcuts import render # Create your views here. # 定义一个视图函数 必须有一个位置参数 def login(request): # render 渲染前端页面的语法 # 前端文件名必须在 templates 文件夹下 # 返回的是一个 HTML 页面 return render(request,"login.html")
-
要在路由器映射关系(urls.py)注册映射关系
from django.contrib import admin from django.urls import path # 引入 from 地址 import 函数 urlpatterns = [ path('admin/', admin.site.urls), # 网址后缀名称,视图函数 # 默认访问根目录的时候 会执行视图函数返回数据 path('',函数) ]
-