python (django) 6. version

1. settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES':  ['api.authenticate.StudentAuthenticate'],
    'DEFAULT_PERMISSOIN_CLASSES': ['api.permission.GradeOnePermisson'],
    'UNAUTHENTICATED_USER': None,  # request.user
    'UNAUTHENTICATED_TOKEN': None,  # request.auth
    'DEFAULT_THROTTLE_CLASSES': ['api.throttle.StudentThrottle', 'api.throttle.AnonymousThrottle'],
    'DEFAULT_THROTTLE_RATES': {
        'anonymous': '2/m',
        'student': '5/m',
    },
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1',
    'ALLOWED_VERSIONS': ['v1', 'v2', 'v3'],
    'VERSION_PARAM': 'version',
}

2. urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

urlpatterns = [
    path('admin/', admin.site.urls),
    # url(r'^api/v1/', include('api.urls')),
    url(r'^api/', include('api.urls', namespace='api')),

]

3. api/urls.py

# -*- coding: utf8 -*-
from django.conf.urls import url
from .views import AuthView, TokenView, VersionView


app_name = 'api'

urlpatterns = [
    url(r'auth/', AuthView.as_view()),
    url(r'version/token/', TokenView.as_view({'get': 'get'}), name='version'),
    url(r'(?P<version>[v1|v2|v3]+)/token/$', TokenView.as_view({'get': 'get'}), name='version'),
]

4 api/views.py

from api.authenticate import StudentAuthenticate
from api.permission import GradeOnePermission
from api.serializers import StudentSerializer
from rest_framework.versioning import QueryParameterVersioning, URLPathVersioning
from django.urls import reverse


class TokenView(GenericViewSet):

    authentication_classes = []
    # permission_classes = [GradeOnePermission]
    permission_classes = []
    parser_classes = [JSONParser, ]
    throttle_classes = []
    # versioning_class = QueryParameterVersioning

    def get(self, request, *args, **kwargs):
        name = request.query_params.get('name')
        try:
            stu = Student.objects.get(name=name)
        except Student.DoesNotExist:
            raise ParseError(_('Student does not include this name'))

        student = StudentSerializer(instance=stu, many=False)
        # print(student)
        # print(type(student))
        # print(student.data)
        # print(type(student.data))
        #
        # stu_json = json.dumps(student.data, ensure_ascii=False)

        version = request.version
        print(version)
        drf_url = request.versioning_scheme.reverse(viewname='api:version', request=request)
        django_url = reverse(viewname='api:version', kwargs=kwargs)

        res = {
            'code': 200,
            'version': version,
            'drf_url': drf_url,
            'django_url': django_url,
            'data': student.data
        }

        return Response(data=res)

5. postman

(1)

url: http://127.0.0.1:8011/api/v2/token/?token=dbfa6b230b9ca22302a00ea918346f86&name=student1

method: get

return:

{
    "code": 200,
    "version": "v2",
    "drf_url": "http://127.0.0.1:8011/api/v2/token/",
    "django_url": "/api/v2/token/",
    "data": {
        "id": 4,
        "name": "student1"
    }
}

(2)

url: http://127.0.0.1:8011/api/version/token/?token=dbfa6b230b9ca22302a00ea918346f86&name=student1&version=v3

method: get

return: 

{
    "code": 200,
    "version": "v3",
    "drf_url": "http://127.0.0.1:8011/api/version/?version=v3",
    "django_url": "/api/version/",
    "data": {
        "id": 4,
        "name": "student1"
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据您提供的信息,您使用的是 Windows 上的 Python 3.7 版本。该版本使用的 SQLite 版本是 3.28.0,该版本不支持 JSON 字段。 要解决这个问题,您可以考虑以下几种方法: 1. 升级到支持 JSON 字段的 SQLite 版本:您可以尝试升级到一个支持 JSON 字段的 SQLite 版本。您可以从 SQLite 官方网站(https://www.sqlite.org/download.html)下载最新版本的预编译二进制文件并安装。然后,将 Django 的数据库配置指向新安装的 SQLite 版本。 2. 使用其他数据库后端:如果您的应用程序需要使用 JSON 字段,您可以考虑切换到其他支持 JSON 字段的数据库后端,例如 PostgreSQL 或 MySQL。在切换数据库后端之前,请确保您已经备份了现有的数据,并且您的应用程序代码不依赖于特定于 SQLite 的功能。 3. 使用第三方扩展:如果您不想更改数据库后端,或者无法升级 SQLite 版本,您可以考虑使用第三方扩展来添加对 JSON 字段的支持。例如,django-jsonfield(https://github.com/dmkoch/django-jsonfield)是一个流行的 Django 扩展,它允许您在 SQLite 中使用 JSON 字段。您可以按照该扩展的文档进行安装和配置。 请注意,根据 Django 版本和其他依赖项的要求,某些解决方案可能不适用。因此,请根据您的具体情况选择适合您的解决方案,并确保在做出任何更改之前备份重要数据。 阅读有关该问题的更多信息:https://code.djangoproject.com/wiki/JSON1Extension [Windows 部分]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值