基于drf的jwt认证及用户注册实战

本文详细介绍了如何在Django REST框架(drf)中实现JWT认证,包括设置`TokenAuthentication`,集成JWT认证,自定义认证流程。同时,文章提供了用户注册的实战步骤,包括验证码发送、手机号+验证码注册以及使用信号量设置密码,最后阐述了用户注册成功后返回JWT令牌的过程。
摘要由CSDN通过智能技术生成

drf TokenAuthentication 认证

  1. settings.py增加:
INSTALLED_APPS = [
    ...
    'rest_framework.authtoken'
]

REST_FRAMEWORK = {
   
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication', # 全局设置
    ],
]

  1. 执行数据库迁移: python manage.py makemigrationspython manage.py migrate

  2. urls.py增加:

from rest_framework.authtoken import views

urlpatterns = [
    # drf 自带的认证
	path(r'api-token-auth/', views.obtain_auth_token), 
]

drf jwt认证

  1. 安装: pip install djangorestframework-jwt
  2. settings.py增加:
REST_FRAMEWORK = {
   
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        ...
    ],
]
  1. urls.py增加:
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
    # jwt自带的token认证模式
    path(r'api-token-auth/', obtain_jwt_token),
]

自定义django认证

settings.py增加

AUTHENTICATION_BACKENDS = (
    'common.auth.CustomBackend',
)

common/auth.py增加:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.db.models import Q

User = get_user_model()

class CustomBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(Q(username=username) | Q(mobile=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

用户注册实战

验证码发送

utils.sms.py

class Sms:
    def __init__(self, api_key=''):
        self.api_key = api_key
        self.single_send_url = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值