Django drf用户配置

本文详细解析了REST_FRAMEWORK配置中的DEFAULT_AUTHENTICATION_CLASSES, UNAUTHENTICATED_USER与UNAUTHENTICATED_TOKEN参数的作用及意义,帮助读者理解Django REST framework中认证机制的核心配置。
REST_FRAMEWORK = {
    # 'DEFAULT_AUTHENTICATION_CLASSES': ['apps.api.utils.auth.FirstAuthtication', 'apps.api.utils.auth.Authtication'],
    'DEFAULT_AUTHENTICATION_CLASSES': ['apps.api.utils.auth.Authtication'],
    'UNAUTHENTICATED_USER': None,
    'UNAUTHENTICATED_TOKEN': None,
}
  • DEFAULT_AUTHENTICATION_CLASSES类配置认证类
  • UNAUTHENTICATED_USER是authenticate()函数没有返回request.user的默认值
  • UNAUTHENTICATED_TOKEN是authenticate()函数没有返回request.auth的默认值
### 配置 WebSocket 在 Django REST Framework (DRF) 为了在 DRF 项目中实现 WebSocket 功能,可以借助于 `Django Channels` 和 `Django Channels Rest Framework` 这两个库。前者扩展了 Django 的功能使其支持异步协议如 WebSocket;后者则提供了构建基于这些协议的 API 所需的功能。 #### 安装依赖 首先,在项目的虚拟环境中安装必要的 Python 包: ```bash pip install channels djangochannelsrestframework ``` 接着修改 `INSTALLED_APPS` 设置来加入新组件并指定 ASGI 应用入口: ```python # settings.py INSTALLED_APPS = [ ... "djangochannelsrestframework", ] ASGI_APPLICATION = 'your_project_name.asgi.application' ``` #### 创建消费者类 定义一个继承自 `AsyncWebsocketConsumer` 或者更高级别的 `GenericAsyncAPIConsumer` 来处理传入的消息事件流。这里展示的是使用 `GenericAsyncAPIConsumer` 实现的例子[^1]: ```python from djangochannelsrestframework import permissions from djangochannelsrestframework.generics import GenericAsyncAPIConsumer from .models import YourModel from .serializers import YourSerializer class ChatConsumer(GenericAsyncAPIConsumer): queryset = YourModel.objects.all() serializer_class = YourSerializer permission_classes = (permissions.IsAuthenticated,) async def connect(self): await self.accept() async def disconnect(self, close_code): pass @action() async def send_message(self, text=None, **kwargs): message_data = {"sender": self.scope["user"].id, "content": text} new_message = await self.create(message_data) await self.send_json(new_message) ``` 上述代码片段展示了如何创建一个简单的聊天室应用中的消息发送逻辑。当客户端连接到服务器时会触发 `connect()` 方法接受新的 WebSockets 连接,并且每当收到带有特定动作名称的数据包就会调用相应的方法(在这个例子中是 `send_message`)。最后通过 `create()` 函数保存一条记录至数据库并将结果返回给前端显示出来。 #### URL 路由设置 为了让应用程序知道哪些路径应该被哪个视图函数所处理,还需要编辑路由配置文件 (`routing.py`) 将其指向上面编写的 Consumer 类实例: ```python from django.urls import re_path from chat.consumers import ChatConsumer websocket_urlpatterns = [ re_path(r'^ws/chat/(?P<room_name>\w+)/$', ChatConsumer), ] ``` 此部分指定了任何匹配正则表达式的 WebSocket 请求都将转发给名为 `ChatConsumer` 的对象进行进一步处理。 #### 启动开发服务器 确保已经按照官方文档完成了所有其他必要步骤之后就可以运行命令启动服务端程序了: ```bash python manage.py runserver ``` 此时如果一切正常的话应当可以在浏览器控制台里看到类似这样的日志输出:“Starting development server at http://127.0.0.1:8000/”,这表明 WebSocket 已经成功集成到了现有的 DRF 架构之中[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值