http协议:
特点:
无连接: 1.0版本断开立马关闭 1.1版本默认停止一段时间再断开连接
无状态: 解决方法, cookie session相当于这个网站给你一个身份证号然后浏览器就会看到这个号码对应的信息
http协议格式:
请求协议(request)
请求首行:方法 url 协议版本 GET url http 1.1
请求头:请求信息
空行
请求数据
http中最常用的就是get和post请求
get 和post
get请求会把数据放到url后面,用?和路径部分分开,没有请求体,请求体相当于空的
因为get请求是 把数据放在地址栏里面。所以他是有限的,再者数据信息暴露在地址栏中它的安全性比较低
get请求有三种:
url a标签 form表单
post请求会把数据放到请求体中
Content--type:文件类型
也是请求头里面的内容, 显示http请求提交的内容类型,也就是浏览器告诉服务器这次发送的请求数据是以什么格式发送的
content-type对应两个值
1.application/--www-from-urlencoded,意思就是把数据打包成a=1and b=2 and c=3的格式
form表单点击提交,如果method="get"
2.multipart/from-data
content-type的另外一种数据格式,可以上传二进制数据,也就是文件的那种形式,
也就是enctype="multipart/from-data
enctype c=content-type,就是在设置content-type,默认的是application/--www-from-urlencoded
响应协议(response)
响应协议是服务器给浏览器发送的内容
响应首行 http 1.1 状态码(200) 状态码的解析(OK)
响应头
空行
响应内容:真正的响应内容是这个页面
设置响应头信息直接可以start_response()里面放要响应的信息
return是application这个函数提供的语法,application是make_server模块来调用的
响应状态码
状态码有三位数字组成,第一个数字定义了响应的类别,共分为五种类别
1xx:指示信息--表示请求已接收继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误---服务器未能实现合法的请求
常见状态码:
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态码必须和www-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但拒绝提供服务
404 Not Fount 请求资源不存在 eg:输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Seerver Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
建立在TCP协议之上的
客户端(浏览器)--------------------server(服务器)
基于请求-------响应模式
wsgiref模块是解析数据的
wsgiref模块,接收过程和解析过程都是由这个模块来做的,所以wsgiref模块是一个非常重要的点
在工作中有一个软件叫做web服务器,他做得工作和wsgiref模块相似,这里用的是一个模块,但在实际开发中
用的是一个软件 。
web框架:wsgiref模块的使用
from wsgiref.simple_server import make_server
def application(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return [b'<h1>Hello lanbo</h1>']
httpd=make_server('127.0.0.1',8080,application)
print('Servering HTTP on part 8000')
httpd.serve_forever()
每一门语言都有自己的框架
python的常用框架
Django:大而全
flask: 小而精
tornado
之所以用框架他可以让我们快速的开发网站
Django框架
MTV模式
最基础的是由这三部分组成的
model(模型层):负责业务对象和数据库对象
Template(模板):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在是适当的时候调用Model和Template
django:
urls: 路径与视图函数的映射关系
views:逻辑处理(具体做什么事由它的路径决定)
models:与数据库相关的操作,
template:存的是html页面,模板语法,目的:如何把models里面取出来的变量巧妙地嵌入到html页面中去
1、下载django:
pip3 install django
2. 创建Django项目:
django-admin startproject 项目名称
manage.py:启动文件 控制项目命令
mysite:全局性的一些文件
3.创建Django应用
python manage.py startapp 应用名字(注意:切换到对应的文件夹下面再创建应用)
4.启动django项目:
python manage.py runserver ip port
创建项目流程:
需求:当用户输入一个url:127.0.0.1:8080/timer返回给用户一个时间页面
1.urls:
给/timer路径分发一个视图函数/timer,让视图函数来处理这个路径
2.views
逻辑处理
涉及到数据读取以及模板渲染问题
return HttpResponse实例对象
$:在正则中是终止的意思
URLconf的正则字符串参数
url配置(urls.py)
功能:建立起url与视图函数的映射关系
单配置
覆盖:出现覆盖情况,匹配第一个url
有名分组:有名分组 url(r'^articles/(?P<year>d{4})/(?P<month>d{2})$', views.year_month), # year(requset,year=1990,month=12) 按位置传参数
无名分组:url(r'^articles/(d{4})/(d{2})$', views.year_month), # year(requset,1990,12) 按位置传参数
分发:url(r'^blog/', include('blog.urls'))
视图函数:
一点包含两个对象:
request--------->请求信息
Httprequest------------》响应字符串
get请求发送数据:http://127.0.0.1:8000/login.html?user=asd&pwd=asd
request里面包含的数据:
request.GET: GET请求的数据 {}
request.POST POST请求的数据 {}
request.method: 请求方式:GET或POST
请求某个键下多个值时:request.POST.getlist("hobby")
request.path:请求路径
如果请求是:url:http://127.0.0.1:8000/index.html/23?a=1
那么请求路径就是:request.path:index.html
request.get_full_path()
请求url:http://127.0.0.1:8000/index.html/23?a=1
request.get_full_path(): /index.html/23?a=1
键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用
request.POST.getlist("hobby")
render与redirect
举例实现:
当用redirect,注意看路径
当用render的时候,我们再走一遍
总结对比
render:只是返回页面内容,但是未发送第二次请求
redirect:发送第二次请,url更新
我们一起简单回顾一下以上都有什么知识点:
一、创建:
1.在讲Django之前的都是我们的原理
2.首先创建project:django-admin satrtproject 项目名
3.再创建一个应用: python manage.py startapp 应用名
4.启动Django项目: python manage.py runserver ip port(ip地址和端口号)
走到这一步就能访问了,看到的就是一个特别简单的页面,所以我们需要
给他渲染一系列的东西
二、配置
1.配置模板路径 template
2.配置静态文件
静态文件后面一定要加逗号
3.还有一个不用问为什么的配置,找到标注的这一句注释掉