drf中添加django自带用户登录认证

在drf中添加django自带的用户认证来鉴权用户

  1. drf中需要先建自定的has_permission
  2. 将这个鉴权类引入到所需项目的viewset中
  3. 将django自带的auth,User体系功能代码引入到自定义鉴权中

在url中定义三个用户鉴权方法路由(注册,登录,退出登录)

urlpatterns = [
    path('drf/', include(router.urls)),
    path('login/', user_login.login),
    path('register/', user_login.register),
    path('sign_out/', user_login.sign_out)

]

views中添加对应的函数,使用的是django自带的auth,User模块

from django.http import JsonResponse
from django.shortcuts import render

from django.shortcuts import render, HttpResponse, redirect
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.permissions import BasePermission
from rest_framework.authentication import BaseAuthentication
from django.contrib.auth.models import User
from django.contrib import auth
from django.contrib.auth.decorators import login_required

# 登录模块
def login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = auth.authenticate(request, username=username, password=password)
        if user and user.is_active:
            # remember 是否记住登录状态 ture false
            # if remember:
            #     request.session.set_expiry(None)
            # else:
            #     request.session.set_expiry(0)
            auth.login(request, user)
            return JsonResponse({"status": "ok"})
    return render(request, 'login.html')


# 注册用户
def register(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        User.objects.create_user(username=username, password=password)
        return JsonResponse({"status": "ok"})
    return render(request, 'register.html')


# 登出模块
def sign_out(request):
    auth.logout(request)
    return JsonResponse({"status": "ok"})
<!DOCTYPE html>
<html lang="en">
<body>

<h1>欢迎登录!</h1>
<form action="/login/" method="post">
    {% csrf_token %}
    <p>
        用户名:
        <input type="text" name="username">
    </p>
    <p>
        密码:
        <input type="text" name="password">
    </p>
    <p>
        <input type="submit" value="登录">
    </p>
    <hr>
</form>
</body>
</html>

这样做之后,有些不放入viewset中的视图函数也可以直接使用django自带的验证装饰器@login_required(login_url="/login/")来进行直接的验证

接下来制作drf鉴权类,使用自定类的方式继承has_permission

# 将验证加入到drf中实现局部自定义
class AdminPermission(BasePermission):
    def has_permission(self, request, view):
        user = request.user
        if user.username:
            return True
        else:
            raise AuthenticationFailed('login-error')

# viewset
class testviewset(viewsets.ModelViewSet):
	permission_classes = [AllowAny, AdminPermission]

在使用login后浏览器中会记录当前登录用户的sessionid,还请求的时候头部添加此cookie即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个基于Python的Web开发框架,而D REST Framework(简称DRF)是Django的一个扩展,用于构建RESTful API。下面是关于Django DRF用户登录、注册和修改密码的简要介绍: 1. 用户注册: - 创建一个用户注册的API视图,可以使用DRF提供的`APIView`或者`ViewSet`。 - 在该视图,接收用户提交的注册信息,如用户名、密码等。 - 对接收到的信息进行验证和处理,例如检查用户名是否已存在,对密码进行加密等。 - 创建用户对象并保存到数据库。 2. 用户登录: - 创建一个用户登录的API视图,同样可以使用DRF提供的`APIView`或者`ViewSet`。 - 在该视图,接收用户提交的登录信息,如用户名和密码。 - 对接收到的信息进行验证,例如检查用户名和密码是否匹配。 - 如果验证通过,可以生成并返回一个认证Token给客户端,用于后续的身份验证。 3. 修改密码: - 创建一个修改密码的API视图,同样可以使用DRF提供的`APIView`或者`ViewSet`。 - 在该视图,需要验证用户的身份,通常可以使用Token认证或Session认证。 - 接收用户提交的旧密码和新密码。 - 验证旧密码是否正确,并对新密码进行加密处理。 - 更新用户对象的密码字段,并保存到数据库。 以上是关于Django DRF用户登录、注册和修改密码的简要介绍。如果你需要更详细的代码实现或者其他相关问题,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值