python+django+drf框架完成jwt登录接口
时间: 2023-12-15 22:04:49 浏览: 49
好的,下面是使用 Django 和 Django Rest Framework(DRF)框架完成 JWT 登录接口的基本步骤:
1. 安装必要的库
首先,我们需要安装 Django、DRF 和 jwt 库。可以使用 pip 命令来安装它们:
```
pip install django djangorestframework jwt
```
2. 配置 Django 项目
在 Django 项目中,我们需要配置一些设置来启用 DRF 和 JWT 认证。打开 `settings.py` 文件,添加如下配置:
```python
INSTALLED_APPS = [
# ...
'rest_framework',
'rest_framework.authtoken',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
}
JWT_AUTH = {
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_ALGORITHM': 'HS256',
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),
}
```
这里添加了 `rest_framework` 和 `rest_framework.authtoken` 应用,以及 DRF 和 JWT 认证的配置。需要注意的是,`JWT_SECRET_KEY` 的值需要设置为 Django 项目的 `SECRET_KEY`。
3. 编写登录接口
在 Django 项目中,我们可以使用视图函数或者类视图来编写 API 接口。这里我们使用类视图来编写登录接口。打开 `views.py` 文件,添加如下代码:
```python
from rest_framework import views, status
from rest_framework.response import Response
from rest_framework_jwt.settings import api_settings
from django.contrib.auth import authenticate
class LoginView(views.APIView):
def post(self, request):
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
return Response({'token': token})
else:
return Response({'error': 'Invalid credentials'}, status=status.HTTP_400_BAD_REQUEST)
```
这里我们创建了一个 `LoginView` 类视图,用来处理用户登录请求。在 `post` 方法中,我们从请求的参数中获取用户名和密码,然后使用 `authenticate` 函数来验证用户的身份。如果验证成功,我们使用 jwt 库中提供的函数来生成 JWT token,并返回给客户端。如果验证失败,则返回错误信息。
4. 配置 URL 路由
最后,我们需要在 Django 项目中配置 URL 路由,将登录接口映射到一个 URL 上。打开 `urls.py` 文件,添加如下代码:
```python
from django.urls import path
from .views import LoginView
urlpatterns = [
path('login/', LoginView.as_view(), name='login'),
]
```
这里我们将 `/login/` URL 映射到 `LoginView` 类视图上。
至此,我们完成了使用 Django 和 DRF 框架编写 JWT 登录接口的基本步骤。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)