在将之前我们先了解下Django的生命周期
3.响应式请求
4.基于TCP/IP协议的通信
1.无连接
2.无状态
GET / HTTP/1.1 请求方法 URI协议/版本)
Host: 127.0.0.1:8080 请求头 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9
请求正文
Cookie: csrftoken=BVl9QoBxGV27jR4b5UPstnYeouwhPZV5ZoC19VIpL3Tec0pCjrJ1vY24wBqyHNJo; sessionid=llct2t0wzkll4t8yulyzuzc42epuqoms
l 协议/版本 状态码 描述
l 响应头(Response Header)
l 响应正文
前者是WSGI web服务网关协议
后者是 通用网关协议
CGI在web服务器与应用充当交互作用,这样才能处理用户表单生成并返回最终html页面
一般来说含有用户输出的 submit 图片的web 都会涉及某个CGI活动
不过现在生产环境的web页面都不再使用CGI了
原因 有明显限制性 限制服务器同时处理客户端的数量
WSGI 不是服务器 不是与程序交互的API 也不是代码 只是定义了一个接口 一种规范
用于处理日益增多的不同web框架 web服务 减少互操作性
wsgiref:django 基于WSGI协议开发的模块简单服务器
像sockerserver一样调用 内部遵守了WSGI协议的模块
前后端分离
微服务 通过ngix 把请求转接到具体服务器
前后端分离后:cookie就使用不了了
前端发送ajax请求 后端拿到数据给你一个接口状态吗101 请跳转 还是干嘛,数据有什么 这有一种规范 今天我要讲
前后端不分离
前端人员把页面的空盒子写好后给我 我把往空缺的地方通过DTL填数据
CBV请求
通过中间件请求路由会执行 as_view()的返回结果(返回结果之前做了一件事 往view名称空间添加view_class这个类,view_initkwargs=参数)
请求来了执行view 最后调用 自己dispathch方法
dispathch 判断请求的方法字符串是否在 请求方法列表里 最后返回执行的结果(get还是post)也就是自己写的
路由如果这么配置:url(r‘^test/‘, views.Test.as_view()), 请求通过中间件后进入路由--->根据路由匹配,一旦成功,会执行后面函数(request)---》本质就是执行了as_view内部的view函数----》内部又调用了self.dispatch---->根据请求方式,执行不同的方法(必然get请求,就会执行咱么写的视图类的get方法) 尝试自己封装一个APIView,重写dispatch方法,在执行父类的dispatch之前,写一些逻辑,请求来了,就会执行这些逻辑
restful无非就是把想要的数据通过逻辑判断 返回一个Json 没有什么特别的,在正式看源码之前先大致了解一下RestFult规范
1.必须是https 协议
2.有规定url xxx域名/api
-https://api.example.com
-https://example.org/api/
3.版本规范
-可以放在路径中
-可以放在请求头中
4.所有的资源都是名词
5.请求方式均在method里
6.筛选有过滤调节
7.有状态吗
8.错误信息
9.返回结果有信息
10.返回结果提供链接
1.pip3 install djangorestframework
2.注册app
INSTALLED_APPS= [
‘rest_framework‘
]
3.继承
from rest_framework import APIView
class Books(APIView): def get(self,request): return HttpResponse({"reg":"ok"})
继承了APIView 之后: -1 所有的请求都没有csrf的认证了 -2 在APIView中as_view本质还是调用了父类的as_view(View的as_view) -3 as_view中调用dispatch -----》这个dispatch是APIView的dispatch -APIVIew的dispatch方法: -1 对原生request对象做了一层包装(面向对象的封装),以后再用的request对象都新的request对象 -2 在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关 -3 根据请求方法执行咱们写的视图类中的相应方法 --视图类中方法的request对象,已经变成了封装后的request -Request类: -1 原生的request是self._request -2 取以post形式提交的数据,从request.data中取(urlencoded,formdata,json格式) -3 query_params 就是原生request的GET的数据 -4 上传的文件是从FILES中取 -5 (重点)其他的属性,直接request.属性名(因为重写了__getattr__方法)
psotman的安装和使用
模拟向接口发送请求,测试接口
api的测试工具
原文:https://www.cnblogs.com/xzqpy/p/11117048.html