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. ...
随机推荐
- [題解](最小生成樹/LCA)luogu_P1967貨車運輸
一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑 ...
- Ubuntu安装指定版本的docker
系统环境: Ubuntu 16.0.4 安装版本: docker 17.03.2 在进现在这家公司初期,需要使用rancher部署一个k8s集群,由于rancher也是由docker启动的,加上k8 ...
- Java微信公众平台开发(七)--多媒体消息回复之图片回复
之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消息的回复方法,[多媒体消息]包含回复图片消息/回复语音消息/回复视频消息/回复音乐消 ...
- Masonry UIScrollView autolayout 的一个奇特的问题
事情是这样的.... 我一个工程里 一直使用的 masonry 做autolayout,有个gesturerReconizer的bug,找了很久,发现很奇怪一个现象: 我的某个view 是这样的 |- ...
- [转]Ioc容器Autofac
本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥 前言 第一次接触A ...
- IDEA JavaSE环境配置
需指定JDK路径: File -> Project Structure -> Project -> Project SDK -> New -> 选择JDK所在的根目录
- 集合框架比较两个对象是否相同(equals和hashCode方法)
package com.dcz.hashset; import java.util.HashSet; import java.util.Set; /** * HashSet是接口最常用的实现类,顾名思 ...
- 用户会话跟踪机制(session+cookie)
最近在优化之前给学校写的一个项目,发现了同一个浏览器(IE,Firefox)开多个选项卡的时候不能登录多个用户,后一个登录用户会把前一个用户给覆盖了,我的登录逻辑是把user对象存放到session中 ...
- Windows服务的新建,安装,卸载,调试以及调用!
一.前言: 写这篇博文之前,我正顶着压力在尝试着调试我一无所知的Windows自建服务.历经千辛万苦,找了无数零散文档拼凑关于VisualStudio2015中怎样创建和调试服务程序!最后终于调试成功 ...
- imageview加载本地和网络图片
ImageView是Android程序中经常用到的组件,它将一个图片显示到屏幕上. 在UI xml定义一个ImageView如下: public void onCreate(Bundle savedI ...