1. 创建纯净版DRF项目

Django Rest-Framework 创建纯净版项目

1. 创建项目

1.1 创建Pure Python Project

1.2 安装django/启动项目/安装DRF

pip3 install django==3.2
django-admin startproject day13 .
django-admin startproject day13 .
python manage.py startapp api
pip3 install djangorestframework==3.13.1

2.基础配置(纯净版)

2.2 settings.py

#注释掉不需要用的app
INSTALLED_APPS = [
    # 'django.contrib.admin',
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
]
#注释掉不需要用的中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # 'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

2.3 配置试图

from django.shortcuts import render,HttpResponse
from rest_framework.request import Request

# Create your views here.

def home(request):
    return HttpResponse("Welcome home!")

from rest_framework.views import APIView
from rest_framework.response import Response

class UserView(APIView):
    def get(self, request):
        return Response("返回成功")

2.4 配置路由

Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from api import views

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('home/', views.home),
    path('user/', views.UserView.as_view()),
]

2.5 启动django发现报错

问题原因
from rest_framework.request import Request
在DRF的Request中会进行 request.user request.auth验证

    def _not_authenticated(self):
        """
        Set authenticator, user & authtoken representing an unauthenticated request.

        Defaults are None, AnonymousUser & None.
        """
        self._authenticator = None

        if api_settings.UNAUTHENTICATED_USER:
            self.user = api_settings.UNAUTHENTICATED_USER()
        else:
            self.user = None

        if api_settings.UNAUTHENTICATED_TOKEN:
            self.auth = api_settings.UNAUTHENTICATED_TOKEN()
        else:
            self.auth = None

        # if api_settings.UNAUTHENTICATED_USER:
        #    self.user = api_settings.UNAUTHENTICATED_USER()
        # 判断 api_settings.UNAUTHENTICATED_USER为真时会设置
        # 进入 api_settings查看如何设置

2.5.1 设置api_settings

api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS)

def reload_api_settings(*args, **kwargs):
    setting = kwargs['setting']
    if setting == 'REST_FRAMEWORK':
        api_settings.reload()

# setting = kwargs['setting']
  # if setting == 'REST_FRAMEWORK':
  # 这两句会判断settings.py中是否含有键为REST_FRAMEWORK的字典
# 那么需要在settings.py中添加, 报错就会消失
REST_FRAMEWORK = {
    'UNAUTHENTICATED_USER': None
}

posted @ 2023-10-31 13:30  khalil12138  阅读(38)  评论(0编辑  收藏  举报