01web框架的本质

学习内容

这个阶段的学习内容
	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()
posted @ 2023-04-19 10:30  LePenseur  阅读(12)  评论(0编辑  收藏  举报