加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django REST Framework Browsable API的不同版本控制

发布时间:2020-12-20 13:14:54 所属栏目:Python 来源:网络整理
导读:我要求API不允许使用默认版本.所有客户端都需要明确指定任何资源的版本.我通过以下配置实现了这一目标: REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'oauth2_provider.ext.rest_framework.OAuth2Authentication','rest_framework.authenticati
我要求API不允许使用默认版本.所有客户端都需要明确指定任何资源的版本.我通过以下配置实现了这一目标:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.ext.rest_framework.OAuth2Authentication','rest_framework.authentication.SessionAuthentication',),'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated','DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning','ALLOWED_VERSIONS': ['2.0'],'DEFAULT_RENDERER_CLASSES': (
        'api.renderers.CustomJSONRenderer','rest_framework.renderers.BrowsableAPIRenderer',}

这很好用,但是我失去了使用可浏览API渲染器的能力:

HTTP 406 Not Acceptable
Allow: GET
Content-Type: application/vnd.acme+json
Vary: Accept

{
    "detail": "Invalid version in "Accept" header."
}

我想指出,如果对可浏览API进行了请求,则默认版本应为2.0.原因在于,在尝试使用可浏览的API时,默认值应该是最新版本,但是当以编程方式使用API??时,用户不应该暴露于重大更改,因为他们忽略了指定其版本.

如何让我的API需要一个版本但允许可浏览的API免税?

解决方法

您可以更改默认版本控制类,以便为浏览器的请求分配版本.浏览器要求的媒体类型应为text / html,而普通API调用则要求application / json.

from rest_framework.versioning import AcceptHeaderVersioning

class BrowserableAcceptHeaderVersioning(AcceptHeaderVersioning):
    def determine_version(self,request,*args,**kwargs):  
        if request.accepted_media_type == 'text/html':  
            return 'browser' 
        return super().determine_version(request,**kwargs)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读