drf 在django中的配置

纯净版django

建立一个纯净版的Django项目,项目目录如下,其实目前这个阶段不用纯净版也好像没有太大区别。

markdown 复制代码
drf_study/$
├── apps/
│   └── api/
│       ├── migrations/
│       ├── __init__.py
│       ├── admin.py
│       ├── apps.py
│       ├── models.py
│       ├── tests.py
│       └── views.py
├── drf_study/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py

纯净版的Django项目需要再setting.py中去修改配置内容,主要需要修改INSTALLED_APPSMIDDLEWARETEMPLATES三个配置。

python 复制代码
INSTALLED_APPS = [  
    # 'django.contrib.admin',  
    # 'django.contrib.auth',    
    # 'django.contrib.contenttypes',    
    # 'django.contrib.sessions',    
    # 'django.contrib.messages',    
    'django.contrib.staticfiles',  
    'rest_framework',  
    'apps.api',  
]

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',  
]

TEMPLATES = [  
    {  
        'BACKEND': 'django.template.backends.django.DjangoTemplates',  
        'DIRS': [],  
        'APP_DIRS': True,  
        'OPTIONS': {  
            'context_processors': [  
                'django.template.context_processors.request',  
                # 'django.contrib.auth.context_processors.auth',  
                # 'django.contrib.messages.context_processors.messages',            ],  
        },  
    },  
]

初步使用报错

像下面这样初步使用drf会报一个错。

python 复制代码
# drf_study/urls.py
from django.urls import path  
from apps.api import views  
  
urlpatterns = [  
    path('info/', views.info, name='info'),  
    path('home/', views.HomeView.as_view(), name='home'),  
]


# drf_study/apps/api/views.py
from rest_framework.response import Response  
from rest_framework.views import APIView

class HomeView(APIView):  
    def get(self, request):  
        context = {  
            'status': 'success'  
        }  
        return Response(context)
        
# 报错

报错信息如下:

报错原因是在django中缺少对drf的匿名用户的配置。而这个配置的来源是来源于rest_framework.request.Request中定义的这个歌_not_authenticated函数。这里面的api_settings.UNAUTHENTICATED_USER它是从django的auth这个app中来的,而这个恰恰是因为纯净版django被我注释了的。

所以需要在django的setting.py模块中去配置drf自己的配置。

python 复制代码
# rest_framework/setting.py

'UNAUTHENTICATED_USER': 'django.contrib.auth.models.AnonymousUser',  
'UNAUTHENTICATED_TOKEN': None,

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

在django中增加drf配置

drf在django中配置都需要在setting.py文件中的REST_FRAMEWORK的字典中,新建一个REST_FRAMEWORK字典。注意这个字典的名称一定是大写,不能小写。

python 复制代码
REST_FRAMEWORK = {  
    'UNAUTHENTICATED_USER': None  
}
相关推荐
临沂GEO2 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白2 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲3 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)5 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机5 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6926 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy6 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽7 小时前
真实即粗糙,光滑是伪造
人工智能·python
一次旅行7 小时前
Attention机制从数学到工程:拆解缩放点积+多头注意力|附可运行PyTorch实现与踩坑指南
人工智能·pytorch·python
泡干脆面就番茄7 小时前
NumPy 科学计算完全指南:从数组创建到广播机制
python·numpy