帮我写一个django的登录jwt验证
时间: 2024-01-31 09:03:56 浏览: 24
以下是一个基本的Django JWT验证登录的示例:
1. 安装必要的库
```
pip install pyjwt
pip install django-rest-framework
```
2. 在settings.py中添加以下内容:
```python
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
JWT_AUTH = {
'JWT_SECRET_KEY': 'your-secret-key',
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY_EXPIRATION': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),
}
```
3. 创建api/views.py文件并添加以下内容:
```python
import jwt
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework_jwt.settings import api_settings
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
class LoginView(APIView):
def post(self, request):
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
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, 'user_id': user.id})
else:
return Response({'error': 'Invalid Credentials'})
```
4. 在urls.py中添加以下内容:
```python
from django.urls import path
from api.views import LoginView
urlpatterns = [
path('login/', LoginView.as_view()),
]
```
现在,您可以使用POST请求向http://localhost:8000/api/login/发送用户名和密码,然后在响应中返回令牌和用户ID。令牌可以用于后续请求的身份验证。