Web框架的本质
我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。
半成品自定义web框架
import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b"OK") conn.close()
可以说Web服务本质上都是在这十几行代码基础上扩展出来的。这段代码就是它们的祖宗。
用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,这互联网还能玩么?
所以,必须有一个统一的规则,让大家发送消息、接收消息的时候有个格式依据,不能随便写。
这个规则就是HTTP协议,以后浏览器发送请求信息也好,服务器回复响应信息也罢,都要按照这个规则来。
HTTP协议
超文本传输协议:规定了客户端与服务端消息传输的格式
四大特性;
1.基于TCP/IP协议作用于应用层的协议
2.基于响应请求
3.无状态
4.无连接
数据格式之请求:
请求首行
请求头(一堆k,v键值对)
请求体
请求首行
b'GET / HTTP/1.1
请求头(一大堆kv键值对)
Host: 127.0.0.1:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
UserAgent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signedexchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
请求体
'
数据格式之响应:
响应首行
响应头(一堆k,v键值对)
响应体(post 请求携带的数据)
响应状态码
1xx 服务器已经成功接受到你的数据正在处理,你可以继续提交其他数据
2xx 请求成功,服务器已经将你请求的数据发送给你了
3xx 重定向
4xx 请求资源不存在
5xx 服务器错误
模版渲染
后端生成的数据直接传递给前端页面使用(并且前端页面可以灵活的操作该数据)>>>>模版语法
模版语法需要依赖于第三方模块
pip3 install jinja2
模版语法 jinja2支持前端直接使用类似于python的语法操作数据
<p>{{ user_dic }}</p> <p>{{ user_dic.name }}</p> <p>{{ user_dic['password'] }}</p> <p>{{ user_dic.get('name') }}</p>
{% for user in user_dict %} <tr> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.password }}</td> </tr> {% endfor %}
Django:大而全,自带了很多功能模块,类似于航空母舰 (缺点:有点笨重)
Flask:短小精悍,自带的功能模块特别少,大部分都是依赖于第三方模块(小而轻)
Tornado:异步非阻塞 主要用在处理高io 多路复用的情况 可以写游戏后端
a:socket
b:路由与视图函数
c:模板渲染
Django:
Flask:
Tornado:
a,b,c都是自己写的
Django简介
版本问题
djang下载
推荐下载1.11.11版本
命令行直接下载
pip3 install django==1.11.11
pycharm下载
验证是否下载成功
django-admin
app(应用)的概念
一个django项目就是一所大学
app就是大学里面的学院
注意新创建的app需要在配置文件中注册才能生效(*******)
INSTALLED_APPS = [
在后面加上自己的app
'app01.apps.App01Config' # 可以用全称
django各个文件的作用
应用名
migrations 数据库迁移记录相关数据
admin.py django后台管理相关
models.py 模型表相关
views.py 视图函数相关
项目名
settings.py 配置文件
urls.py 路由与视图函数的映射关系
templates:项目用到的所有的html文件
manage.py;django入口文件
HttpResponse 返回字符串
render 返回一个html页面
两种给前端页面传值的方式
def reg(request):
user_dict = {'name':'jason','password':'123'}
return render(request,'reg.html',{'user_dict':user_dict})
def reg(request):
user_dict = {'name':'jason','password':'123'}
return render(request,'reg.html',locals())
redirect 重定向
django识别到你的代码变化之后会自动,但是有时候反应速度比较慢你可以手动重启,你也可以多刷新几次浏览器