django 回顾

Posted qiang-qiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘),
]


视图中反向生成:

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。

 


























































































































以上是关于django 回顾的主要内容,如果未能解决你的问题,请参考以下文章

Django内容回顾

django 回顾

Cappuccino、Django、AJAX 并将它们组合在一起 - 回顾我的架构!

django知识点回顾(上)

django url分发,视图,模板回顾

django知识回顾