2024--Django平台开发-Web框架和Django基础(二)

news2025/1/11 16:54:38

day02 Web框架和Django基础

今日概要:

  • 网络底层引入,到底什么是web框架?
  • 常见web框架对比
  • django快速上手(创建网站)
  • 常见操作:虚拟环境、django项目、多app应用、纯净版
  • 逐点剖析:路由、视图、模板、静态文件、ORM

1.web框架底层

1.1 网络通信

在这里插入图片描述

注意:局域网。

在这里插入图片描述

个人一般写程序,想要让别人访问:阿里云、腾讯云。

  • 去云平台租服务器(含公网IP)
  • 程序放在云服务器

在这里插入图片描述

让网络中可以互相通信的双发收发数据。

  • 我的电脑【服务端】

    import socket
    
    # 1.监听本机的IP和端口
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('192.168.10.3', 8001))  # 我自己的电脑IP,端口8001
    
    # 2.让多少人等待
    sock.listen(5)
    
    while True:
        # 3.等待连接请求的申请,有人来连接(阻塞)
        conn, addr = sock.accept()
    
        # 4.连接成功后立即发送
        conn.sendall("欢迎使用xx系统".encode("utf-8"))
    
        # 5.断开连接
        conn.close()
    
    
    # 6.停止服务端程序
    sock.close()
    
  • 女朋友的电脑(同一个局域网)【客户端】

    import socket
    
    # 1. 向指定IP发送连接请求
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.10.3', 8001))
    
    # 2. 接收你发的消息
    message = client.recv(1024)
    print(message.decode("utf-8"))
    
    # 3.断开连接
    client.close()
    
  • 姓王的好兄弟【客户端】

    import socket
    
    # 1. 向指定IP发送连接请求
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('192.168.10.3', 8001))
    
    # 2. 接收你发的消息
    message = client.recv(1024)
    print(message.decode("utf-8"))
    
    # 3.断开连接
    client.close()
    

    我们自己写时,通过socket模块可以实现网络上的两端进行通信。

1.2 常见软件架构

  • bs架构

    浏览器:充当客户端
    服务器:网站
    
  • cs架构,开发应用程序,例如:QQ、Pycharm、网易云音乐(安装在电脑上的软件)

    客户端:安装在电脑上的软件。 网易云音乐
    服务端:网易服务器
    

对于程序原来说:

  • 网站,只需要写服务端程序。

    基于django开发的本质就是网站(web应用)
    电脑上浏览器本质上是socket实现网络通信。
    
  • 软件,客户端 + 服务端。

1.3 手撸web框架

快速自己写以为网站(不能用django、flask等)。

import socket

# 1.监听本机的IP和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('192.168.0.6', 9000))  # 我自己的电脑IP,端口8001

# 2.让多少人等待
sock.listen(5)

while True:
    # 3.等待连接请求的申请,有人来连接(阻塞) -> 登录浏览器来连接我
    conn, addr = sock.accept()

    # 4.收到浏览器发送的消息
    buf = conn.recv(2048)
    print(buf)

    # 5.给浏览器返回数据
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    conn.send(b"Hello, World")

    # 6.断开连接
    conn.close()

# 6.停止服务端程序
sock.close()

再引出一个知识点,浏览器再与服务端的网站进行通信时,多了几个规则。

  • 服务端:网站

  • 客户端:浏览器

    • 创建连接

    • 发送数据,固定格式

      # 请求头首行
      GET /xxx/xxx/?name=xxx&age=111 HTTP/1.1\r\n
      
      # 请求头
      Host: 192.168.0.6:9000\r\n
      Connection: keep-alive\r\n
      Upgrade-Insecure-Requests: 1\r\n
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36\r\n
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
      Accept-Encoding: gzip, deflate\r\n
      Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7\r\n\r\n'
      
      # 请求头首行
      POST /xxx/xxx/ HTTP/1.1\r\n
      
      # 请求头
      Host: 192.168.0.6:9000\r\n
      Connection: keep-alive\r\n
      Upgrade-Insecure-Requests: 1\r\n
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36\r\n
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
      Accept-Encoding: gzip, deflate\r\n
      Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7\r\n\r\n
      # 请求体
      username=wupeiqi&password=123
      
      浏览器本质上发送请求时,包含请求头和请求体。
      - GET请求
      	- 只有请求头 + 没有请求体
      	- 请求头之间用 \r\n
      	- 请求头和请求体之间用 \r\n\r\n
      	
      - POST请求
      	- 只有请求头 + 有请求体
      	- 请求头之间用 \r\n
      	- 请求头和请求体之间用 \r\n\r\n
      
    • 一次请求和一次响应后,断开连接。

告诉你两个关键点:

  • http协议?

    http协议特点:无状态的短连接。
    http的应用:浏览器向服务端发送请求,就是按照http协议来的。
    	- 请求头+请求体 ;请求头和请求体之间用 \r\n\r\n ;请求头之间用 \r\n
    	- 一次请求和一次响应后,断开连接。  -> 短连接。  ->无状态如何体现?
    	- 后期记住 请求头+cookie
    
  • GET请求和POST到底有什么区别?

2.web框架

常见的web框架:django、flask、tornado、sanic、fastapi…

在这里插入图片描述

web应用程序:

  • 用户网络通信的socket
  • web框架
  • 业务开发

以django为例:

  • wsgiref模块、uwsgi、daphne -> 本质上都是socket实现。
  • 原来实现了框架

以flask为例:

  • werkzurg、uwsgi、…
  • flask框架

以tornado为例:

  • tornado、werkzurg、uwsgi、…
  • 框架

2.1 wsgiref

from wsgiref.simple_server import make_server


def run_server(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]


if __name__ == '__main__':
    httpd = make_server('127.0.0.1', 8000, run_server)
    httpd.serve_forever()

2.2 werkzeug

pip install werkzeug
from werkzeug.wrappers import Response


def application(environ, start_response):
    response = Response('Hello World!', mimetype='text/plain')
    return response(environ, start_response)


if __name__ == '__main__':
    from werkzeug.serving import run_simple

    run_simple('localhost', 4000, application)

在这里插入图片描述

2.3 各框架的区别

django、flask、tornado、sanic、fastapi..
  • 内部集成功能的多少

    • django,内部提供了很多组件。 【相对大】
    • flask、tornado、sanic、fastapi… 本身自己功能很少+第三方组件。【相对小】
  • 同步框架 vs 异步非阻塞

    • 异步非阻塞:tornado、sanic、fastapi、django

    • 同步:django、flask、bottle、webpy…

      1.django、flask
      2.tornado,异步非阻塞,特别NB。
      	- 同步:常见应用。
      	- 异步:IO应用 + conroutine装饰器 + redis/MySQL/...
      3.sanic,路飞小猿圈平台
      4.fastapi
      	- 参考flask
      	- py最新注解
      	- restfulAPI
      	- 异步
      	
      目前不看好:
      	- 增加编程的难度,功能&效率
      	- 项目中不会有那么IO操作 ---> 100功能/2-IO ---> celery
      

感受不深刻,只是听我讲完了,鬼吹这么NB东西到底是怎么实现的?

  • socket & 多线程 & 多进程
  • IO多路复用
  • 顿悟
https://www.cnblogs.com/wupeiqi/p/6536518.html

在这里插入图片描述
在这里插入图片描述

小结

  1. django项目开发,在局域网部署访问。所有人访问云服务器。
  2. bs架构、cs架构。
  3. 基于socket实现web框架(所有web框架的祖宗)
  4. 常见web框架的区别。
    • 功能
    • 异步非阻塞

问题?

1.短链接和长连接有啥区别?
2.websocket 协议 :程序控制连接(腾讯文档,实时更新,多人共享)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1361862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot基于Redis(7.2)分片集群实现读写分离

文章目录 一、前置提要二、集群搭建三、SpringBoot访问分片集群 一、前置提要 SpringBoot访问Redis分片集群和Redis哨兵模式&#xff0c;使用上没有什么区别。唯一的区别在于application.yml配置上不一样。 二、集群搭建 首先&#xff0c;无论如何&#xff0c;得先有一个Red…

零配置,零麻烦:MapStruct 的轻松对象映射之旅

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 零配置&#xff0c;零麻烦&#xff1a;MapStruct 的轻松对象映射之旅 前言MapStruct是什么快速上手&#xff1a;基础映射高级映射技巧1. 针对复杂类型的映射&#xff1a;2. 自定义映射逻辑&#xff1a…

【Sublime Text】| 01——下载安装注册

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 下载2. 安装3. 注册3.1 通过修改应用程序注册3.2 通过替换应用程序注册 感谢 前言 轻量代码编辑器有很多 之…

并发(4)

目录 16.sychronized修饰方法在抛出异常时&#xff0c;会释放锁吗&#xff1f; 17.多个线程等待同一个sychronized锁的时候&#xff0c;JVM如何选择下一个获取锁的线程&#xff1f; 18.sychronized是公平锁吗&#xff1f; 19.volatile关键字的作用是什么&#xff1f; 20.vo…

一文读懂 $mash 通证 “Fair Launch” 规则(幸运池玩法解读篇)

Solmash是Solana生态中由社区主导的铭文资产LaunchPad平台&#xff0c;该平台旨在为Solana原生铭文项目&#xff0c;以及通过其合作伙伴SoBit跨链桥桥接到Solana的Bitcoin生态铭文项目提供更广泛的启动机会。有了Solmash&#xff0c;将会有更多的Solana生态的铭文项目、资产通过…

2024年【危险化学品生产单位主要负责人】复审模拟考试及危险化学品生产单位主要负责人作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位主要负责人复审模拟考试为正在备考危险化学品生产单位主要负责人操作证的学员准备的理论考试专题&#xff0c;每个月更新的危险化学品生产单位主要负责人作业模拟考试祝您顺利通过危险化学品…

二、医学影像云平台(云PACS-RIS和HIS接口和检查登记)

和HIS接口 RIS和HIS或集成平台的对接&#xff0c;主要是用来获取检查信息&#xff0c;确认状态以及报告回传等工作。这里的接口文档一般都是由HIS来提供&#xff0c;文档里会给出很多概念&#xff0c;可能有病人ID号&#xff0c;身份证号&#xff0c;门诊号、住院号、体检号、…

数据矩阵集成可提高印刷电路板识别的准确性

在复杂的印刷电路板 (PCB) 世界中&#xff0c;准确的电路板元件识别对于简化故障排除至关重要。它确保电子设备高效运行。 本文将探讨数据矩阵码在提高 PCB 零件识别效率方面的作用。数据矩阵码提供了一种简单的解决方案来编码和解码与 PCB 组件相关的信息&#xff0c;在简化识…

添加jdk 11到环境变量的一种方法

添加jdk 11到环境变量的一种方法 1.jdk11可以直接在android studio 中下载&#xff0c; File --> Settings --> Build, Execution, Deployment --> Build Tools --> Gradle 下载jdk 11 &#xff0c;确认好下载路径 2.jdk11 添加到环境变量添加到环境变量 多个…

AI小蜜批量写作助手:多级指令,插件,GPTs满足不同写作需求

为什么会开发这个脚本&#xff1f; 爆文项目的核心是矩阵怼量 具体怎么做这里介绍很清楚了&#xff1a; AI爆文撸流量主保姆级教程3.0脚本写作教程&#xff08;解放双手&#xff09; 我在刚做爆文项目时候&#xff0c;都是手动操作&#xff0c;复制指令&#xff0c;组合指令…

设计模式之过滤器模式

目录 1.简介 2.过滤器的实现 2.1.过滤器的角色 2.2.类图 2.3.具体实现 3.过滤器模式的优点 4.过滤器模式的不足 5.适用的场景 1.简介 过滤器模式&#xff08;Filter Pattern&#xff09;或标准模式&#xff08;Criteria Pattern&#xff09;是一种结构型设计模式&…

静态代理还是动态代理?来聊聊Java中的代理设计模式

代理模式&#xff08;Proxy Design Pattern&#xff09;是一种结构型设计模式&#xff0c;为一个对象提供一个代理对象&#xff0c;然后使用代理对象控制对原对象的引用。即通过代理对象访问目标对象。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。 一、…

JavaWeb——新闻管理系统(Jsp+Servlet)之jsp新闻查询

java-ee项目结构设计 1.dao:对数据库的访问&#xff0c;实现了增删改查 2.entity:定义了新闻、评论、用户三个实体&#xff0c;并设置对应实体的属性 3.filter&#xff1a;过滤器&#xff0c;设置字符编码都为utf8&#xff0c;防止乱码出现 4.service:业务逻辑处理 5.servlet:处…

Spring AI和Ollama

概述 Spring AI 不仅提供了与 OpenAI 进行API交互&#xff0c;同样支持与 Ollama 进行API交互。Ollama 是一个发布在GitHub上的项目&#xff0c;专为运行、创建和分享大型语言模型而设计&#xff0c;可以轻松地在本地启动和运行大型语言模型。 Docker环境安装Ollama 1.获取D…

第13课 利用openCV检测物体是否运动了

FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程&#xff0c;这一章我们重点来看看openCV。 在前面&#xff0c;我们已经使用openCV打开过摄像头并在MFC中显示图像&#xff0c;但openCV能做的要远超你的想像&#xff0c;比如可以用它来实现人脸检测、车牌识…

个人笔记:分布式大数据技术原理(一)Hadoop 框架

Apache Hadoop 软件库是一个框架&#xff0c;它允许使用简单的编程模型&#xff0c;实现跨计算机集群的大型数据集的分布式处理。它最初的设计目的是为了检测和处理应用程序层的故障&#xff0c;从单个机器扩展到数千台机器&#xff08;这些机器可以是廉价的&#xff09;&#…

算法通关村第二十关-黄金挑战图的常见算法

大家好我是苏麟 , 今天聊聊图的常见算法 . 图里的算法是很多的&#xff0c;这里我们介绍一些常见的图算法。这些算法一般都比较复杂&#xff0c;我们这里介绍这些算法的基本含义&#xff0c;适合面试的时候装*&#xff0c;如果手写&#xff0c;那就不用啦。 图分析算法&#xf…

Qt/QML编程学习之心得:Timer的使用(22)

Qt中timer计时器如何使用? Timer的创建: void InitTimer(){myTimer = new QTimer(q);myTimer->setInterval(100); // 100msmyTimer->setSingleShot(true); //只运行一次的计时器QObject::connect(myTimer,SIGNAL(timeout()),q,SLOT(onTimeOut()));myTimer->start(…

(2023|NIPS,邻域分布预测,Wasserstein 距离)通过上下文预测改进基于扩散的图像合成

Improving Diffusion-Based Image Synthesis with Context Prediction 公和众和号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 3. 基础 4. ConPreDiff 4.1 扩散生成中的邻域上下…

Linux入门攻坚——11、Linux网络属性配置相关知识1

网络基础知识&#xff1a; 局域网&#xff1a;以太网&#xff0c;令牌环网&#xff0c; Ethernet&#xff1a;CSMA/CD 冲突域 广播域 MAC&#xff1a;Media Access Control&#xff0c;共48bit&#xff0c;前24bit需要机构分配&#xff0c;后24bit自己…