Je suis un développeur chinois. J'ai travaillé à Hamamatsucho, Tokyo pendant environ un an. Ravi de vous rencontrer.
djangorestframework-jwt est un package Django qui facilite l'authentification des utilisateurs et l'authentification des jetons.
Cet article vous montrera comment créer une API à l'aide de djangorestframework-jwt.
environnement OS:Win10 or CentOS Python:3.7 Django:3.1.2
Vous avez besoin de ces deux lilibrari.
$ pip install djangorestframework
$ pip install djangorestframework-jwt
① Modifiez ou ajoutez ces codes dans settings.py
settings.py
import datetime
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # <--ajouter
'my_app'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', <--Commenter
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
#Cadre d'authentification
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated'
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication'
)
}
JWT_AUTH = {
#Définir la durée de validité du jeton
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=60 * 60 * 2)
}
② Insérez le code dans urls.py
Il y a deux API ici.
userLogin est une API pour l'enregistrement et l'authentification des utilisateurs. Le frontal est une API qui envoie le nom d'utilisateur et le mot de passe au back-end par POST, l'enregistre, puis obtient le jeton. (Vous pouvez utiliser le super utilisateur admin django comme utilisateur et mot de passe.)
getInfo est une API permettant d'obtenir des informations à l'aide de jetons après l'enregistrement de l'utilisateur.
urls.py
from django.urls import path
from my_app import views
urlpatterns = [
path('userLogin/', views.user_login),
path('getInfo/', views.get_info)
]
③ Insérez le code dans views.py
views.py
import json
from django.http import JsonResponse
from django.contrib.auth import authenticate, login
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework_jwt.settings import api_settings
def user_login(request):
obj = json.loads(request.body)
username = obj.get('username', None)
password = obj.get('password', None)
if username is None or password is None:
return JsonResponse({'code': 500, 'message': 'Nombre de demandes'})
is_login = authenticate(request, username=username, password=password)
if is_login is None:
return JsonResponse({'code': 500, 'message': '账 numéro ou secret 蔙 误'})
login(request, is_login)
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(is_login)
token = jwt_encode_handler(payload)
return JsonResponse(
{
'code': 200,
'message': 'Inscription réussie',
'data': {'token': token}
}
)
#Accorder l'authentification par jeton à l'API
@api_view(['GET'])
@permission_classes((IsAuthenticated,))
@authentication_classes((JSONWebTokenAuthentication,))
def get_info(request):
data = 'some info'
return JsonResponse(
{
'code': 200,
'message': 'success',
'data': data
}
)
Tout d'abord, utilisez userLogin dans POST pour obtenir un jeton.
Ensuite, utilisez getInfo avec Get pour demander JWT + le jeton obtenu précédemment dans le paramètre Authorization de Headers.
Exemple de frontal
token = 'abcdefg123456789'
authorization = 'JWT' + token
Cela permettra à getInfo d'être demandé.
Recommended Posts