9.25中间件和Django的学过的知识总结
2018-9-25 12:10:54
参考连接:http://www.cnblogs.com/liwenzhou/p/8761803.html
浏览器访问Django的过程
面试时容易问到 Django进阶东西
importlib 模块
中间件的执行流程
cookie 和 session设置 参考连接:http://www.cnblogs.com/liwenzhou/p/8343243.html
一个自定义的中间件: my_middleware.py
# /usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/9/25 14:32 # @Author : TrueNewBee """ 自定义中间件 """ from django.shortcuts import HttpResponse from django.utils.deprecation import MiddlewareMixin URL = ["/oo/", "/xx/", "/haha/"] class MD1(MiddlewareMixin): def process_request(self, request): print("这是我的第一个中间件:MD1") print(request.path_info) # 如果用户访问的URL 在白名单里面 if request.path_info in URL: return # 否则 直接返回一个 响应 不走视图部分 else: return HttpResponse("gun!") def process_response(self, response): print("MD1中的process_response") return response def process_view(self, request, view_func, view_args, view_kwargs): print("MD1中的process_view") def process_exception(self, request, exception): print("MD1里面的: process_exception") return HttpResponse("你的sb被我捕获的") class MD2(MiddlewareMixin): def process_request(self, request): print("这是我的第二个中间件:MD2")
Django内容复习了一下 有空吧Django内容贯彻的总结复习一下!!明天开始讲博客项目了,好激动!
附上笔记:
day74 2018-05-21 课程安排 周一: 中间件 auth模块+分析BBS项目需求(小组讨论把表结构设计出来) 1. 今日内容 中间件:http://www.cnblogs.com/liwenzhou/p/8761803.html 1. URL的白名单 url = ["/xx/", "/oo/", "/haha/"] 2. 登陆之后才能访问某些URL 之前使用装饰器 中间件的定义: wsgi之后 urls.py之前 在全局 操作Django请求和响应的模块! 中间件的使用: 5个固定的方法 process_request(self, request) 执行顺序: 按照注册的顺序(在settings.py里面设置中 从上到下的顺序) 何时执行: 请求从wsgi拿到之后 返回值: 返回None,继续执行后续的中间件的process_request方法 返回response , 不执行后续的中间件的process_request方法 process_response 执行顺序: 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) 何时执行: 请求有响应的时候 返回值: 必须返回一个response对象 process_view(self, request, view_func, view_args, view_kwargs): 执行顺序: 按照注册的顺序(在settings.py里面设置中 从上到下的顺序) 何时执行: 在urls.py中找到对应关系之后 在执行真正的视图函数之前 返回值: 返回None,继续执行后续的中间件的process_view方法 返回response, process_exception(self, request, exception) 执行顺序: 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) 何时执行: 视图函数中抛出异常的时候才执行 返回值: 返回None,继续执行后续中间件的process_exception 返回response, process_template_response(self, request, response) 执行顺序: 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) 何时执行: 视图函数执行完,在执行视图函数返回的响应对象的render方法之前 返回值: 返回None,继续执行后续中间件的process_exception 返回response, Django调用 注册的中间件里面五个方法的顺序: 1. process_request urls.py 2. process_view view 3. 有异常就执行 process_exception 4. 如果视图函数返回的响应对象有render方法,就执行process_template_response 5. process_response Django已经学过的知识点: 1. Urls.py 路由系统: 正则 分组匹配 --> 位置参数 分组命名匹配 --> 关键字参数 分级路由 include 给路由起别名 name="xx" 反向解析url view from django.urls import reverse reverse("xx", args=[1, 2, 3]) reverse("xx", kwargs={”k": "v"}) 自取其辱 2. 视图 views.py request request.method request.GET --> URL里面的参数 request.POST --> post请求的数据 request.path_info --> 路径 request.get_full_path() --> 路径加路径的参数 response 新手必备3件套 render(request, "xx.html", {“k”: "v", ...}) HttpResponse("响应") redirect("/index/") redirect("http://www.luffycity.com") from django.http import JsonResponse JsonResponse() FBV和CBV 函数装饰器和方法装饰器的区别 3. 模板 filter 内置的filter方法 自定义的filter方法 tag 内置的tag 自定义的simpleTag 自定义的inclusionTag 母版和继承 {% extends ‘base.html’ %} # 写在子html的第一行 {% block page-main %} {% block small %} {% endblock small %} {% endblock page-main %} 组件 {% include nav %} 静态文件相关的tag 在模板语言里面反向解析url {% url 'url的别名' xx %} 4. ORM 对应关系 类 --> 数据表 对象 --> 数据行 属性 --> 字段 Django连接MySQL数据库的步骤: 1. 手动创建库 2. 配置settings.py中数据库的连接信息 3. 修改settings.py同目录下的__init__.py文件,添加两句 import pymysql pymysql.install_as_MySQLdb() 4. 在app下面的models.py中定义类,类一定要继承mdoels.Model 5. 执行两句命令 1. python manage.py makemigrations 2. python manage.py migrate 操作数据表 操作数据行(增删改查) 单表 外键 多对多 一对一 ORM高级: 常用字段和方法 必知必会13条 神奇的双下划线 跨表的正向查询反向查询 F和Q 聚合和分组 事务 执行原生的SQL语句 5. Cookie和Session,分页 6. AJAX $.ajax({ url: “”, type: "post", data: {"k1": JSON.stringify([1,2,3])}, success:function(data){ } }) 7. form表单 8. 中间件