欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > PythonWeb开发框架—Django之DRF框架的使用详解

PythonWeb开发框架—Django之DRF框架的使用详解

2025/7/1 4:30:19 来源:https://blog.csdn.net/weixin_42476668/article/details/145410707  浏览:    关键词:PythonWeb开发框架—Django之DRF框架的使用详解

1.安装依赖包

pip install djangorestframework

2.配置应用

在settings.py中的INSTALLED_APPS中添加rest_framework应用

3.创建序列化器

序列化器是用来操作models的

  • 第一步:定义models
##models.pyfrom django.db import models# Create your models here.class User(models.Model):name = models.CharField(verbose_name='用户名', max_length=32)password = models.CharField(verbose_name='登录密码', max_length=64)userid = models.CharField(verbose_name='用户ID', max_length=64)phonenumber=models.CharField(verbose_name='手机号',max_length=11)class Meta:db_table = 'user'
  • 第二步:在业务模块文件夹下先新增serializers.py文件

  • 第三步:在serializers.py中创建序列化器
from rest_framework import serializers
from testmodule.models import User##系列化器是用来操作models的
class UserSerializer(serializers.ModelSerializer):class Meta:model = User  fields = '__all__' #操作user表时返回所有字段# fields = ('id', 'name') #操作user表时只返回name字段

4 序列化操作

  • 在views.py中定义视图类
#views.pyfrom testmodule.models import User
from rest_framework.viewsets import ModelViewSet
from testmodule.serializers import UserSerializerclass UserDRFView(ModelViewSet):##下面两行代码已经自动定义了GET、POST、PUT、PATCH和DELETE方法queryset = User.objects.all()serializer_class = UserSerializer
  • 设置接口调用路径
from rest_framework.routers import DefaultRouter
from django.urls import includerouter = DefaultRouter()
router.register('user', testmodule.views.UserDRFView,basename="user")urlpatterns = [path('', include(router.urls))]
  • 调用接口测试

get方法:序列化操作

和数据库表里数据一致

增加主键查询:

POST方法:反序列化操作

post的数据已经新增到数据库

5.数据校验

5.1 数据长度校验

在序列化器里对字段的长度进行校验:

用postman测试校验规则是否生效:

5.2 重复校验

在序列化器里对数据进行是否重复校验

需要导入UniqueValidator类:from rest_framework.validators import UniqueValidator

用postman测试校验规则是否生效

5.3 自定义校验规则

  • 单字段校验

需要用到ValidationError

先导入:from rest_framework.exceptions import ValidationError

校验方法命名规则:validate_校验字段名

用postman测试校验规则是否生效:

  • 多字段校验

需要用到ValidationError

校验方法命名固定为:validate

用postman测试校验规则是否生效:

6.多条件查询

  • 全局配置的写法

第一步:先安装pip install django-filter

第二步:在setting.py中的INSTALLED_APPS中配置应用:

第三步:在setting.py中添加

REST_FRAMEWORK = {'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

第四步:在views.py的视图类中添加要过滤的多条件

测试:

  • 局部配置的写法

第一步:在views.py中导入:from django_filters.rest_framework import DjangoFilterBackend

第二步:在视图类中添加:

filter_backends = [DjangoFilterBackend]

filterset_fields = ('name', 'phonenumber')

测试:

7.模糊搜索

第一步:导入from rest_framework import filters

第二步:在views.py的视图类中添加模糊过滤条件

测试:查询参数的字段是:search

如果需要多字段都支持模糊查询,在视图类的search_fields = ('name',)中增加字段即可

8.排序

第一步:导入from rest_framework import filters

第二步:在views.py的视图类中添加filters.OrderingFilter和排序字段

测试:查询参数的字段是:ordering

9.分页支持

在settings.py中添加:

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 2

测试:

10.权限token支持

  • 安装

pip install djangorestframework_simplejwt

  • 在settings.py 中REST_FRAMEWORK添加
'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication' ]                                    

  • 在urls.py 中添加
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyViewurlpatterns = [path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), # rest_framework_simplejwt自带的得到tokenpath('api/v1/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # 刷新JWTpath('api/token/verify/',TokenVerifyView.as_view(), name='token_verify')  # 验证token]
  • 测试:不传token时访问报错

  • 获取token

获取token需要管理员账号密码,就是访问http://localhost:8000/admin/ 的账号和密码

如果没有就先创建一个:执行命令 python manage.py createsuperuser

然后访问:http://localhost:8000/api/token/

填写管理员账号和密码:

点击【POST】获取到access

组装Token:Bearer+空格+access

请求头加上Authorization再次测试:

11.DRF认证方式

'DEFAULT_AUTHENTICATION_CLASSES': [ 
'rest_framework_simplejwt.authentication.JWTAuthentication', 
'rest_framework.authentication.SessionAuthentication', 
'rest_framework.authentication.BasicAuthentication' ]

DEFAULT_AUTHENTICATION_CLASSES  这是认证类列表,用于定义用户身份的验证方式。Django REST 框架会按列表顺序尝试这些认证方式,直到有一个成功验证用户身份

  • JWTAuthentication  token认证,适用于无状态 API
  • SessionAuthentication   Session 认证需要检查 Cookie 或请求头中的 Session,使用时需要启用 Django 的 Session 中间件,且会触发 CSRF 校验
  • BasicAuthentication  基本认证:用户名和密码 Base64 编码后放在请求头 Authorization: Basic credentials

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词