• Django 五——中间件、缓存、CSRF、信号、Bootstrap(模板)


    内容概要:

    1、Django的请求生命周期是怎么样的?

    2、中间件

    3、CSRF补充

    4、信号

    5、Bootstrap(模板)


    1、Django的请求生命周期是怎么样的?

    (即请求发起到返回都经历了什么?)

    用户发起请求,经过中间件,到达路由系统,分发给views是凸函数,然后去数据库拿数据,去模板中拿模板,经过渲染,在经过中间件返回给用户。

    2、中间件

    用处:可用于做过滤器,过滤黑名单,适用于所有的请求都要处理的情况

    (而只需要对某些请求做处理时,直接在views函数里面写装饰器即可)

    自定义方法

    md文件夹中==》hxl.py

    from django.utils.deprecation import MiddlewareMixin
    
    class MyMiddlewareMixin(object): #将MiddlewareMixin类里面的东西拿过来复制一份,重命名类,
        # 自己定义的中间件就继承重命名后的类,这样以后不管版本如何变化,都能这样来定义中间件
        def __init__(self, get_response=None):
            self.get_response = get_response
            super(MyMiddlewareMixin, self).__init__()
    
        def __call__(self, request):
            response = None
            if hasattr(self, 'process_request'):
                response = self.process_request(request)
            if not response:
                response = self.get_response(request)
            if hasattr(self, 'process_response'):
                response = self.process_response(request, response)
            return response
    
    class HXL(MyMiddlewareMixin):
        def process_request(self,request):
            print('hxl-->process_request')
    
        def process_response(self,request, response):
            print('hxl-->process_response')
            return response
    
    class GYC(MyMiddlewareMixin):
        def process_request(self,request):
            print('gyc-->process_request')
    
        def process_response(self,request, response):
            print('gyc-->process_response')
            return response

    settings.py里面

    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',
        'md.hxl.HXL',
        'md.hxl.GYC',
    ]
    

      urls.py里面

    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),
    ]
    

      views.py里面

    from django.shortcuts import render,HttpResponse
    def index(request):
        print('test')
        return HttpResponse('test!!!')
    

     

    3、缓存(3种应用,5种配置)

    (1)全站缓存:settings里面加两个中间件

    (2)单独视图缓存

    (3)视图函数里面的某一块缓存

    4、CSRF(跨站伪造请求)

    全站都用csrf时:

    Form提交时:

    (1)、需用render

    (2)、{% csrf_token %}

      ajax提交时:

    (1)、在cookie中提取创始人斧头砍对应的随机字符串

    (2)、设置请求头:

    X-CSRFToken:cookie中取到得值

    或用$.ajaxsetup

    全站都不用,仅某几个用csrf,用装饰器@csrf_protect

    全站都用,仅某几个不用csrf时,用装饰器@csrf_exempt

    5、信号

    Django内部定义的信号,可在制定的位置注入指定的操作

    ——内置信号:

    a指定信号中注入函数

    ——自定义信号:

    a创建信号

    b指定信号中注入函数

    c在程序中触发函数

    6、Bootstrap(模板)——响应式+模板

    即集成了css和js的文件夹

    css——响应式:用@media,如container、栅(shan)格

    js——应用:先引入jquery.js,再引入bootstrap.js

    多看模板

    参考博客:

    wu.sir

    http://www.cnblogs.com/wupeiqi/articles/5246483.html 

     

  • 相关阅读:
    poj 3264(RMQ或者线段树)
    LCA上的RMQ模板算法
    LCA离线算法Tarjan的模板
    poj 1330(初探LCA)
    hdu 3367(与最大生成树无关。无关。无关。重要的事情说三遍+kruskal变形)
    hdu 4496(并查集逆向添边)
    hdu 1829(继续扩展并查集)
    poj 1182 (扩展并查集)
    hdu 3038(扩展并查集)
    hdu 3371(kruskal)
  • 原文地址:https://www.cnblogs.com/tangtingmary/p/8097589.html
Copyright © 2020-2023  润新知