分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Django REST framework反向生成url

发布时间:2023-09-06 01:26责任编辑:熊小新关键词:url

Django REST framework是一个基于Django的框架,REST framework又是怎么反向生成url的呢??

在前面的例子中,知道在REST framework中有6种版本控制的方式,进入任意一种版本控制的源码中,

class QueryParameterVersioning(BaseVersioning): ???""" ???GET /something/?version=0.1 HTTP/1.1 ???Host: example.com ???Accept: application/json ???""" ???invalid_version_message = _(‘Invalid version in query parameter.‘) ???def determine_version(self, request, *args, **kwargs): ???????version = request.query_params.get(self.version_param, self.default_version) ???????if not self.is_allowed_version(version): ???????????raise exceptions.NotFound(self.invalid_version_message) ???????return version ???def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra): ???????url = super(QueryParameterVersioning, self).reverse( ???????????viewname, args, kwargs, request, format, **extra ???????) ???????if request.version is not None: ???????????return replace_query_param(url, self.version_param, request.version) ???????return url

可以看到每一个版本控制的类中也都有reverse方法,由此可以了REST framework也是使用reverse的方式来反向生成url

新建一个Django项目,在项目的app中导入rest-framework

settings.py文件中做如下配置

INSTALLED_APPS = [ ???‘django.contrib.admin‘, ???‘django.contrib.auth‘, ???‘django.contrib.contenttypes‘, ???‘django.contrib.sessions‘, ???‘django.contrib.messages‘, ???‘django.contrib.staticfiles‘, ???‘app01.apps.App01Config‘, ???‘rest_framework‘,]REST_FRAMEWORK = { ???‘DEFAULT_VERSIONING_CLASS‘: ‘rest_framework.versioning.URLPathVersioning‘, ???‘VERSION_PARAM‘: "version", ???‘DEFAULT_VERSION‘: ‘V1‘, ???‘ALLOWED_VERSIONS‘: [‘v1‘, ‘v2‘]}

在urls.py文件中添加路由信息

from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ ???url(r‘^admin/‘, admin.site.urls), ???url(r‘^(?P<version>\w+)/users/$‘,views.UsersView.as_view(),name="test1"),]

views.py文件中定义UserView的类

from django.shortcuts import render,HttpResponsefrom rest_framework.views import APIViewfrom rest_framework.versioning import URLPathVersioningclass UsersView(APIView): ???def get(self,request,*args,**kwargs): ???????????????# 打印版本信息 ???????print("request.version:",request.version) ???????????????# reverse方法有一个viewname参数,在这里定义为urls.py中定义的name ???????print(request.versioning_scheme.reverse("test1",request=request)) ???????return HttpResponse("aaaa") 

此时,在浏览器中输入http://127.0.0.1:8000/v1/users/,在服务端后台打印信息如下

request.version: v1http://127.0.0.1:8000/v1/users/

再把浏览器中的url更换为http://127.0.0.1:8000/v2/users/,服务端后台的打印信息又变成了

request.version: v2http://127.0.0.1:8000/v2/users/

可以看到打印出了正确的版本,并且反向生成url也已经成功了

Django REST framework反向生成url

原文地址:http://www.cnblogs.com/renpingsheng/p/7881112.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved