Django Rest框架认证组件详解及实战
162 浏览量
更新于2024-08-31
收藏 1MB PDF 举报
本文主要介绍了Django Rest框架(DRF)认证组件的深入理解和实际用法。首先,作者指出在DRF中,`dispatch` 方法会调用`initial` 方法进行版本初始化,这个过程中包含了认证、权限和频率控制组件。认证组件负责处理用户身份验证,返回的是`request.user`,由于`initial` 方法在新的`Request` 对象创建后执行,因此这里的`request.user` 是一个新的请求上下文中的用户。
为了实现认证功能,开发人员需要自定义一个或多个认证类,并在`settings.py` 或视图层中指定`authentication_classes` 参数。例如:
```python
# 视图配置
class MyView(APIView):
authentication_classes = ["blog.auth.MyAuth",]
# 配置文件中的全局认证设置
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'blog.auth.MyAuth',
],
}
```
在实际操作中,开发者需要准备数据库模型,如`UserInfo` 模型,用于存储用户信息,包括用户名、密码和可能的token。一个简单的数据库示例包括:
```python
# models.py
class UserInfo(models.Model):
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
token = models.UUIDField(null=True, blank=True)
```
接着,自定义认证类需要继承自`rest_framework.authentication.BaseAuthentication` 并实现必要的方法,如验证用户凭据和获取用户的认证信息。这通常涉及检查请求头中的token或与数据库交互来验证用户身份。
例如,一个简单的认证类可能如下所示:
```python
from rest_framework.authentication import BaseAuthentication
from .models import UserInfo
class MyAuth(BaseAuthentication):
def authenticate(self, request):
auth = request.META.get('HTTP_TOKEN')
user = UserInfo.objects.filter(token=auth).first()
if user and self.verify_password(user.pwd, request.data.get('password')):
return (user, None)
return None
def verify_password(self, stored_password, provided_password):
# 自定义密码验证逻辑
pass
```
本文详细探讨了如何在Django Rest框架中设置认证组件,包括自定义认证类、配置认证方式、数据库模型设计以及认证过程的实现。开发者需要理解认证类的结构和接口,确保用户安全地访问API资源。
2018-07-17 上传
2019-05-16 上传
点击了解资源详情
点击了解资源详情
2018-09-03 上传
2020-12-26 上传
2018-07-26 上传
点击了解资源详情
点击了解资源详情
weixin_38602982
- 粉丝: 7
- 资源: 977
最新资源
- Douban-Movie:仿豆瓣电影页面
- 电子功用-基于幅值调制视觉诱发电位脑-机接口方法
- ParallelRepastCore:将 RePast3 与并行模型一起使用的两个精简示例
- column-encryption:使用SQL Always Encrypted库演示列(字段)级加密模式的示例应用程序
- Python库 | ms_active_directory-1.10.1.tar.gz
- fabric::coat::socks:功能齐全的简约降价编辑器。 - 即将推出
- assignment3p1
- 亚马逊快速搜索-crx插件
- Python库 | mssql_dataframe-1.0.0.tar.gz
- pyca-cryptography
- bi-dashboard:有货数据可视化工具
- 淘客喵佣金猎手-crx插件
- gt_fsf_hw10_team_profile_generator:此分配要求我们利用节点js和相关的npm包根据用户输入创建一些特定HTML内容。 我们还必须使用npm Jest创建单元测试,并在演练视频中演示其功能
- CodeIdea:一些有用或好的代码可以解决我的问题
- Laravel_Ecommerce:电子商务代码逐步
- neilrathi.github.io:Github Pages网站