学习内容
这个阶段的学习内容
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的文件的路径
环境变量
解决下面的错误:
'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
结果发现下面这个错误
为什么会出现这个错误?
因为没有遵守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