Django框架

学习目的:

完成web应用的编写

django的作用:

0.业务逻辑分发(路由分发)

1.业务逻辑实现:

业务逻辑根据分发来完成具体的事,再根据具体事的需求,和页面或数据库交互,返回处理后的结果

2.页面模板的渲染

3.数据库的交互

b/s架构

brower浏览器:不用自己写

server服务端:需要使用支持wsgi的server,也不用自己写

Python的web框架

a.socket b.页面路由 c.模块渲染

1.Django a 用的wsgiref b 自己写 c自己写,

优点:功能全面

2.Flask a用的第三方,b自己写的,c自己写的,

优点:小而轻

3.Tornado a 自己写 b 自己写 c自己写

优点:支持高并发

http协议

hyperText Transport Protocol超文本传输协议
1.基于TCP/IP协议基础上的应用层协议,底层实现仍为socket
2.基于请求-响应模式:通信一定是从客户端开始,服务端接收到客户端一定会做出对应响应
3.无状态:协议不对任何一次通信状态和任何数据做保存
4.无连接:一次连接只完成一次请求-响应,请求-响应完毕后会立即断开连接

http工作原理(事务)

一次http操作称之为一个事务,工作过程可分为四步:
1.客户端与服务端建立连接
2.客户端发生一个http协议指定格式的请求
3.服务器端接收到请求后,响应一个http协议指定格式的响应
4.客户端将服务器的响应显示展现给用户

http指定格式的请求和响应

请求:
1.请求行
请求行以一个方法符号开头,以空格分开,后面跟着请求的URL和协议的版本。
POST (请求方式)/login(请求路径)/ HTTP/1.1(请求协议)\r\n
2.请求头
请求头包括本机信息、浏览器信息等等,当然,也包括URL中?后面的参数
3.请求体
需要发送的数据
GET:请求体放在请求路径后拼接
POST:以数据包方式单独发送 request.method
响应
1.响应行
2.响应头
3.响应体
响应行是必须的,其他可选
HTTP/1.1 200 OK\r\n
\r\n
LOGIN success
响应行,响应头,响应体之间以\r\n分隔
响应头各行之间也需要以\r\n区分结束 使用TCP/IP协议的套接字给网页响应时
需要遵循http协议
正确的响应
响应头决定响应体返回什么样的方式数据
browser.send(b"HTTP/1.1 200 OK\r\n")#响应行必须有
browser.send(b'Content-type:text/html\r\n')#响应头,服务于响应体(了解)
browser.send(b"\r\n")#响应行,响应头,响应体之间需要\r\n
browser.send(b'hello world')
browser.close()#无连接,1次请求-响应后断开连接]

wsgi的server

from wsgiref import simple_server

#请求的数据被解析在env字典中
#res规定http的响应结果
#返回的是装有二进制数据的列表
#请求路径:env["PATH_INFO"]
#请求方法:env["REQUEST_METHOD"]
#res("200 OK",[("Content-type,'text/html'")])
def app(env,res):
res("200 OK",[("Content-type","text/html")])
return [] server = simple_server.make_server('127.0.0.1',8803,app)
#服务常启
server.serve_forever()

数据的获取

1.get请求
数据在env的query_string字段中
res = env(QUERY_STRING)#是二进制数据...
2.post请求
数据长度content_length
数据存放的io流 wsgi.input
lenth = int(env["CONTENT_LENGTH"])
res = env["wsgi.input"].read(lenth)

使用jinja2渲染动态网页

1.from jinja2 import Template
2.读取文件
with open("login.html","rt")as f:
msg = f.read()
3.渲染数据得到模板tem
tem = Template(msg)
4.模块替换数据
msg = tem.render(result=res)
return msg.encode("utf-8")
result 在 html 中的表示{{result}}
使用模块的好处:(可以传字典)
tem.render(result = res,my_dic = dic) html
{{my_dic}}
{% for k in my_dic %}
<div>{{k}}:{{my_dic[k]}}
</div>
{% endfor %}

最新文章

  1. [Scala] 快学Scala A2L2
  2. 龙哥库塔法or欧拉法求解微分方程matlab实现
  3. (转) WTF is computer vision?
  4. window.location.href = window.location.href 跳转无反应 a 超链接 onclick 点击跳转无反应
  5. CF 9D. How many trees?(dp)
  6. phpize 动态添加 PHP 扩展的错误及解决方案
  7. LB负载均衡集群及NAT模式配置
  8. ORACLE表坏块处理
  9. poj3259(spfa判负环)
  10. 笔记本shift变粘贴,粘滞键设置已关闭
  11. Luogu P1381油滴扩展
  12. 【Teradata】扩容操作步骤
  13. 《HTTP - 跨域》
  14. learning makefile foreach
  15. Socket与TCP,UDP
  16. uvm设计分析——callback
  17. linux 常见基础知识(此文章将会在整个linux学习过程中,不断添加)
  18. 什么是NAT端口映射?
  19. C#项目中引入app.manifest管理员权限运行
  20. 在notepad++中运行python代码

热门文章

  1. python连接redis数据库的两种方式
  2. Zynq7000开发系列-5(OpenCV开发环境搭建:Ubuntu、Zynq)
  3. 工作的时候 用到了 获取时间 DateTime 整理了一下
  4. 用ssh-key-gen 在本地主机上创建公钥和密钥
  5. GIT GUI克隆github代码
  6. LINQ to Entities不支持Convert.ToDateTime方法解決一例
  7. GIT本地pull远程失败,本地tag与远程仓库不匹配问题
  8. bootstrap 滚动监听 标签页 和 工具提示
  9. 《Head First HTML与CSS》项目实践中学到的东西
  10. idea npm 调试报错解决办法