REST API 官方文档:https://restfulapi.net/ 一种开发理念「是设计风格 而不是标准」 REST is acronym for REpresentational State...每一个URL代表一种「资源」 具体要对资源做什么操作,要体现在请求方式上,而不是URL上 json格式数据 text文本 图片,视频等 客户端和服务器之间,传递这种资源的某种表现形式 通过请求头中的 Content-Type...sort=name 指定排序 域名 尽量使用专用域名 前后端分离之后,前后端都有一个域名 例如 http://api.xxx.xxx 版本 在url中呈现版本号 http://api.xxx.xxx...比如:是否为json,传递的项目数据是否符合要求,有些必传参数是否携带 更新项目 将模型类转化为字典,然后返回 def put(self, request, pk): # 1.校验前端传递的pk...# 3.从前端获取json格式的数据,转化为Python中的类型 # 为了严谨性,这里需要做各种复杂的校验 # 比如:是否为json,传递的项目数据是否符合要求,有些必传参数是否携带
可以添加一个邮箱设置序列化器类;email序列化和反序列化时都用;自动生成的字段email默认是可以不传递的,我们修改为必传;将 required改为True。 2.设置登录用户的邮箱。...5.在Django配置文件中,设置邮箱配置信息。需要修改邮箱和客户端授权密码,以及收件人看到的发件人。 6.使用Django提供的模块发送邮件。...(一个省下面有多个市,一个市下面有多个区县) ID(地区ID) name(地区名称) parent_id(父级地区ID) 200001 北京市 NULL 200010 北京市 200001 200110...Ppk>\d+)/ 参数: 通过url地址传递省id 响应: [ { "id":"市id", "name":"市名称"...Ppk>\d+)/ 参数: 通过url地址传递地区id 响应: { "id":"地区id", "name":"地区名称", "subs"
2.2使用缓存 在Django REST framework中使用缓存,可以通过 drf-extensions扩展来实现。...Ppk>\d+)/ 参数: 通过url地址传递地址的pk 通过请求头传递jwt token 响应: 状态码204 业务逻辑: 1.根据pk获取指定的地址数据。...2.将地址的is_deleted设置为True。 3.返回应答。 3.2.4修改登录用户指定地址 API: PUT /addresses/(?...Ppk>\d+)/status/ 参数: 通过url地址传递地址的pk 通过请求头传递jwt token 响应: { "message":"OK" }...不止一个。 4.3.3详细介绍 详细介绍请查看『我是个链接』一文。
URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态 3.REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer...api.baidu.com/books | api.baidu.com/books/(pk) 5) 请求方式有多种,用一个url处理如何保证不混乱 - 通过请求方式标识操作资源的方式.../books get 获取所有 /books post 增加一个(多个) /books/(pk) delete 删除一个...(客户端提供改变的属性) DELETE :从服务器删除资源 过滤,通过在url上传参的形式传递搜索条件 https://api.example.com/v1/zoos?...- 局部 - 整体 ---- 十大接口 ## 在上面的6个基础的接口之上还有4个 群增数据 群删数据 整体群改 局部群改 ---- 修改url 之前写的url没有办法实现获取一个或者获取多个
今天开始了django-rest-framework的学习 *** 其实api写起来的话要比前后端一起写要简单很多,因为你不需要关心前端怎么写,主要心思放在后端上面即可,前端的话随便找个模板,然后用...首先需要导入两个包,一个method_decorator,还有一个是csrf_exempt *** from django.views.decorators.csrf import csrf_exempt...接口传递进来的数据 pk=kwargs.get(‘pk’) print(kwargs.get(‘pk’)) if not pk: # 如果pk为空就查询全部 book_list = [] all...一个就查询一个, 这里有个查询技巧,就是values直接把查询的值转化成字典,然后取出,必须要这步,不然就会报错了 a = models.Bookinfo.objects.filter(pk=pk)...Serializer 序列化器 from rest_framework.views import APIView # 继承自View的api接口 from rest_framework.response
一是 action 装饰器,它用来装饰一个视图集中的方法,被装饰的方法会被 django-rest-framework 的路由自动注册为一个 API 接口。...视图集中所有以上提及的以标准动作命名的方法,都会被 django-rest-framework 的路由自动注册为标准的 API 接口。...django-rest-framework 默认只能识别标准命名的视图集方法并将其注册为 API,但我们可以添加更多非标准的 action,而为了让 django-rest-framework 能够识别这些方法...设置为 True,自动注册的接口 URL 中会添加一个 pk 路径参数(请看下面的示例),否则不会。 url_path:自动注册的接口 URL。...如果我们设置 detail 为 True,那么生成的接口路由就是 /posts/int:pk>/archive/dates/,生成的 URL 中就会多一个 pk 路径参数。
构建更复杂的应用程序时可以使用的一些工具包括: React,一个JavaScript框架,允许开发人员为他们的REST API后端构建Web和本地前端。...Django,一个免费的开源Python Web框架,遵循模型视图控制器(MVC)软件架构模式。 Django REST框架,一个功能强大且灵活的工具包,用于在Django中构建REST API。...在本教程中,您将使用React,Django和Django REST Framework构建一个带有单独REST API后端和前端的现代Web应用程序。...第6步 - 使用Axios使用REST API 在此步骤中,我们将安装Axios,即我们将用于进行API调用的HTTP客户端。我们还将创建一个类来使用我们创建的API端点。...结论 在本教程中,您使用Django和React创建了一个演示应用程序。您使用Django REST框架构建REST API,使用Axios来使用API,使用Bootstrap 4来构建CSS样式。
项目搭建 创建一个新的Django项目,叫做 tutorial,然后开始一个新的app叫做 quickstart。.... # 如有额外需要, 我也为可视化API添加了登陆URLs. urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth.../', include('rest_framework.urls', namespace='rest_framework')) ] 因为我们用了视图组(viewsets)而不是多个视图,我们可以为我们的...同样的,如果我们需要对API URLs进行单独控制,我们可以使用普通基于类(class based)的视图,并详细的配置每个URL。 最后,我们为可视化API,添加登陆/登出视图。...django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'task', ) 配置 rest_api
源码繁琐,多说无益,耐心细读官方文档: https://www.django-rest-framework.org/ 个人总结: REST是一种软件架构设计风格,不是标准,也不是具体的技术实现,只是提供了一组设计原则和约束条件...DRF(Django RestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个Django App,所以,本质上,它是一个Django App。...,many默认为False,如果返回的数据是一个列表嵌套字典的多个对象集合,需要改为many=True 返回:将序列化对象的data属性返回即可 {{ 实践代码 }} --post接口设计 url...程序启动,开始初始化,获取配置信息,获取视图类并加载到内存中,获取url及视图类的对应关系 开始绑定视图类和url的对应关系,执行as_view()方法 as_view()方法被执行的时候传递了参数,为字典形式...P\d+),所以此时的调用方式为view(request, pk=id) 视图函数中有一行self.kwargs = kwargs,所以pk已经被视图函数找到了 视图函数返回self.dispatch(
需要先创建一个serializer.py文件,当然文件名可以自定义,与models文件在同一级即可 # 序列化组件,为每一个model类,提供一套序列化工具类 from rest_framework...# 序列化组件,为每一个model类,提供一套序列化工具类 from rest_framework import serializers class UserSerializer(serializers.Serializer...obj.get_gender_display()  在序列化过程中,我们可以删除不想显示的字段,就比如说是gender,这样的话,就可以把gender_value改成gender了 # 序列化组件,为每一个...,在前台发现点击无法直接看到图片,所以我们可以修改属性,传递一个完整路径 # 序列化组件,为每一个model类,提供一套序列化工具类 from rest_framework import serializers...django.contrib.messages', 'django.contrib.staticfiles', 'api.apps.ApiConfig', 'rest_framework
Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优化改造...Response可以根据客户端的请求render合适的content type: return Response(data) 我摘取了rendered_content()函数的代码: @property...import status from rest_framework.decorators import api_view from rest_framework.response import Response...当然,会技术是个大前提,对技术的学习不能停,比如Django REST framework。...参考资料: https://www.django-rest-framework.org/tutorial/2-requests-and-responses/
二、常用的Web开发框架 Python有多个流行的Web开发框架,最常用的是Django和Flask。...开发 RESTful API是一种设计网络应用的风格,通过定义资源和操作,使得客户端可以通过HTTP请求与服务器进行通信。...使用Django REST Framework开发RESTful API Django REST Framework是一个功能强大的工具集,用于构建Web API。...以下示例展示了如何使用Django REST Framework开发RESTful API: 1.1 安装Django REST Framework 可以通过pip命令安装Django REST Framework...[ path('', views.post_list, name='post_list'), path('int:pk>/', views.post_detail, name='post_detail
) 对互联网上的任意东西都视为资源,他认为一个url就是一个资源 比如:http://www.xxx.com/get_user/ 二、了解什么是API 1、什么是API?...接口有两个用途: - 为别人提供服务 - 前后端分离,一个写vue,一个写后端,他们之间都是通过ajax请求 三、RESTful API设计 网络应用程序,分为前端和后端两个部分。...即获取数据 POST(CREATE):在服务器新建一个资源。 即添加数据 PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。...pass def delete(self,request,pk): pass 基于django实现的API许多功能都需要我们自己开发,这时候djangorestframework...下面我们来看看基于Django Rest Framework框架实现 五、基于Django Rest Framework框架实现 1、自定义认证规则 详见链接 class MyAuthtication
可以在rest_framework.settings 查找所有的drf默认配置项。其中配置响应格式的配置项为: ? 在局部配置使用,即只对某一个视图类配置生效。...', # json渲染器 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器 ) } 1.2.1 构造方式...; content_type: 响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数。...GenericAPIView 继承自APIVIew,主要增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时,可搭配一个或多个Mixin扩展类。...提供的关于序列化器使用的属性与方法 属性:serializer_class 指明视图使用的序列化器 方法: get_serializer_class(self) : 当出现一个视图类中调用多个序列化器时
先来看看 wikipedia: GraphQL 是一个开源的,面向 API 而创造出来的数据查询操作语言以及相应的服务端运行环境。...说的没错,所以我们在阐述这些问题的时候,也会附上我们当前基于 REST 的解决方案。 Overfetching: 假如我们定义了一个 /comments 的 API,输出评论列表。...以 django-rest-framework 为例,我们都会定义一个 Serializer 来声明它的输入和输出。...在 REST 中,为了这个需求我们可能会额外为 /users 增加一个参数 with_comments # 查询 users,并限制结果返回字段 /api/users?...适合成熟的客户端开发团队,反之 REST 是更好的选择 Django 相关的生态建设并不完善,没有一个足够强大、开箱即用的整合方案 由于查询并不是基于 Uri 维度,会给周边配套的生态—— 监控、日志等
https://www.django-rest-framework.org/ https://q1mi.github.io/Django-REST-framework-documentation/ DRF...Ppk>[0-9]+)/$',views.SnippetDetail.as_view()), url(r'^api-auth/', include('rest_framework.urls',...Ppk>[0-9]+)/$',views.UserDetail.as_view()), url(r'^api-auth/', include('rest_framework.urls', namespace...initialize_request(self, request, *args, **kwargs): 确保请求对象传递给处理程序方法是request的一个实例,而不是django的HttpRequest...(详情见官网http://www.django-rest-framework.org/api-guide/generic-views/) get_object():获取某一个具体的model实例对象。
Django REST Framework (DRF)是一个开源的Web框架,它提供了用于构建RESTful API的工具和功能。...下面是一个基本的DRF路由配置示例:from django.urls import pathfrom rest_framework.urlpatterns import format_suffix_patternsfrom...,我们从Django的urls模块中导入path函数,以及DRF的format_suffix_patterns函数。...第二个URL模式是/users/int:pk>/,它使用一个名为“pk”的整数参数,并与UserDetail视图类相关联,并命名为user_detail。...这个函数可以将URL后缀添加到URL模式中,从而允许客户端在请求中指定响应的内容类型(如JSON、XML等)。
反序列化,完成数据的校验功能 为方便理解后面序列化器中的字段,我们先在创建的APP中的models.py 建立一个数据库模型类。...为使代码清晰、方便管理,我们可以新建一个ser.py 文件来存储序列化器的代码。...开发restful api时,序列化器会帮我们把模型数据转换成字典。 drf提供的视图会帮我们把字典转换成json,或者把客户端发送过来的数据转换字典。...Ppk>\d+)', views.BookView.as_view()), ] 即当所有请求url 为127.0.0.1:8080/books/1 的形式时,会匹配到视图类BookView ,并将pk...的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。
前言 大家好,我是安果!...为了反爬或限流节流,后端编写接口时,大部分 API 都会进行权限认证,只有认证通过,即:数据正常及未过期才会返回数据,否则直接报错 本篇文章以 Django 为例,聊聊后端 JWT 接口认证的操作流程...「 HS256 」,令牌类型可以设置为「 JWT 」 Payload 用于设置需要传递的数据,包含:iss 签发人、exp 过期时间、iat 签发时间等 Signature 用于对 Header 和 Payload...": user.pk, "exp": timestamp}, settings.SECRET_KEY,'HS256') 接着,编写一个认证类 该类继承于「 BaseAuthentication 」基类...import settings from django.contrib.auth import get_user_model from rest_framework import exceptions
REST framework 在Django框架基础上,进行二次开发 用于构建Restful API 简称为DRF框架或REST freamwork框架 特性 提供了强大的Serializer序列化器...', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'projects.apps.ProjectsConfig...views.ProjectViewSet)urlpatterns = [ path('project/', views.ProjectsList.as_view()), path('project/int...:pk>/', views.ProjectDetail.as_view()),]urlpatterns += router.urls# LearnDjango/urls.pyfrom django.contrib...ProjectSerializer(instance=project_qs, many=True) return JsonResponse(serializer.data, safe=False) 设置 many为