Django的配置文件settings.py文件中的REST_FRAMEWORK字段有什么用
时间: 2024-04-06 14:30:05 浏览: 21
在Django项目中,REST_FRAMEWORK字段是用来配置Django REST framework的选项和设置的。Django REST framework是一个强大的Web API框架,提供了许多有用的工具和功能,可以简化API的开发和维护。
在REST_FRAMEWORK字段中,可以配置很多选项,如API渲染器、认证和权限、分页、过滤器、版本控制等。这些选项可以根据具体的需求进行配置,以满足项目的要求。
例如,可以通过设置DEFAULT_RENDERER_CLASSES来指定API的渲染器,可以通过设置DEFAULT_AUTHENTICATION_CLASSES和DEFAULT_PERMISSION_CLASSES来指定API的认证和权限,可以通过设置DEFAULT_PAGINATION_CLASS和PAGE_SIZE来指定API的分页等。
总之,REST_FRAMEWORK字段是一个非常重要的配置选项,可以帮助我们轻松地构建和维护高质量的API。
相关问题
请你结合上面的回答,告诉我使用Django+rest_framework_jwt进行token签发和token续签的具体流程
当用户通过Django REST framework进行登录时,服务器会使用Django自带的认证系统验证用户的身份,并生成一个JWT(JSON Web Token)作为用户的身份凭证。JWT是一个加密的字符串,其中包含了用户的身份信息和一些元数据,例如过期时间等。
在使用rest_framework_jwt进行token签发和token续签时,我们可以采用以下流程:
1.安装rest_framework_jwt
在Django项目中安装rest_framework_jwt库,可以使用pip命令进行安装:
```
pip install djangorestframework-jwt
```
2.在settings.py中配置rest_framework_jwt
在Django项目的settings.py文件中添加rest_framework_jwt相关配置,例如:
```
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_LEEWAY': 0,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
```
3.生成JWT
在用户认证通过后,可以通过调用rest_framework_jwt库中的jwt_encode_handler()方法生成JWT:
```
from rest_framework_jwt.utils import jwt_encode_handler
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
```
其中,jwt_payload_handler()方法用于生成JWT的payload,其中包含了用户的身份信息和一些元数据,例如过期时间等。
4.返回JWT
将生成的JWT返回给客户端,客户端在后续的请求中可以通过HTTP请求头中的Authorization字段携带JWT进行身份验证。
5.续签JWT
当JWT即将过期时,可以通过调用rest_framework_jwt库中的jwt_refresh_handler()方法进行续签:
```
from rest_framework_jwt.utils import jwt_refresh_handler
new_token = jwt_refresh_handler(token)
```
其中,token为即将过期的JWT,new_token为续签后的新JWT。
以上就是使用Django+rest_framework_jwt进行token签发和token续签的具体流程。
Django rest framework后端开发文档
Django REST framework是一个基于Django的强大Web API框架,可以帮助开发者快速构建RESTful API。下面是Django REST framework后端开发的文档。
## 安装
可以通过pip安装Django REST framework:
```
pip install djangorestframework
```
## 配置
1. 将`rest_framework`添加到`INSTALLED_APPS`中:
```python
INSTALLED_APPS = [
...
'rest_framework',
...
]
```
2. 添加REST framework的默认设置到`settings.py`文件中:
```python
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
}
```
## 序列化
Django REST framework的核心是序列化。它允许将复杂的Python数据结构转换为JSON、XML等格式。
### 创建序列化器
1. 创建一个`serializers.py`文件,并导入`serializers`:
```python
from rest_framework import serializers
from .models import Book
```
2. 创建一个`BookSerializer`类:
```python
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
```
`fields`属性指定了需要序列化的模型字段。
### 使用序列化器
在视图中使用序列化器,可以将模型转换为JSON格式的响应。
```python
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
class BookList(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
```
## 视图
Django REST framework提供了多种视图,包括基于函数的视图和基于类的视图。
### 基于函数的视图
1. 创建一个`views.py`文件,并导入Django REST framework的视图:
```python
from rest_framework.decorators import api_view
from rest_framework.response import Response
```
2. 创建一个`book_list`函数:
```python
@api_view(['GET', 'POST'])
def book_list(request):
if request.method == 'GET':
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
```
`@api_view`装饰器表示该视图只接受`GET`和`POST`请求。`BookSerializer`用于将模型转换为JSON格式的响应。
### 基于类的视图
1. 创建一个`views.py`文件,并导入Django REST framework的视图:
```python
from rest_framework import generics
```
2. 创建一个`BookList`类:
```python
class BookList(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
```
`queryset`属性指定需要序列化的模型,`serializer_class`属性指定使用的序列化器。
## 路由
Django REST framework的路由是基于Django的URLconf的。可以使用Django REST framework自带的`DefaultRouter`或者自定义路由。
### 使用`DefaultRouter`
1. 创建一个`urls.py`文件,并导入`DefaultRouter`:
```python
from rest_framework.routers import DefaultRouter
```
2. 在`views.py`中导入视图,并创建一个`router`:
```python
from .views import BookList
router = DefaultRouter()
router.register(r'books', BookList)
```
`r'books'`是路由名称,`BookList`是视图类。
3. 在`urls.py`中将路由添加到URLconf中:
```python
from django.urls import path, include
urlpatterns = [
path('', include(router.urls)),
]
```
### 自定义路由
1. 创建一个`urls.py`文件,并导入视图:
```python
from django.urls import path
from .views import book_list
```
2. 创建一个URLconf:
```python
urlpatterns = [
path('books/', book_list, name='book-list'),
]
```
`book_list`是一个基于函数的视图。
3. 在主URLconf中包含自定义路由:
```python
from django.urls import path, include
urlpatterns = [
path('', include('myapp.urls')),
]
```
## 认证和权限
Django REST framework提供了多种认证和权限选项,可以通过`settings.py`中的`DEFAULT_AUTHENTICATION_CLASSES`和`DEFAULT_PERMISSION_CLASSES`设置默认选项。
### 认证
Django REST framework提供了多种认证选项,包括SessionAuthentication、BasicAuthentication和TokenAuthentication等。
```python
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.TokenAuthentication',
],
}
```
### 权限
Django REST framework提供了多种权限选项,包括AllowAny、IsAuthenticated和IsAdminUser等。
```python
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.IsAdminUser',
],
}
```
## 参考资料
- [Django REST framework官方文档](https://www.django-rest-framework.org/)
- [Django REST framework教程](https://www.django-rest-framework.org/tutorial/1-serialization/)