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的反向功能

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

image-20240617193006420

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('',函数)
      ]
      
posted on 2024-06-26 21:08  晓雾-Mist  阅读(27)  评论(0)    收藏  举报