小结
软件开发架构
c/s 架构 客户端 服务端
b/s 架构 浏览器 服务端
HTTP协议:超文本传输协议
-
四大特性
- 基于TCP/IP之上作用于应用层
- 基于请求响应
- 无状态(不保存状态,每次请求都认为是陌生的请求)
- 无连接 (一旦数据交互完成就断开连接) 对比:长连接(websocket(HTTP协议大补丁)
-
数据格式
-
请求格式:
请求首行(请求方式,协议版本......)
请求头(一大堆k:v键值对)
\r\n
请求体(真正的数据 ,发post请求的时候才有,如果是get请求不会有) -
响应格式
- 响应首行
- 响应头
- \r\n
- 响应体
-
响应状态码
用特定的数字表示一些意思
1XX:服务端已经成功接收到了你的数据,正在处理,你可以继续提交其它数据
2XX:服务端成功响应(200 OK,请求成功)3XX:重定向(请求当前页面功能时,服务端跳转到另一页面某功能)
4XX:请求错误(404,请求资源不存在, 还有403 拒绝访问)
5XX:服务器内部错误(500...)
-
请求方式
get请求:朝别人要数据
post请求:向别人提交数据(eg:用户登录)
url(统一资源定位符)
- 纯手撸web框架
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
while True:
conn, addr = server.accept()
data = conn.recv(1024)
#print(data) # 接收到的是一堆二进制
conn.send(b'HTTP/1.1 200 OK \r\n\r\n')
data = data.decode('utf-8')
current_path = data.split('\r\n')[0].split(' ')[1]
print(current_path) #/login
if current_path == '/index':
with open(r'index.html', 'rb')as f:
conn.send(f.read())
elif current_path == '/login':
conn.send(b'login')
else:
conn.send(b'404 error')
conn.close()
-
基于wsgiref模块
该模块实现了上面两个手动的过程 根据功能不同拆分成了不同的py文件
urls.py 只放路由与视图函数对应关系 (路由就是输入的后缀,如/index)
views.py 放视图函数(函数或类)
拆分完成后, 如果想要添加功能,只需要在上面两个地方动手脚就好了
3.动静态网页
静态网页:数据是写死的,万年不变
动态网页:数据是实时获取的
eg: 1.后端获取的当前时间展示到前端
2.后端获取数据库中的数据展示到前端
疑问:如何将后端获取的数据,传递给html页面
后端获取的数据,传递给html页面,通过:模板渲染
jinja2
pip3 install jinja2
模板语法(极其贴近python后端语法)
<p>
{{user}}
</p>
<p>
{{user.name}}
</p>
<p>
{{user['pwd']}}
</p>
<p>
{{user.get('hobby')}}
</p>
{% for user_dic in user_list %}
<tr>
<td>
{{user_dic.id}}
</td>
<td>
{{user_dic.name}}
</td>
<td>{{user_dic.pwd}}</td>
</tr>
{% endfor %}
python三大主流web框架
Django:
大而全 自带的功能特别特别多 类似于航空母舰
有时候过于笨重
Flask
小而精 自带的功能特别特别少 类似于游骑兵
第三方的模块特别特别多,如果将flask第三方模块全部加起来 完全可以超过django
比较依赖于第三方模块
Tornado
异步非阻塞
牛逼到可以开发游戏服务器
A:socket部分
B:路由与视图函数对应关系
C:模板语法
Django:
A用的别人的 wsgiref
B自己写的
C自己写的
Flask
A用的别人的 werkzeug(基于wsgiref)
B自己写的
C用的别人的 jinja2
Tornado
三者全是自己写的
注意事项
1.计算机的名称不能有中文
2.一个pycharm窗口就是一个项目
3.项目名里面尽量不要用中文
django版本问题
1.X 2.X 现在市面上用的比较多的还是1.X
推荐你使用1.11.9~1.11.13
django安装
pip3 install django==1.11.11
如何验证django是否安装成功
命令行直接敲django-admin
一个django项目就类似于是一所大学,而app就类似于大学里面的学院
django其实就是用来一个个应用的
一个app就相当于一块独立的功能
用户功能
管理功能
django支持任意多个app
如何使用
命令行使用
创建django项目
django-admin startproject mysite
启动django项目
python manage.py runserver
创建应用app
python manage.py startapp app01
注意:
1.新创建的app需要你去settings配置文件中注册
pycharm只会帮你注册第一个你在创建项目的时候写的应用
注意:
1.使用命令行创建django项目 不会自动帮你创建templates文件夹
只能自己创建
2
os.path.join(BASE_DIR, 'templates')
pycharm使用
在启动django项目的时候 你一定要确保一个端口只有一个django项目
项目名
跟项目名同名的文件夹
settings.py 暴露给用户的配置文件
urls.py 路由与视图函数对应关系
应用名
migrations文件夹 存放数据库迁移记录的
admin.py django后台管理
apps.py 注册相关
models.py 模型类
tests.py 测试文件
views.py 存放视图函数
templates文件夹 存放html文件
manage.py django入口文件