Django中请求的生命周期 和 FBV模式和CBV模式
2024-10-19 02:24:28
Django的生命周期就是你的 一个请求所发生的整个流程
Django的生命周期内到底发生了什么呢??
. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端
请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. . url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配,
一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.
. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.
. 客户端浏览器接收到返回的数据,经过渲染后显示给用户
首先: wsgi -------->中间件----------->路由系统----------->视图函数------------> 模板和orm --------------->返回给请求者
wsgi: 是web服务网关接口,一套协议
这套协议的实现是wsgi这个模块来实现 它内部封装了soccet来实现
django中实现wsgi的模块有: wsgiref 和uwsgi模块
中间件:
路由系统就是django中的url
视图函数:就是views
模板是:template中的前端界面
orm 是你的django去操作你的数据库中的内容
wsgi是一个协议 是http协议
CSRF_TOKEN
可以理解为 ,为了防止非法的登陆 预防黑客登陆 因为是先要get请求然后 给你的get发送一个随机字符串 然后你下一次的post请求的时候必须要带着这个随机字符串 不然就会不让你访问,
防止黑客什么的直接post来进入
FBV模式和CBV模式:
FBV: 一个url对应一个视图函数
CBV:一个url对应一个类
一个url对应一个视图函数,这个模式叫做FBV(Function Base Views
)
除了FBV之处,Django中还有另外一种模式叫做CBV(Class Base views
),即一个url对应一个类
我们经常写的直接定义函数的就是FBV
CBV是类的形式:但是这个类需要继承一个View 并且你的url内也的写法也不一样需要用到as_view
CBV 需要注意定义一定要继承views.View注册路由一定要写 类名.as_view()
CBV的 urls:
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'Index/',views.Index.as_view), ]
# CBV 就是先导入views然后继承它 然后 把post和get放在两个方法中
from django import views class Index(views.View): def get(self,request): # 如果是get操作的时候
return render(request,'index.html') def post(self,request):
return HttpResponse('ok')
最新文章
- PHP-----文件系统的交互
- cmd 常用指令
- Windows下好用到必须开机自启的小工具
- iso socket基础2
- Swift Internal Parameter and External Parameter 外部参数和内部参数
- SQLServer查询速度慢的原因
- JAVA与指针
- NDK 提示";undefined reference to xxx“的解决办法
- C# 之 获取服务器IP,客户端IP以及其它
- 【BZOJ 1295】 [SCOI2009]最长距离
- 使用Android SDK Manager自动下载速度慢解决方法
- java枚举的使用
- jspl零散知识点
- Animals and Puzzle
- 201521123053《Java程序设计》第1周学习总结
- ●BZOJ 2149 拆迁队
- Unity插件 - MeshEditor(六) 变形动画状态机
- .NET中如何深度判断2个对象相等
- Vue之状态管理(vuex)与接口调用
- vmware install win8 and server2012 problem
热门文章
- javascript全局方法与变量
- flot中文详解
- 用idea搭建一个简单的SSM的Demo
- Couchbase进阶-集群与版本升级
- WPF EventAggregator(基于EventAggregator的事件发布及订阅)
- OSGi是什么:Java语言的动态模块系统(一)
- HTML5学习笔记:HTML5基于本地存储SQLite的每日工作任务清单程序.[只支持chrome]
- ASP.NET Core 中的依赖注入
- linux下perforce(p4)的使用方法和命令
- SpringCloud - RestTemplate 的三种使用方式