当前位置: 首页 > article >正文

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

1.安装依赖包

pip install djangorestframework

2.配置应用

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

3.创建序列化器

序列化器是用来操作models的

  • 第一步:定义models
##models.py

from 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.py

from testmodule.models import User
from rest_framework.viewsets import ModelViewSet
from testmodule.serializers import UserSerializer

class UserDRFView(ModelViewSet):
    ##下面两行代码已经自动定义了GET、POST、PUT、PATCH和DELETE方法
    queryset = User.objects.all()
    serializer_class = UserSerializer
  • 设置接口调用路径
from rest_framework.routers import DefaultRouter
from django.urls import include

router = 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, TokenVerifyView

urlpatterns = [
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), # rest_framework_simplejwt自带的得到token
    path('api/v1/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # 刷新JWT
    path('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


http://www.kler.cn/a/560017.html

相关文章:

  • ai-1、人工智能概念与学习方向
  • 商业化运作的“日记”
  • system运行进程以及应用场景
  • 【Python爬虫(61)】Python金融数据挖掘之旅:从爬取到预测
  • 【odoo18-文件管理】在uniapp上访问odoo系统上的图片
  • 第二个接口-分页查询
  • 网站快速收录:如何优化网站图片Alt标签?
  • 如何安装vm和centos
  • 基于 IMX6ULL 的环境监测自主调控系统
  • github如何创建空文件夹
  • 图像处理篇---图像处理中常见参数
  • 基础学科与职业教育“101计划”:推动教育创新与人才培养
  • Windows逆向工程入门之逻辑运算指令解析与应用
  • 湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌
  • 异常(1)
  • 如何在java中用httpclient实现rpc post 请求
  • linux-多进程基础(1) 程序、进程、多道程序、并发与并行、进程相关命令,fork
  • 瑞幸咖啡×动漫IP:精选联名案例,解锁品牌营销新玩法
  • Python生成器2-250224
  • unity学习52:UI的最基础组件 rect transform,锚点anchor,支点/轴心点 pivot