中间件详解,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’ %}
{% 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. 中间件
中间件详解,Django复习的更多相关文章
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件详解
Django中间件详解 中间件位置 WSGI 主要负责的就是负责和浏览器和应用之家沟通的桥梁 浏览器发送过来一个http请求,WSGI负责解包,并封装成能够给APP使用的environ,当app数据返 ...
- net core 中间件详解及项目实战
net core 中间件详解及项目实战 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的H ...
- 这个贴子的内容值得好好学习--实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化
感觉要DJANGO用得好,ORM必须要学好,不管理是内置的,还是第三方的ORM. 最最后还是要到SQL.....:( 这一关,慢慢练啦.. 实例详解Django的 select_related 和 p ...
- 详解Django rest_framework实现RESTful API
这篇文章主要介绍了详解Django rest_framework实现RESTful API,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.什么是REST 面向资源是R ...
- 转载 :实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...
- 详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用. 1. ...
- 实例详解Django的 select_related
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...
- 详解Django的CSRF认证
1.csrf原理 csrf要求发送post,put或delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请求时携带 ...
随机推荐
- springboot整合微软的ad域,采用ldap的api来整合,实现用户登录验证、
流程: 1.用户调登录接口,传用户名和密码2.用户名和密码在ad验证,验证通过后,返回当前用户的相关信息.(注:ldap为java自带的api不需要maven引入其他的)3.根据返回的用户信息,实现自 ...
- div盒子水平居垂直中的几种方法
div盒子水平居垂直中的几种方法<!DOCTYPE html><html> <head> <mete charset="ut ...
- .Net Core知识点
1:const,readonly,和get访问器,三者都可在自己的生命域里赋值,但是编译器也是可以在构造函数里进行初始化赋值的 2:Debugger.IsAttached 属性 http://msdn ...
- django集成ansibe实现自动化
动态生成主机列表和相关参数 def create_admin_domain(admin_node): workpath = BASE_DIR + '/tools/ansible/script' hos ...
- 24.C# Lambda表达式
1.Lambda表达式的含义 Lambda表达式是C#3.0引入的一种结构,使用它可以简化C#编程. 2.Lambda表达式与匿名方法 我们知道匿名方法可用于事件处理,如下delegate声明了一个匿 ...
- Centos7安装jexus,部署asp.net core,asp.net mvc
什么是Jexus 官网解释:https://www.jexus.org/ Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,Jexus Web Service,简称JWS,以支持AS ...
- 关于PL/SQL Developer与Oracle客户端
这是一个很简单的知识点,但这些年遇到过太多初学者反而受其困扰,所以还是决定记录一下. 背景:国内使用Oracle的群体,几乎都会使用PL/SQL Developer这个图形化的工具进行日常数据维护.这 ...
- java支付宝接口开发
在线支付接入支付宝,首先需要去官网申请开发者账号,具体步骤如下: 一.打开官网 1.直接打开链接https://open.alipay.com/platform/home.htm进入 2.百度搜索蚂蚁 ...
- Linux 常用命令,处理端口和Tomcat,mysql
查看端口占用 1.lsof -i:端口号 2.netstat -tunlp|grep 端口号 都可以查看指定端口被哪个进程占用的情况 kill -9 进程号 强制结束进程 启动 1.使用 ser ...
- 面试 -- 关于Activity的相关知识
本篇文章就是记录关于简单的Activity中的问题 问题一:当Activity中存在两个注册的Activity都是主界面的话,应用程序会报错吗?如果不报错,会把那个Activity当做主界面执行 &l ...