Django中间件和csrf

2022/5/24 23:50:06

本文主要是介绍Django中间件和csrf,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • django中间件
    • django中间件简介
    • 五个可以自定义的方法
    • django中间件的使用场景
  • 自定义中间件
    • 自定义中间件的步骤
    • 自定义中间件的常用方法
    • 需要了解的方法
  • csrf
    • csrf简介
    • csrf解决策略

django中间件

django中间件简介

django中间件是django的门户,django自带七个中间件,每个都有各自对应的功能

五个可以自定义的方法

django不仅有自带的七个中间件,django还支持自定义中间件并提供五个可以自定义的方法
(1)process_request
(2)process_response
(3)process_view
(4)process_template_response
(5)process_excepton

django中间件的使用场景

只要是全局相关的功能都可在中间件中编写
例如:用户黑名单校验、用户访问频率校验、网站全局用户身份校验

自定义中间件

自定义中间件的步骤

1.创建一个任意名称的文件夹
2.在该文件夹内创建一个任意名称的py文件
3.在该py文件内编写中间件类
4.配置文件中注册

自定义中间件的常用方法

1.process_request
请求来的时候会从上往下依次执行配置文件中注册了的中间件里面的process_request方法,若没有则直接跳过
若该方法自己返回了HttpResponse对象,那么请求不再继续往后直接返回相应的数据
2.process_response
响应走的时候会从下往上依次执行配置文件中注册了的中间件里面的process_response方法,若没有则直接跳过
若该方法自己返回了HttpResponse对象,那么响应会替换成该HttpResponse对象数据,而不再是视图函数想要返回给客户端的数据
注意:若process_request返回了HttpResponse对象,那么会从当前位置从下往上执行每一个process_response

需要了解的方法

1.process_view
路由匹配成功之后执行视图之前从上往下执行配置文件中注册了的中间件里面的process_view方法
2.process_template_response
视图函数执行完毕之后返回的对象中含有render属性对应一个render方法
则会从下往上执行配置文件中注册了的中间件里面的process_template_response方法
3.process_exception
视图函数执行过程中报错并在返回响应的时候会从下往上执行配置文件中注册了的中间件里面的process_exception

csrf

csrf简介

csrf,中文名,跨站请求伪造。csrf是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,利用的是网站对用户网页浏览器的信任。

csrf解决策略

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'jquery-3.6.0.js' %}"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-4 col-md-offset-4">
            <br><br><br>
            	<form action="" method="post">
                {% csrf_token %}
                <p>当前账户:<input type="text" name="current_user"></p>
                <p>目标账户:<input type="text" name="target_user"></p>
                <p>转账金额:<input type="text" name="money"></p>
                <input type="submit">
                </form>
        </div>
    </div>
</div>

</body>
</html>
def test_csrf(request):
    if request.method == 'POST':
        current_user = request.POST.get('current_user')
        target_user = request.POST.get('target_user')
        money = request.POST.get('money')
        return HttpResponse(f'<br><br><br><h2 style="text-align:center">用户{current_user}给用户{target_user}转账{money}元</h2>')
    return render(request, 'test_csrf.html')



这篇关于Django中间件和csrf的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程