文章目录 一、封装 二、调用 三、测试接口 一、封装 可以发现在给客户端返回数据都有固定的格式,比如 json。...我们为了减少重复代码,重写Response 类 utils/response.py from rest_framework.response import Response class APIResponse...__init__(data=data, status=http_status, headers=headers, exception=exception) 二、调用 views.py...from rest_framework.response import Response from rest_framework.views import APIView from api import
中很著名的一个框架是django-rest-framework,帮我们减少了很多工作量,尤其在序列化与反序列化成我们需要的格式帮了我们省了很多事 在这里就记录一下个人的学习过程 django-rest-framework...python manage.py makemigrations python manage.py migrate 在数据库里插入几条测试数据后如图所示 实现序列化类 官方文档:http://www.django-rest-framework.org...id', 'student_id', 'name', 'age') 其他相关的参数可以查阅官方文档,都有详细的介绍 这里我们只简单的显示所有的字段 实现视图api类 官方文档: http://www.django-rest-framework.org...# 更新某一个学生的信息 def update(self, request, *args, **kwargs): pass 注册功能 官方文档:http://www.django-rest-framework.org...# coding=utf-8 import re from rest_framework import serializers from django.contrib.auth.models import
分析源码 通过分析源码了解权限组件的方法调用过程 APIView 的 dispatch 中使用 initial 方法实现初始化并进行三大认证,第二步进行权限组件调用 rest_framework/views.py...# 认证组件:校验用户 # 这里调用 perform_authentication 实现认证 self.perform_authentication(request...) # 权限组件:校验用户权限 self.check_permissions(request) # 频率组件:限制视图接口被访问次数 self.check_throttles...post(self, request, *args, **kwargs): return APIResponse(0, 'All successful') urls.py from django.conf.urls...import BasePermission, SAFE_METHODS from django.contrib.auth.models import Group class MyPermission
分析源码 通过分析源码了解认证组件的方法调用过程 APIView 的 dispatch 中使用 initial 方法实现初始化并进行三大认证,第一步就是认证组件 rest_framework/views.py...) # 权限组件:校验用户权限 self.check_permissions(request) # 频率组件:限制视图接口被访问次数 self.check_throttles...self.authenticators,配置的一堆认证类产生的认证类对象组成的 list for authenticator in self.authenticators: # 该方法被...SessionAuthentication 查看默认配置的认证类的实现 class SessionAuthentication(BaseAuthentication): """ Use Django's...尤其是做session认证时,会调用csrf,但是对于前后端分离的情况,这种规则并不友好。 1.
django.contrib.messages', 'django.contrib.staticfiles', # 第三方 'rest_framework', # 自定义...= { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer...'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser' ], # 全局异常模块配置...作为数据库时,使用 pymysql 来调用 settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql...import exception_handler as drf_exception_handler from rest_framework.views import Response from rest_framework
视图工具集 1.群查 查看源码 代码实现 测试接口 2.单查 查看源码 代码实现 测试接口 3.单增 查看源码 代码实现 测试接口 4.单改 查看源码 代码实现 测试接口 零、视图家族 Django...REST framework 为了方便视图类的操作,构建了包括以下几种视图类和工具集: views:API视图 generics:工具视图 mixins:视图工具集 viewsets...get_queryset(): 从类属性 queryset 中获得 model 的 queryset 数据 get_object(): 通过有名分组 pk 确定唯一操作对象 自定义主键的有名分组 :lookup_field...ListModelMixin: """ List a queryset. """ def list(self, request, *args, **kwargs): # get_queryset...kwargs) # 添加自己封装的 APIResponse return APIResponse(results=response.data) urls.py from django.conf.urls
接口测试 一、频率组件 通过分析源码了解频率认证组件的方法调用过程 APIView 的 dispatch 中使用 initial 方法实现初始化并进行三大认证,第三步进行权限组件调用 rest_framework...) # 权限组件:校验用户权限 self.check_permissions(request) # 频率组件:限制视图接口被访问次数 self.check_throttles...还需等待多长时间才能访问 throttle_durations.append(throttle.wait()) # throttle_durations 非空,被加入等待时间...request, *args, **kwargs): return APIResponse(0, 'Verification code successful') urls.py from django.conf.urls...接口测试 第一次调用 ? 调用一次后,第二次返回 ?
解决跨域问题,需要安装一个包 pip install django-cors-headers 这个包是 rest框架特定的 之后在setting里面app里面注册’corsheaders’, 还要加一个中间件...,位置一定要放对 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware...', 在这个位置加这个 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware...', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware...', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware
一、什么是 FBV与CBV FBV: function base view CBV: class base view 二、CBV 实现原理:反射 三、CBV 面向对象 1.封装 2.继承 四、Django...中间件方法与流程 一、什么是 FBV与CBV FBV: function base view views.py from django.shortcuts import render,HttpResponse...import admin from django.urls import path from tutorial01 import views urlpatterns = [ path('users...import render,HttpResponse from django.views import View class UsersView(View): # 如何知道数据传输方法?...views.UsersView.as_view()), path('admin/', admin.site.urls), ] 二、CBV 实现原理:反射 反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性
Django rest Framework入门 一 :手工实现常见API中记录了如何手工基于Django实现常见的API类型,这篇笔记记录一下DRF框架简单使用的体验。...修改Django的settings.py文件 将’rest_framework’添加到‘INSTALLED_APPS’中,如下 INSTALLED_APPS = [ ......'rest_framework', ] 编写序列化器 序列化和反序列化的意思其实就是利用Django的Model将数据库中的数据进行一定的格式修改(比如dict变成json)之后返回给api请求者和将从...class Meta: model = BookInfo # 指定作用的模型 fields = '__all__' # 指定序列化的字段,这里让所有字段都能被序列化...= BookInfoSerializer # 指定序列化器 上面这个视图类只有三行,但是它却实现了笔记一中BookListView和BookDetailView两个视图类所有的功能,由此可以见DRF框架还是很方便的
框架的通用列表视图的默认行为是返回模型管理器的整个查询集。...框架还包括对通用筛选后端的支持,这些后端允许您轻松构造复杂的搜索和筛选器。...'django_filters', ... ] REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend...'] } 2.视图设置 from django_filters.rest_framework import DjangoFilterBackend class UserListView(generics.ListAPIView...(目前只支持Django的PostgreSQL后端。 ‘$’ 正则表达式搜索。
今天开始了django-rest-framework的学习 *** 其实api写起来的话要比前后端一起写要简单很多,因为你不需要关心前端怎么写,主要心思放在后端上面即可,前端的话随便找个模板,然后用...INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’,...’, ‘rest_framework’, ‘ajax’, ] *** 注册完成之后路由上的写法也有些不同, URL中 *** from django.urls import path...对urlencoding会进行解析兼容较好,其余的都不会进行解析 *** ##下面是rest_framework框架 *** from rest_framework.serializers import...Serializer 序列化器 from rest_framework.views import APIView # 继承自View的api接口 from rest_framework.response
级联操作 1.CASCADE 2.SET_NULL 3.SET_DEFAULT 4.DO_NOTHING 四、Admin 通过 Admin 我们可以直接通过后台来编辑表 admin.py注册 from django.contrib
, request, *args, **kwargs): return self.create(request, *args, **kwargs) 代码实现 urls.py from django.conf.urls...default, but does include the base set of generic view behavior, such as the `get_object` and `get_queryset...self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) urls.py from django.contrib...import admin from django.urls import path from django.conf.urls import url, include from django.views.static...import serve from django.conf import settings from api import views urlpatterns = [ # ...
贴心的是,django-rest-framework 已经帮我们把 retrieve 的逻辑在 mixins.RetrieveModelMixin 里写好了,直接混入视图集即可: class PostViewSet...serializer = self.get_serializer(instance) return Response(serializer.data) retrieve 方法首先调用...get_object 方法通常情况下依据以下两点来筛选出单个资源对象: get_queryset 方法(或者 queryset 属性,get_queryset 方法返回的值优先)返回的资源列表对象。...django-rest-framework 以该字段的值从 get_queryset 返回的资源列表中筛选出单个资源对象。...视图集中 serializer_class 属性已经被指定为了 PostListSerializer,那 PostRetrieveSerializer 应该指定在哪呢?
Django Rest Framework (DRF)是基于 Django 框架,用于构建 Web API 的工具集。...提供 REST 接口开发规范 验证策略,包括 OAuth1a 和 OAuth2 支持ORM 和 非 ORM 数据源的序列化与反序列化操作 基于函数的视图操作 目前 Red Hat,Mozilla,Heroku...生物信息数据库开发中,EBI也使用 Django REST framework 作为开发工具 DRF 官网:https://www.django-rest-framework.org/ GitHub:https...://github.com/encode/django-rest-framework/tree/master 二、材料 Python3 MySQL / Sqlite3 Pycharm:搭建 Python...四、连接数据库 这里有提供两种选择 Sqlite3 Django 安装好默认会调用 Sqlite3,如果没有安装会报缺少 sqlite dll 文件的错误 解决参考:Windows 与 Linux 安装
目录 需求 创建一个Django项目 配置基础东西 连接mysql 使用Django_rest 解决跨域 建模(model里面写实体类) admin.py文件里面的创建 手动在后台管理系统里面添加相关数据...还有收货地址模块 创建一个Django项目 用pycharm直接创建一个Django项目 配置基础东西 连接mysql 使用Django_rest 解决跨域 第一步 第二部 第三部...建模(model里面写实体类) from django.db import models # Create your models here. from django.db import models...(self): # 这个就是rest框架的方法,不能变,就是定义查询的范围的,获取查询级 category=self.request.query_params.get('category...框架自带 配置完成,进行生成数据库迁移 数据库里面会生成 就会多一个这个,配置文件里面,多加这个 REST_FRAMEWORK = { # 新版本必须写下面的话 'DEFAULT_PAGINATION_CLASS
GenericAPIView 是 Django REST Framework (DRF) 中的一个基础视图类,它继承自 APIView,并添加了一些常用的功能,特别是与数据库模型交互的功能。...() # 所有图书get_queryset() 方法:允许动态定义查询集,比如基于当前用户过滤数据。...from rest_framework.filters import SearchFilter, OrderingFilterfrom django_filters.rest_framework import...get 方法get 方法首先调用 self.get_queryset() 获取基础查询集然后调用 self.filter_queryset() 应用过滤在 filter_queryset 中,首先调用父类方法应用配置的过滤器然后遍历所有查询参数...title=Django - 过滤标题包含 "Django" 的图书/api/books/?
下面是一个完整的 DRF 视图集示例,包括定义视图集、注册视图集、定制视图集操作等:from rest_framework import viewsetsfrom rest_framework.permissions...IsAuthenticated] def perform_create(self, serializer): serializer.save(author=self.request.user) def get_queryset...BookViewSet 提供了默认的 CRUD 操作,但也定制了 perform_create() 方法和 get_queryset() 方法,以便实现更多功能。...from django.urls import path, includefrom rest_framework.routers import DefaultRouterfrom .views import...然后我们将路由器中的 URL 配置包含在 Django 项目的根 URL 配置中。
简而言之: drf找不到删除的数据,admin需要全部数据 drf和admin删除数据都是软删除 解决方案 DRF Django Manager 赋予了 Django的模型(Model)中操作数据库的能力...class ModelManager(models.Manager): # 重写get_queryset方法 def get_queryset(self): # 查询出所有的数据...使用DRF操作删除实际上调用的是mixins.DestroyModelMixin的destroy方法,具体执行删除的方法是perform_destroy。...即: admin能够展示被软删除的数据 admin执行删除是软删除 完整代码: #admin.py from apps.book.models import Book @admin.register...(DeleteQuerySet)() objects_all = models.Manager.from_queryset(DeleteQuerySet)() # views.py from rest_framework.viewsets
领取专属 10元无门槛券
手把手带您无忧上云