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
}