django(django框架了解,http协议)
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 %}
django(django框架了解,http协议)的更多相关文章
- Django框架01 / http协议、web框架本质
Django框架01 / http协议.web框架本质 目录 Django框架01 / http协议.web框架本质 1.http协议 1.1 http协议简介 1.2 什么是http协议 1.3 H ...
- 记Angular与Django REST框架的一次合作(1):分离 or 不分离,it's the question
前言:本次尝试源于我们内部的一个项目,由于前端逻辑比较复杂,就打算将前后端分开来开发.由于之前用Django开发过软件,对Angular.js(Angular 1.0版)也有一定的了解,因此就将技术路 ...
- 记Angular与Django REST框架的一次合作(2):前端组件化——Angular
注:这是这个系列的第二部分,主要集中在Angular的使用方面.之前使用过AngularJS(Angular 1.x),混在Django的模板中使用,这些页面一般完全是结果展示页.在有Django表单 ...
- Django—— 缓存框架
译者注:1.无用的,吹嘘的说辞不翻译:2.意译,很多地方不准确. 动态网站最为重要的一点就是好,网页是动态的.每一次用户请求页面,网站就要进行各种计算——从数据库查询,到render模板,到各种逻辑运 ...
- django 基础框架学习 (一)
Django-01 Web框架 1.Web应⽤程序处理流程 : 2.Web框架的意义 1.⽤于搭建Web应⽤程序 2.免去不同Web应⽤相同代码部分的重复 ...
- Linux(CentOS7)系统中部署Django web框架
1. 概述 部署django和vue架在逻辑上可以分为web层与数据库层:web前端通过实现了WSGI协议的模块对python代码进行解析,而python代码中则通过特定于数据库的操作接口对数据库进行 ...
- Django _web框架本质
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. socket服务端 import ...
- 教程:Visual Studio 中的 Django Web 框架入门
教程:Visual Studio 中的 Django Web 框架入门 Django 是高级 Python 框架,用于快速.安全及可扩展的 Web 开发. 本教程将在 Visual Studio 提供 ...
- 12、Django简易框架
安装: tar -zxvf Django-1.5.1.tar.gz cd Django-1.5.1 [root@likun Django-1.5.1]# ls [root@likun Djang ...
- [oldboy-django][1初始django]web框架本质 + django框架 + ajax
web框架本质 浏览器(socket客户端) - 发送请求(ip和端口,url http://www.baidu.com:80/index/) - GET 请求头(数据请求行的url上: Http1. ...
随机推荐
- Zynq7000开发系列-2(VMware与Ubuntu安装使用)
一.前言 在嵌入式开发中,是无法避免使用Linux系统的,因为在开发之前必须先搭建起交叉编译环境,而后关于Bootloader.Linux Kernel的裁剪移植,File system的制作,底层驱 ...
- Gym - 101810H ACM International Collegiate Programming Contest (2018)
bryce1010模板 http://codeforces.com/gym/101810 #include <bits/stdc++.h> using namespace std; #de ...
- 转 PHP函数---$_Get()和$_Post()的用法
一.$_Get()和$_Post()函数是用来传值的,即对应两种提交表单的方法,get和post. 二.$_Get方法 (1)获取通过URL的传值 Example 1 新建两个PHP文件,1.php, ...
- Redis特点
内存存储,速度极快. 支持的数据类型多,相比较其他的Nosql. 键:字符串 值的六种数据结构:字符串,列表,散列,集合,有序集合,HyperLogLog 附加功能强大
- 如何让局域网其他计算机访问您的Mysql???
一.配置Mysql:(修改mysql数据库中user表) mysql -u root -p // root用户登录mysql>use mysql; // 选择mysql数据库 mysql> ...
- AS学习系列[1]——初识Android Studio
写在前面的话:由于于方老师的高墙所限,网络成了学习Android第一道“拦路虎”.所以,个人以为,在学习Android之前需要了解下FQ技术(仅仅是为了技术学习). 1.AS AS(Android s ...
- socket使用非阻塞connect
在使用tcp的connect调用时,默认是使用阻塞方式,当服务器当前不可用时,connect会等待(内部在重试?)直到超时时间到达,而这个超时时间是系统内核规定的,不能使用setSocketOpt来设 ...
- Azure资源管理工具Azure PowerShell介绍
什么是 Azure PowerShell? Azure PowerShell 是一组模块,提供用于通过 Windows PowerShell 管理 Azure 的 cmdlet.你可以使用 cmdle ...
- maven打包错误:java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.118 sec <<< FAILURE! - in ...
- OpenGL列主元矩阵和列主序存储
OpenGL矩阵要考虑两个点,一个是向量如何排布,一个是矩阵如何存储和恢复. 1.排布 排布决定了运算的顺序.OpenGL使用的是列主元,它的意思就是一个4X4的矩阵是由4个列向量构成(这里的v1,v ...