python-django中间件介绍

在这里插入图片描述

设计

Django框架中的中间件是介于请求与响应处理过程之间的一道处理环节, 它是轻量级且低级的“插件”系统,可以全局改变Django的输入或输出。

这种设计使得我们可以根据需要添加自定义的处理逻辑,以满足各种复杂的需求。

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'

每个中间件的功能如下:

  • SecurityMiddleware:为request/response提供了几种安全改进,无它不安全
  • SessionMiddleware:开启session会话支持,无它无session
  • CommonMiddleware:基于APPEND_SLASH和PREPEND_WWW的设置来重写URL,如果APPEND_SLASH设为True,并且初始URL 没有以斜线结尾以及在URLconf 中没找到对应定义,这时形成一个斜线结尾的新URL;如果PREPEND_WWW设为True,前面缺少 www.的url将会被重定向到相同但是以一个www.开头的url。
  • CsrfViewMiddleware:添加跨站点请求伪造的保护,通过向POST表单添加一个隐藏的表单字段,并检查请求中是否有正确的值,无它无csrf保护
  • AuthenticationMiddleware:在视图函数执行前向每个接收到的user对象添加HttpRequest属性,表示当前登录的用户,无它用不了request.user
  • MessageMiddleware:开启基于Cookie和会话的消息支持,无它无message
  • XFrameOptionsMiddleware:对点击劫持的保护

使用场景

例如,我们可以通过编写中间件来实现一些特定的功能,如用户认证服务、CSRF防御机制和点击劫持防御等。

此外,每个中间件都有其特定的职责,它们会按照预定的规则在特定的时候执行。

例如,Django提供的Authentication middleware组件就会在用户请求时将用户与对应的session进行关联。

中间件可以帮助我们实现针对不同路由做不同的异常响应内容。

  • 比如,我们可以针对/pages做静态页面500处理,对/api做rest 500处理,对/graphql做graphql的异常处理。

然而,由于中间件可以修改全局的输入和输出,因此在使用中间件时需要谨慎,用不好可能会影响应用的性能。

总的来说,中间件的设计为Django框架带来了极大的灵活性和扩展性。

Django REST framework

Django REST framework是一个强大的Web API开发框架,建立在Django框架之上,可以帮助Django REST framework是一个强大的Web API开发框架,建立在Django框架之上,可以帮助开发者快速地构建符合RESTful风格的API。以下是使用Django REST framework的基本步骤:

  1. 安装Django REST framework:可以使用pip来安装djangorestframework库。
  2. 在Django的settings.py文件中添加rest_framework配置。
  3. 创建序列化器(Serializer):序列化器用于定义如何将模型实例转换为Python数据类型,以及如何将Python数据类型转换回模型实例。
  4. 创建视图:视图是处理API请求并返回响应的地方。
  5. 定义URL模式:URL模式用于将URL路由到相应的视图。
  6. 运行服务器:启动Django开发服务器,然后通过浏览器或其他工具访问API。

序列化器(Serializer)

在Django REST framework中需要定一个Serializer 然后交给视图层处理。

序列化器(Serializer)的作用是

  • 将模型实例(Model instance)转换为Python数据类型(如字典)以便将其转换为JSON格式的响应。
  • 同时,它还可以将接收到的JSON数据转换回模型实例,以便进行保存操作。

Django REST framework使用案例

pip install django 
pip install djangorestframework

# 创建一个新的Django项目和应用
django-admin startproject myproject 
cd myproject 
python manage.py startapp myapp

myapp目录下的models.py文件中定义一个模型

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

    def __str__(self):
        return self.name

myapp目录下创建一个名为serializers.py的文件,并定义一个序列化器:

from rest_framework import serializers
from .models import Person

class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ['name', 'age']


myapp目录下创建一个名为views.py的文件,并定义一个视图:

from rest_framework import generics
from .models import Person
from .serializers import PersonSerializer

class PersonListCreateView(generics.ListCreateAPIView):
    queryset = Person.objects.all()
    serializer_class = PersonSerializer

myapp目录下创建一个名为urls.py的文件,并定义URL模式

from django.urls import path
from .views import PersonListCreateView

urlpatterns = [
    path('persons/', PersonListCreateView.as_view(), name='person_list_create'),
]

在这个示例代码中,PersonSerializer是一个序列化器,用于将Person模型实例转换为JSON格式的数据。它定义了两个字段:nameage,分别对应于Person模型的这两个属性。通过使用serializers.ModelSerializer基类,我们可以轻松地为模型创建序列化器。

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值