首页 > 其他 > 详细

drf相关问题

时间:2019-04-13 15:47:18      阅读:119      评论:0      收藏:0      [点我收藏+]

drf自定义用户认证:

登录默认 使用django的ModelBackend,对用户名和密码进行验证。但我们平时登录网站时除了用户名也可以用邮箱或手机进行登录,这就需要我们自己扩展backend

一、settings中配置

AUTHENTICATION_BACKENDS = (
    ‘users.views.CustomBackend‘,
)

users.views中新建backend,对用户名或手机进行验证

二、users/views.py

# users.views.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, 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

  

三、JWT有效时间设置

settings中配置

import datetime
#有效期限
JWT_AUTH = {
    ‘JWT_EXPIRATION_DELTA‘: datetime.timedelta(days=7),    #也可以设置seconds=20
    ‘JWT_AUTH_HEADER_PREFIX‘: ‘JWT‘,                       #JWT跟前端保持一致,比如“token”这里设置成JWT
}

 

四 添加url

from rest_framework_jwt.views import obtain_jwt_token
#...

urlpatterns = [
    ‘‘,
    # ...

    url(r‘^api-token-auth/‘, obtain_jwt_token),
]

  

drf的token与jwt的区别:

  • 保存在数据库中,如果是一个分布式的系统,就非常麻烦
  • token永久有效,没有过期时间。

 

drf相关问题

原文:https://www.cnblogs.com/shangjunnihao/p/10701186.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!