首页 > 其他分享 >01web框架的本质

01web框架的本质

时间:2023-04-19 10:46:22浏览次数:37  
标签:socket 框架 url 代码 01web 本质 server data conn

学习内容

这个阶段的学习内容
	1. Django基础
	2. Redis基础
	3. Django实战项目
	4. linux基础

django这个阶段,知识点很多,很碎,要记忆的很多
所需知识点:
	 Python的基础语法
		函数   模块与包   面向对象     安装MySQL  创建数据库 前端  

回顾知识

  • python,pycharm的含义是什么?这两者的关系是什么?
    python是个解释器,将符合python这门语言的语法代码解释给电脑听,并且让电脑执行
    pycharm说白了就是一个牛逼的记事本,记事本不太好的地方,没有代码的提示,没有这些牛逼的功能的
    pycharm配置好了python的解释器以后,就拥有这些代码提示,鼠标点一下就可以直接运行python代码

  • 我们的代码有没有问题,取决于运行的结果的,不能依赖pycharm(只是一个好用的工具罢了),代码出现了红色波浪线并一定会报错

  • 运行python代码的方式:

    • 临时的
      进入Python解释器内执行代码,解释器一旦关闭,代码就失效了
      作用:一般只有临时的调试一些简单的代码

    • 永久的
      好处:代码永远都在,代码保存在一份文件中,可以持久化保存
      文件的后缀名字可以是任意的(.txt,.dwda,.gfdg),但一般使用.py

  • 运行python文件本质

    python解释器的路径 Python的文件的路径

    image-20230323021810251

    image-20230323021951345

环境变量

解决下面的错误:
'xxx' 不是内部或外部命令,也不是可运行的程序或批处理文件
解决方式:去配置环境变量

同学提问:普通记事本代码有Python环境就可以运行的吗?
运行Python的代码 ,只需要Python解释器

web框架

三大类

基础的 没他不行 Python基础 前端 HTML css js

进阶型 没他了也能玩的转,但是很多问题会出现 MySQL

精华型 没他也可以,但是有他,就可以简化我们很多的事情 框架 jquery bootstarp 内部的一些代码

通过一个需求,我们自己做一个web框架

需求:做一个网站出来

网络编程(基于网络传输信息) -- socket

bs架构的本质是cs架构

hhtp,https(加密,更安全)通信协议 根据规则来进行通信

# 写代码  用socket 实现网络传递信息
import socket
#  1. 买手机
server = socket.socket()
# 2.    绑定手机卡
# IP    利用IP   可以找到世界上任意一台电脑  IP   
# PORT  利用port 可以找到一台电脑上任意一个程序   
# IP+PORT      可以找到世界上任意一台电脑上的一个程序
server.bind(('127.0.0.1',8000))
# 3. 开机
server.listen()
while True:
    # 4. 等电话的链接
    conn,addr = server.accept()
    # 5. 收发消息
    data = conn.recv(1024)
    print(data)
    conn.send(b'hello')
    # 6.挂电话
    conn.close()
# 7.关机
server.close()

运行这份代码,在浏览器的导航栏中输入:127.0.0.1:8000结果发现下面这个错误

image-20230323024431849

为什么会出现这个错误?

因为没有遵守http协议

用户的浏览器已输入网址,会给服务端发送数据,发什么数据,收什么数据,怎么发?怎么收?

必须要有规定,不然就乱了,无规则不成方圆,那么这些规则,我们叫做http协议

修改代码,增加一行,来遵守HTTP协议

import socket

# 1.买手机
server = socket.socket()
# 2.绑定手机号
"""
IP    利用IP   可以找到世界上任意一台电脑  IP   
PORT  利用port 可以找到一台电脑上任意一个程序   
IP+PORT      可以找到世界上任意一台电脑上的一个程序
"""
server.bind(('127.0.0.1', 8000))
# 3.开机
server.listen()
while True:
    # 4. 等电话的链接
    conn, addr = server.accept()
    # 5. 收发消息
    data = conn.recv(1024)
    print(data)
    """新增这一行代码  遵守HTTP协议"""
    conn.send(b'HTTP1.1 200 OK\r\n\r\n')
    conn.send(b'<strong>good</strong>')
    # 6.挂电话
    conn.close()
# 7.关机
server.close()

利用十几行代码,实现了最基本的需求,在浏览器中输入一个网址,就可以看到内容

根据URL的不同,返回的内容也是不一样

怎么取实现这个需求 如何获取到url

import socket

# 1.买手机
server = socket.socket()
# 2.绑定手机号
server.bind(('127.0.0.1', 8000))
# 3.开机
server.listen()
while True:
    # 4. 等电话的链接
    conn, addr = server.accept()
    # 5. 收发消息
    data = conn.recv(1024)
    # decode将二进制数据转成字符串  再按照\r\n进行切割
    data = data.decode().split('\r\n')
    print(data, type(data))
    # 拿到了浏览器的url
    url = data[0].split(' ')[1]
    print(url)
    """新增这一行代码  遵守HTTP协议"""
    conn.send(b'HTTP1.1 200 OK\r\n\r\n')
    if url == '/nice':
        conn.send(b'<h1>nice</h1>')
    elif url == '/nb':
        conn.send(b'nb')
    else:
        conn.send(b'404')
    # 6.挂电话
    conn.close()
# 7.关机
server.close()

基本功能实现了,但url一多,这么写就不行了,考虑优化代码

import socket

def nb():
    return b'nb'

def nice():
    return b'<h1>nice</h1>'

def not_found():  # 形参
    return b'<h1>404</h1>'

li_content = [
    ('/nb', nb),
    ('/nice', nice)
]

# 1.买手机
server = socket.socket()
# 2.绑定手机号
server.bind(('127.0.0.1', 8000))
# 3.开机
server.listen()
while True:
    # 4. 等电话的链接
    conn, addr = server.accept()
    # 5. 收发消息
    data = conn.recv(1024)
    # decode将二进制数据转成字符串  再按照\r\n进行切割
    data = data.decode().split('\r\n')
    print(data, type(data))
    # 拿到了浏览器的url
    url = data[0].split(' ')[1]
    print(url)
    """新增这一行代码  遵守HTTP协议"""
    conn.send(b'HTTP1.1 200 OK\r\n\r\n')
    for content in li_content:
        if url == content[0]:
            conn.send(content[1]())
            break
    else:
        conn.send(not_found())
    # 6.挂电话
    conn.close()
# 7.关机
server.close()

标签:socket,框架,url,代码,01web,本质,server,data,conn
From: https://www.cnblogs.com/wsjcx/p/17332389.html

相关文章

  • Day 24 24.1 Scrapy框架之下载中间件
    Scrapy框架之下载中间件classMyDownMiddleware(object):defprocess_request(self,request,spider):"""请求需要被下载时,经过所有下载器中间件的process_request调用:paramrequest::paramspider::return:......
  • pytest + yaml 框架 -25.参数化数据支持读取外部文件txt/csv/json/yaml
    前言v1.2.2版本开始,参数化数据支持读取外部文件,文件格式可以支持:txt/csv/json/yaml参数化的实现用例参数化的实现,我设计了2种实现方式参数化方式1:config:name:post示例fixtures:username,passwordparameters:-[test1,'123456']-[t......
  • Django框架模版渲染与过滤器使用
    前端模版使用过滤器,如时间格式化等'''都是在前端页面中使用'''#default 如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。{{value|default:"nothing"}}#给value这个值设置一个默认值,如果value没有传值或者值为空的话就显示nothing#length 返回值的......
  • Shifu物联网开发框架成为MicroK8s官方认证的Kubernetes插件
    Shifu物联网开发框架已经成为Kubernetes生态下MicroK8s官方认证的插件,这将极大地简化基于K8s的物联网应用程序的开发,帮助企业高效搭建获得安全、可控的生产级物联中台。MicroK8s是一个轻量级的CNCF认证的Kubernetes发行版,适用于云、工作站、边缘和物联网设备。Shifu用作K......
  • 利用开源快速开发框架,让办公自动化更顺畅!
    在办公自动化发展的时期,引进先进的系统软件可以帮助企业实现提质增效,让办公更高效、更便捷、更灵活、数据管理更顺畅。其中,开源快速开发框架就是其中一种工具,其便利、灵活、易操作等特性在广大用户当中深受喜爱,是办公自动化“快速奔跑”起来的得力助手。一、有实力的服务商,保障更......
  • 比较几种热门Hybrid App前端框架
    作为一种既能够在原生应用程序环境中运行,也能够在Web浏览器中运行的应用程序,HybridApp 主要使用Web技术进行开发,如HTML、CSS和JavaScript,并使用一个中间层将其封装在原生应用程序中。随着技术的持续推进,HybridApp相关的前端框架也应运而生。今天就来比较几种混合应用前......
  • 开源即时通讯IM框架MobileIMSDK的微信小程序端技术概览
    一、基本介绍MobileIMSDK-微信小程序端是一套基于微信原生WebSocket的即时通讯库:1)超轻量级、无任何第3方库依赖(开箱即用);2)纯JS编写、ES6语法、高度提炼,简单易用;3)基于微信原生WebSocketAPI,简洁优雅;4)支持运行于任何支持微信小程序的手机端;5)能与 MobileIMSDK 的各......
  • 【题解】P6292 区间本质不同子串个数
    原题链接区间本质不同子串个数题目描述给定一个长度为\(n\)的字符串\(S\),\(m\)次询问由\(S\)的第\(L\)到第\(R\)个字符组成的字符串包含多少个本质不同的子串。定义两个字符串\(a,b\)相同当且仅当\(|a|=|b|\)并且对于\(i\in[1,|a|]\)都有\(a_i=b_i\)。输入......
  • Java集合框架Collection接口
    Collection接口概念Java集合框架是Java编程中的一个非常重要的部分,提供了一组用于处理数据集合的接口和类。其中Collection接口是Java集合框架的基础接口之一,定义了一些基本的集合操作,包括添加元素、删除元素、遍历集合等。在这里,我将为您详细介绍Java集合框架中的Collection接口。......
  • Abp框架Web站点的安全性提升
    本文将从GB/T28448-2019《信息安全技术网络安全等级保护测评要求》规定的安全计算环境中解读、摘要若干安全要求,结合Abp框架,对站点进行安全升级。【身份鉴别】应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。解决方案设置密码......