Django Rest Framework 认证组件

‘‘‘用户认证章节‘‘‘

# 用户认证章节:写一个数据接口
from django.http import JsonResponse
from .utils import get_token
from rest_framework.exceptions import APIException

class UserView(APIView):
    def post(self, request):
        # 定义返回消息体
        response = dict()
        # 定义需要的用户信息
        fields = {"username", "password"}
        # 定义一个用户信息字典
        user_info = dict()

        if fields.issubset(set(request.data.keys())):
            # username = request.data.get("username")
            # password = request.data.get("password")
            for key in fields:
                user_info[key] = request.data[key]

        user_instance = models.UserInfo.objects.filter(**user_info).first()

        if user_instance is not None:
            access_token = get_token.genertate_token()
            models.UserToken.objects.update_or_create(user=user_instance, defaults={
                ‘token‘: access_token
            })

            response["status_code"] = 200
            response["status_message"] = "登录成功"
            response["access_token"] = access_token
            response["user_role"] = user_instance.get_usertype_id_display()
        else:
            response["status_code"] = 201
            response["status_message"] = "登录失败,用户名或密码错误"

        return JsonResponse(response)

# 定义一个认证类
class UserAuth():
    def authenticate_header(self):
        pass
    def authenticate(self, request):
        user_token = request.query_params.get("token")
        try:
            #获取token
            token = models.UserToken.objects.get(token=user_token)
            return token.user.username,token.token
        except Exception:
            raise APIException("没有认证")

from rest_framework.viewsets import ModelViewSet
class BookView(ModelViewSet):
    # 在需要认证的数据接口里面指定认证类
    authentication_classes = [UserAuth]
    queryset = models.Book.objects.all()
    serializer_class = BookSerizlizer

views.py

import uuid
#创建随机字符串用作token
def genertate_token():
    res = str(uuid.uuid4()).replace(‘-‘,‘‘)
    return res
    re_path(r‘user/$‘,views.UserView.as_view()),

原文地址:https://www.cnblogs.com/cou1d/p/12342689.html

时间: 2024-11-09 21:21:42

Django Rest Framework 认证组件的相关文章

Django Rest Framework 认证组件(权限组件)

from rest_framework.viewsets import ModelViewSet from .authentication_classes import UserAuth from .permission_classes import UserPerm class BookView(ModelViewSet): # 在需要认证的数据接口里面指定认证类 authentication_classes = [UserAuth] # 在需要认证的数据接口里面指定权限类 permissio

rest framework认证组件和django自带csrf组件区别详解

使用 Django 中的 csrf 处理 Django中有一个django.middleware.csrf.CsrfViewMiddleware中间件提供了全局的csrf检查.它的原理是在<form>标签中生成一个隐藏的<input>标签,提交表单时将这个隐藏的<input>一起提交,服务器端验证这个字段是否正确. 官方给出的csrf的操作步骤是: 在MIDDLEWARE_CLASSES中添加django.middleware.csrf.CsrfViewMiddlewa

Django REST framework —— 权限组件源码分析

在上一篇文章中我们已经分析了认证组件源码,我们再来看看权限组件的源码,权限组件相对容易,因为只需要返回True 和False即可 代码 1 class ShoppingCarView(ViewSetMixin, APIView): 2 permission_classes = [MyPermission, ] 3 def list(self,request, *args, **kwargs): 4 """ 5 查看购物车信息 6 :param args: 7 :param k

Django Rest Framework --- 序列化组件

一.序列化组件的作用 在前后端分离开发时,前端与后端用来交互的数据的格式是一致的(数据格式为字符串的json数据),于是后端程序员在传递数据时,便要将数据封装成符合格式的数据,如果不借助方法,手动进行数据封装,会非常的浪费时间,在Django rest framework中的序列化组件帮我们解决了这个问题. 二.Django自带的序列化组件 from django.core import serializers def test(request): book_list = Book.object

Django之REST_FRAMEWORK 认证组件

Django之DRF之认证组件 # from rest_framework.views import APIView # APIView 中的 dispatch 中 执行的 self.initial(request,*args,**kwargs)中的 # APIView---->dispatch------>self.initial------>三个校验 # self.perform_authentication(request) # 认证校验 # self.check_permissi

Django REST framework 基本组件

一.序列化组件 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式.我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现. models部分: from django.db import models # Create your models here. class Book(models.Model): title=models.CharField(max_leng

Django之auth认证组件

原文链接:https://www.jianshu.com/p/612b3d76a1f5 Django之auth组件 前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. auth中提供的实用方法: - 创建用户 pytho

14 Django的用户认证组件

用户认证 auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的

Django的用户认证组件

用户认证 (一)auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是