【一】介绍
(1)使用原因
- 在Django中,
contrib
包包含了许多内置的app和中间件,如auth
、sessions
、admin
等,这些app在创建新的Django项目时默认是包含在内的。 - 然而,在开发RESTful API时,可能不需要使用所有这些内置app,尤其是当打算使用自定义的用户模型或不需要Django的会话管理时。在这种情况下,可以创建一个更加“纯净”的Django环境,只包含真正需要的部分。
(2)注意事项
- 版本兼容性:在使用Django和DRF时,需要注意不同版本之间的兼容性。一些新的功能和修复可能只在特定版本的框架中可用。
- 安全性:虽然Django和DRF都内置了多种安全特性,但开发者仍然需要关注安全问题,如输入验证、权限控制等。同时,也需要及时关注安全漏洞和修复。
- 性能优化:Django和DRF的性能优化可能需要一些额外的配置和调试。开发者需要根据项目的实际需求进行性能优化,以确保应用的稳定性和响应速度。
【二】创建一个Django项目
(1)创建一个新虚拟环境的项目
- 选择File,然后点击New Project
- 选择Pure Python
- 起一个项目名,选择使用新的虚拟环境,虚拟环境的位置放在新项目的根目录下
- 选择一个解释器,点击创建即可
(2)安装django和drf
-
使用terminal安装django,这里指定版本是4.2.2的版本
-
pip install django==4.2.2
-
-
使用terminal安装drf,这里使用的是默认安装,装的是最新的版本
-
pip install djangorestframework
-
-
继续使用terminal创建项目,项目名也叫做文件名,位置在当前项目的位置
-
django-admin startproject clean_drf .
-
-
最后再创建一个app用于测试,名字叫做api
-
django-admin startapp api
-
- 如果创建成功,但是pycharm不显示的话刷新项目文件
【三】修改配置文件改为纯净版
(1)app保留和删除
- 肯定要保留的app有
- rest_framework
- drf实际上是一个app,所以需要保留
- api
- 其他app,这里就一个测试api
- rest_framework
- 可保留的app
- django.contrib.contenttypes
- DRF的视图集和反向关系功能,如果不需要可以移除它
- django.contrib.staticfiles
- 静态文件管理相关,在纯API项目中是不需要的
- 但是浏览器的测试就会显示的很丑了,缺失静态资源
- django.contrib.contenttypes
(2)中间件保留和删除
- 建议保留
- django.middleware.common.CommonMiddleware
- HTTP特性,如“Forbidden”响应和“Vary”响应头等
- django.middleware.csrf.CsrfViewMiddleware
- 如果API需要处理POST、PUT、PATCH等请求,并且希望保护这些请求免受CSRF攻击,那么需要保留
- django.middleware.common.CommonMiddleware
- 其他中间件说明
- django.middleware.security.SecurityMiddleware
- 这个中间件添加了一些安全相关的HTTP头。
- django.contrib.auth.middleware.AuthenticationMiddleware
- 这个中间件处理用户认证。在纯API项目中,更倾向于使用DRF的认证机制,自定义认证方法。
- django.middleware.clickjacking.XFrameOptionsMiddleware
- 这个中间件提供点击劫持保护。
- django.middleware.security.SecurityMiddleware
(3)其他修改
-
TEMPLATES注释掉不需要的内容
-
重点:添加匿名用户信息到配置文件
-
REST_FRAMEWORK = { "UNAUTHENTICATED_USER": None, }
-
【四】测试
(0)pycharm配置
- pycharm设置中配置
- 点击File,再点击settings
- 搜索django,选择最下面的django选项
- 填写信息
- django project root:项目根目录
- Settings:配置文件
- 最后点击应用和ok
- 启动配置:很简单,跟着点就可以
(1)路由
-
总路由:
urls.py
-
from django.contrib import admin from django.urls import path, include urlpatterns = [ # path("admin/", admin.site.urls), path("api/v1/", include('api.urls')), ]
-
-
app分发路由:
api/urls.py
-
from django.urls import path from .views import TestView urlpatterns = [ path('test/', TestView.as_view(), name='test') ]
-
(2)视图
-
视图测试函数:
api/views.py
-
from rest_framework.views import APIView from rest_framework.response import Response class TestView(APIView): def get(self, request): return Response('测试成功')
-