zoukankan      html  css  js  c++  java
  • 由django请求生命周期延伸出的知识点大总结

    django项目搭建见:

    https://www.cnblogs.com/dongxixi/p/10981577.html

    django请求生命周期图

    由浏览器发起请求开始

    知识点1:

    浏览器与服务器软件架构:C/S架构

    HTTP协议:又称超文本传输协议,它规定了浏览器与服务端数据传输的格式

    HTTP协议四大特性:

        基于TCP/IP作用于应用层的协议

        基于请求响应

        无状态

        无连接

    知识点2:

    请求格式及响应格式:

      请求格式:

        请求首行

        请求头

        空行( )

        请求体

      响应格式:

        响应首行

        响应头

        空行

        响应体

    wsgiref请求响应处理

    知识点3:web服务网关协议

    cgi:通用网关协议

    wsgi协议:

      wsgi协议(Web Server Gateway Interface) 主要包含server和application两部分:

    • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
    • WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序(执行程序),对应用程序来说,中间件扮演服务器(WSGI服务器)。

    WSGI协议其实是定义了一种serverapplication解耦的规范,我们django自带的wsgiref是对该协议的具体实现

    此外还有很多其他实现该协议的服务器:

    uwsgi:支持较高并发,django项目上线一般会选择用它替换django自带的wsgiref    == JAVA中的tomcat

    wsgiref:支持并发不高,django自带

    请求解析完成后依次通过Django中间件

    知识点4:django中间件

    django自带七大中间件:可以简单理解为django的门户,安全认证及全局处理都在这里面

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]

    除了django自带的中间件以外我们还可以自定义中间件实现一些全局的校验和配置

    方法:在应用下新建文件夹,名字自取,文件夹下新建任意py文件,名字自取,接下来就可以在py中定义自己的中间件l

    # 导入MiddlewareMixin模块
    from django.utils.deprecation import MiddlewareMixin
    
    #定义中间件的类,它继承MiddlewareMixin
    class Md1(MiddlewareMixin):
        def process_request(self, request):
            print('Md1里面的process_request')
    
    
    class Md2(MiddlewareMixin):
        def process_request(self, request):
            print('Md2里面的process_request')

    django暴露给开发者5种方法分别是:

    process_request(self, request):   #请求来的时候执行
    process_response(self, request, response):  #响应返回时执行
    process_template_response(self, request, response): #视图函数执行完了执行
    process_view(self, request, view_func, view_args, view_kwargs): #路由匹配成功后视图函数执行前执行
    process_exception(self, request, exception): #视图函数出错时执行

    中间件具体作用及执行流程详见:https://www.cnblogs.com/dongxixi/p/11048901.html

    接下来进入urls.py,路由匹配

    知识点5:路由系统

        urlpatterns = [
                    url(r'^admin/', admin.site.urls),
                    url(r'^$',views.home),
                    url(r'^test/$',views.test),
                    url(r'^testadd/$',views.testadd),
                    url(r'',views.error)
                ]

    ①路由正则匹配

    ②无名分组

    ③有名分组

    ④反向解析

    ⑤路由分发

    路由系统详见:https://www.cnblogs.com/dongxixi/p/11001722.html

    路由匹配成功,进入视图函数

    知识点6:CBV/FBV

    FBV:

      路由层写法: 

       url(r'^test/$',views.test),

      视图层写法:

    def text(request):
        if request.method == "POST":
            return HttpResponse("ok")
        elif request.method == "GET":
            return HttpResponse("ok")

    CBV:

      路由层写法:

     url(r'^test/$',views.Text.as_view()),

      视图层写法:

    from django.views import View
    class Text(View):
        def get(self,request):
            return HttpResponse("ok")
        def post(self,request):
            return HttpResponse("ok")

    三板斧及jsonresponse

    from django.shortcuts import render,redirect,HttpResponse
    from django.http import JsonResponse

    CBV源码剖析见:

    视图函数处理数据,进行django模板渲染

    知识点7:django模板层

    ①过滤器

    ②标签

    ③自定义过滤器、标签、inclusion_tag

    ④模板继承与导入

    ⑤静态文件配置

    详见:

    模板层:https://www.cnblogs.com/dongxixi/p/11013803.html

    补充:https://www.cnblogs.com/dongxixi/p/11007339.html

    知识点8:cookie与session

    ①cookie基本使用

    ②session原理及使用

    ③auth模块

    ④自定义User表

    cookie与session使用见:https://www.cnblogs.com/dongxixi/p/11048974.html

    auth模块及自定义User表使用见:https://www.cnblogs.com/dongxixi/p/11055516.html

    知识点9:form认证组件

    ①form组件使用

    ②form组件进阶

    ③分页器

    form组件:https://www.cnblogs.com/dongxixi/p/11042917.html

    form组件进阶:https://www.cnblogs.com/dongxixi/p/11043435.html

    分页器:https://www.cnblogs.com/dongxixi/p/11042854.html

    知识点10:django数据库操作:

    ①一对一、一对多、多对多表分析及创建

    ②多对多表三种创建方式

    ③django ORM增删改查、单表操作、多表操作

    ④F、Q查询

    ⑤ORM类、字段基础

    ⑥事务、批量插入、查询优化

    表关系:https://www.cnblogs.com/dongxixi/p/10862974.html

    多对多表三种创建方式:https://www.cnblogs.com/dongxixi/p/11042883.html

    ORM增删改查:https://www.cnblogs.com/dongxixi/p/11013783.html

    F、Q查询:https://www.cnblogs.com/dongxixi/p/11042869.html

    ORM基础:https://www.cnblogs.com/dongxixi/p/11050753.html

    django-model进阶:https://www.cnblogs.com/liuqingzheng/articles/9805991.html

    知识点11:

    未完待续...

  • 相关阅读:
    linux上搭建tingproxy服务
    windows上搭建linux系统
    PHP将图片流存为图片文件
    openLayer矩形框选要素,展示要素属性
    点击选中的要素,更换标注图片,并添加文本标注
    openLayer点击要素获取对应的属性信息
    openLayer实现放大缩小
    openLayer的切换中心点、定位功能
    使用openLayer加载arcgis中的地图
    openLayer实现两个地图联动
  • 原文地址:https://www.cnblogs.com/dongxixi/p/11115921.html
Copyright © 2011-2022 走看看