zoukankan      html  css  js  c++  java
  • django 回顾

    一、HTTP协议

        简述HTTP协议

          -超文本传输协议,无状态的短连接,请求与响应只发一次就断开连接,请求响应后,再次发起请求时,不认识

        

        - 格式:

          - GET请求:输入地址回车:https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F
             请求由两部分组成:请求头和请求体,请求头和请求体通过 分割,请求头和请求头之间通过 分割。
               响应由两部分组成:响应头和响应体,


          - POST请求:
            请求由两部分组成:请求头和请求头
            响应由两部分组成:响应头和响应体,
          

          -GET与POST的区别 POST请求体有内容 GET无内容

        -常见的请求头

           -user-agent  设备信息

           -host 访问设备的主机名

           -referrer 防盗链

        -你了解的请求方式有哪些?

          -GET/POST/PUT/PATCH/DELETE/OPTIONS

            -GET:向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据

              (如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

            -POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会

                导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

            -OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性                       

             -HEAD:向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

             -PUT:向指定资源位置上传其最新内容

               -DELETE:请求服务器删除Request-URL所标识的资源

            -TRACE:回显服务器收到的请求,主要用于测试或诊断

           -CONNECT :HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    二、Django的生命周期 

        - 浏览器输入:http://www.oldboyedu.com 回车
        - DNS解析,将域名解析成IP。
        - 浏览器(socket客户端),根据IP和端口(80)创建连接,发送请求。
        - 服务端接收请求
        - 实现了wsgi协议的模块,如:wsgiref接收到用户请求。
        - 然后将请求转交给django的中间件,执行中间件的process_request(process_view)。
        - 路由系统进行路由匹配。
        - 匹配成功执行视图函数,视图函数进行业务处理(ORM操作数据+模板渲染)
        - 交给中间件的process_response方法
        - wsigref的socket.send,将结果返回给浏览器。
        - 断开socket连接。
        - 浏览器断开连接。

           

    三、什么是wsgi?

        wsgi,web服务网关接口,他是一套协议。
        实现wsgi协议有:
          - wsgiref   单继承 
          - uwsgi
        实现wsgi协议的所有的模块本质:socket服务端。

    四、django中间件的作用?应用场景?

      - 权限系统中的权限校验
      - 解决跨域:编写一个中间件,在中间件中定义一个process_response,添加一个响应头(CORS,跨站资源共享)
      - 用户登录
      - csrf_token验证(django内置功能)

      

      - 执行流程
        正常流程:
          - 所有process_request
          - 所有process_view
          - 所有process_response
        非正常流程:
          - django 1.10及以后:平级返回
          - django 1.10以前:找到最后的process_response

      - 执行流程是如何实现的?
        

    将中间件的相关方法添加到对应的 5个列表中,以后循环执行(顺序、倒序)

    五、路由系统
    本质:保存url和函数的对应关系。
    相关知识点:
    示例1:
    url(r'^index/', views.index),

    def index(request):
    return HttpResponse('...')

    示例2:
    url(r'^user/edit/(d+)/$', views.user_edit),

    def user_edit(request,nid):
    return HttpResponse('...')

    示例3:
    url(r'^crm/', include('app01.urls'))

    from django.conf.urls import url,include
    from app01 import views
    urlpatterns = [
    url(r'^order/', views.order),
    url(r'^center/', views.center),
    ]

    def order(request):
    return HttpResponse('...')

    def center(request):
    return HttpResponse('...')

    示例4:根据name别名反向生成URL
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index,name='index'),
    url(r'^user/edit/(d+)/$', views.user_edit,name='user_edit'),
    url(r'^crm/', include('app01.urls')),
    ]

    urlpatterns = [
    url(r'^order/', views.order,name='order'),
    url(r'^center/', views.center,name='center'),
    ]


    反向生成:

    index_url = reverse('index')
    user_edit_url = reverse('user_edit',args=('999',))

    index_url = reverse('order')
    index_url = reverse('center')

    示例5:根据 namespace + name 别名反向生成URL
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index,name='index'),
    url(r'^user/edit/(d+)/$', views.user_edit,name='user_edit'),
    url(r'^crm/', include('app01.urls',namespace='crm')),
    ]

    urlpatterns = [
    url(r'^order/', views.order,name='order'),
    url(r'^center/', views.center,name='center'),
    ]


    <h1>视图中反向生成:</h1>

    index_url = reverse('index')
    user_edit_url = reverse('user_edit',args=('999',))

    index_url = reverse('crm:order')
    index_url = reverse('crm:center')

    在模板中反向生成:

    {% url 'index' %}
    {% url 'user_edit' 999 %}

    {% url 'crm:order' %}
    {% url 'crm:center' %}

    六、什么是MVC、MTV?

        MVC 全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

        MTV, Model Template  View 

    七、

    FBV和CBV
      FBV,写函数进行处理业务逻辑。
      CBV,写类进行处理业务逻辑。

    本质上FBV和CBV都是一样的,因为url对应都是一个函数。
    url(r'^order/', views.order,name='order'), #

    1. 对应order函数;

    2.一旦请求到来,立即执行order函数
    url(r'^center/', views.CenterView.as_view(),name='center'), #

    1. url对应 views.CenterView.as_view()会返回一个view函数;

    2. 请求到来之后,立即执行view函数,view由会触发dispatch方法、dispatch会根据method不同根据反射执行get/post/delete...的方法。

    推荐:
    业务逻辑,FBV(简单)。
    restful api,CBV。

  • 相关阅读:
    斐波那契数列的递归和非递归实现
    二叉树遍历
    基础总结
    内部类
    I/O dempo
    读取文件注意事项
    eclipse 主题设置
    String 常用函数
    多态的理解
    ffmpeg处理RTMP流媒体的命令大全
  • 原文地址:https://www.cnblogs.com/qiang-qiang/p/9911237.html
Copyright © 2011-2022 走看看