rest_framework 中的认证

rest_framework 中的认证

前戏简单源码

OneToOneField与ForeignKey

其实在源码里面OneToOneField是继承ForeignKey,然后OneToOneField与ForeignKey唯一不同的就是OneToOneField在自己的__init__里面写了kwargs[‘unique‘] = True 就是确保字段的唯一性,这样就形成了一对一。

了解了源码以后呢,其实我们可以不用一对一字段 直接可以用ForeignKey 里面写一个unique=True就可以实现一对一了,但是一般不推荐这么用,别人写好了就用别人的就知道了,如下图。

简介

只有登录成功的用户才能看到里面所有相关我东西,这里的话我们需要用到rest_framework的认证

局部使用:

models.py

class User(models.Model):
    name=models.CharField(max_length=32)
    pwd=models.CharField(max_length=64)
    user_type=models.IntegerField(choices=((1,"超级管理员"),(2,"普通管理员"),(3,"2b用户")),default=3)
#跟User表做一对一关联
class Token(models.Model):
    user=models.OneToOneField(to='User')
    token = models.CharField(max_length=64)

在app下面新建一个py的文件,然后在新建的这个.py文件中创建一个类

from rest_framework.authentication import BaseAuthentication
from app01 import models
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.permissions import BasePermission

class MyAuth(BaseAuthentication):
    def authenticate(self, request):
        token = request.GET.get('token')
        token_obj = models.Token.objects.filter(token=token).first()
        if token_obj:
            return token_obj.user, token_obj
        else:
            raise AuthenticationFailed('亲,你还未登录呢')

  class MyPermision(BasePermission):
    # 需要打印中文错误信息 加一个message
    message = '不是超级用户,查看不了'
    def has_permission(self,request,view):
        if request.user.user_type==1:
            return True
        else:
            return False

view.py

class Book(APIView):
    # 这个地方加在这里的话就是会对整个Book做校验
    authentication_classes = [MyAuth, ]
    def get(self, request):
        print(request.user.name)
        return Response('图书列表')

class Login(APIView):
    def post(self, request):
        response = {'code': 100, 'msg': '登录成功'}
        name = request.data.get('name')
        pwd = request.data.get('pwd')
        user_type = request.data.get('user_type')
        try:
            print(name, pwd)
            user = models.User.objects.filter(name=name, pwd=pwd).get()
            token = uuid4()
            models.Token.objects.update_or_create(user=user, defaults={'token': token})
            response['token'] = token
        except Exception as e:
            print(e)
        return Response(response)

总结:局部使用,只需要在视图类里加入:

authentication_classes = ["需要加认证的类", ]

全局认证需要在settings中加入:

REST_FRAMEWORK={
    "DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",]
}

注意:如果加入了全局认证,有些不需要的时候可以加入以下一段代码

# 让这个列表为空就行,就没有加入认证
authentication_classes = []

原文地址:https://www.cnblogs.com/ZKPython/p/11129174.html

时间: 2024-08-06 13:31:29

rest_framework 中的认证的相关文章

Linux中pam认证详解(下)

Linux中pam认证详解(下) 在上一篇中详细的介绍了pam的介绍.pam认证原理.pam认证构成以及pam验证控制类型,下面向大家详细介绍一下常用的pam服务模块,以及pam认证的应用. 一.常用的pam服务模块 下面是Linux提供的PAM模块列表(只是其中一部分),这其中包含模块文件.模块功能描述和相关配置文件,具体如下: pam_access 提供logdaemon风格登录控制 /etc/security/access.conf pam_chroot 提供类似chroot命令的功能 p

Django用户认证系统(二)Web请求中的认证

在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authenticated()来区分,例如: if request.user.is_authenticated(): # Do something for authenticated users. else: # Do something for anonymous users. 登陆login login(

[转].net中的认证(authentication)与授权(authorization)

本文转自:http://www.cnblogs.com/yjmyzz/archive/2010/08/29/1812038.html 注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧. "认证"与"授权"是几乎所有系统中都会涉及的概念,通俗点讲: 认证(authentication) 就是 "判断用户有没有登录?",好比windows系统,没登录就无法使用(不管你是用Administrator或Guest用户,总之要先正确登录后,

.net中的认证(authentication)与授权(authorization)

本文转自:http://www.cnblogs.com/yjmyzz/archive/2010/08/29/1812038.html 认证(authentication) 就是 "判断用户有没有登录?",好比windows系统,没登录就无法使用(不管你是用Administrator或Guest用户,总之要先正确登录后,才能进入系统). 授权(authorization) 就是"用户登录后的身份/角色识别",好比"管理员用户"登录windows后,

在AngularJS应用中实现认证授权

在AngularJS应用中实现认证授权 在每一个严肃的应用中,认证和授权都是非常重要的一个部分.单页应用也不例外.应用并不会将所有的数据和功能都 暴露给所有的用户.用户需要通过认证和授权来查看应用的某个特定部分,或者在应用中进行特定的行为.为了在应用中对用户进行识别,我们需要让用户进行登录. 在用户管理方面,传统的服务器端应用和单页应用的实现方式有所不同,单页应用能够和服务器通信的方式只有AJAX.对于登录和退出来说也是如此. 负责识别用户的服务器端需要暴露出一个认证断电.单页应用将会把用户输入

问题: Oracle Database 10g 未在当前操作系统中经过认证

在Windows 7中安装Oracle 10g. 使用的Orcale版本是10g. 步骤1: 在Orcale官网上下载,下载地址为:http://download.oracle.com/otn/nt/oracle10g/10203/10203_vista_w2k8_x86_production_db.zip 可以直接复制到迅雷中下载.大小为778M. 步骤2: 点击setup.exe安装,经过前置判断,如果出现如下错误信息: <提示有1个错误,1个警告,2个要求待验证 错误问题详细信息如下:正在

NET Core中的认证管理解析

2016-08-19 07:15 0x00 问题来源 在新建.NET Core的Web项目时选择"使用个人用户账户"就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可以使用AuthorizeAttribute进行各种权限管理,看起来似乎十分方便.不过生成的代码都替我干了些什么我一团雾水.看了下生成的数据表,功能也挺复杂的.实际上我需要的只是基于用户和角色的认证管理,而且用户资料是使用现有的库,但使用.NET Core自带的认证组件必须要依赖EF,表的结构

drf框架中jwt认证,以及自定义jwt认证

0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pip install djangorestframework-jwt 使用自带设定好的jwt from django.urls import path from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ path(

浅谈WLAN运营中Portal认证安全性

WLAN运营有多种认证方式,但最常用的方式为弹出Portal登录页面.即:用户搜索到运营商的AP后,连接进去获得IP地址,打开浏览器,输入账号和密码便可登录. 这种方式虽然简单方便,但由于AP的接入没有采用WEP和WPA2等加密方式,空中信道很容易被侦查破解,黑客能够截获空中传输的账号和密码.因此该方式安全性较低. 如何提高登录页面的安全性呢?据城市热点总结,目前大部分WLAN运营商采用以下几种方案: Portal服务器与BRAS和Radius服务器采用CHAP的认证方式 HTTPS的登录页面方