rest_famework 认证与权限组件
定义个一个认证类
from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication class Authentication(BaseAuthentication):
def authenticate(self,request):
token=request._request.GET.get("token")
token_obj=UserToken.objects.filter(token=token).first()
if not token_obj:
raise exceptions.AuthenticationFailed("验证失败!")
return (token_obj.user,token_obj)
view配置登录后,访问其他url进行认证:
登录:
def get_random_str(user):
import hashlib,time
ctime=str(time.time()) md5=hashlib.md5(bytes(user,encoding="utf8"))
md5.update(bytes(ctime,encoding="utf8")) return md5.hexdigest() from app01.service.auth import * from django.http import JsonResponse
class LoginViewSet(APIView):
authentication_classes = [Authentication,]
def post(self,request,*args,**kwargs):
res={"code":1000,"msg":None}
try:
user=request._request.POST.get("user")
pwd=request._request.POST.get("pwd")
user_obj=UserInfo.objects.filter(user=user,pwd=pwd).first()
print(user,pwd,user_obj)
if not user_obj:
res["code"]=1001
res["msg"]="用户名或者密码错误"
else:
token=get_random_str(user)
UserToken.objects.update_or_create(user=user_obj,defaults={"token":token})
res["token"]=token except Exception as e:
res["code"]=1002
res["msg"]=e return JsonResponse(res,json_dumps_params={"ensure_ascii":False}) 认证:
class BookView(APIView):
authentication_classes = [Authentication,] # [Authentication(),] 这写入认证累名字即可
# permission_classes = []
# throttle_classes = []
def get(self,request):
print("request.user",request.user)
print("request.auth",request.auth)
print("_request.body",request._request.body)
print("_request.GET",request._request.GET)
book_list=Book.objects.all()
以上是局部配置认证
全局配置:
settings.py配置如下:
REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",] #这个代表认证类的位置
}
权限:
class SVIPPermission(object):
message="只有超级用户才能访问"
def has_permission(self,request,view):
username=request.user
user_type=User.objects.filter(name=username).first().user_type if user_type==3: return True # 通过权限认证
else:
return False #不通过会获取上面message 这是全局配置:
setting 配置:
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES": ["app01.utils.SVIPPermission",],
} 局部配置:
class BookView(APIView):
#authentication_classes = [Authentication,] # [Authentication(),] 这写入认证累名字即可
# permission_classes = [SVIPPermission] 这些写入局部配合的权限
# throttle_classes = []
def get(self,request):
print("request.user",request.user)
print("request.auth",request.auth)
print("_request.body",request._request.body)
print("_request.GET",request._request.GET)
book_list=Book.objects.all()
rest_famework 认证与权限组件的更多相关文章
- rest-framework组件 之 认证与权限组件
浏览目录 认证组件 权限组件 频率组件 认证与权限组件 认证组件 局部视图认证 在app01.service.auth.py: class Authentication(BaseAuthenticat ...
- DRF(4) - 认证、权限组件
一.引入 通过前面三节课的学习,我们已经详细了解了DRF提供的几个重要的工具,DRF充分利用了面向对象编程的思想,对Django的View类进行了继承,并封装了其as_view方法和dispatch方 ...
- rest-framework认证、权限组件
认证组件: models class User(models.Model): username = models.CharField(max_length=32) password = models. ...
- DRF之版本控制、认证和权限组件
一.版本控制组件 1.为什么要使用版本控制 首先我们开发项目是有多个版本的当我们项目越来越更新,版本就越来越多,我们不可能新的版本出了,以前旧的版本就不进行维护了像bootstrap有2.3.4版本的 ...
- Restful 4 -- 认证组件、权限组件、频率组件、url注册器、响应器、分页器
一.认证组件.权限组件.频率组件总结: 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 1.认证组件格式 写一个认 ...
- RESTful-rest_framework认证组件、权限组件、频率组件-第五篇
认证组件.权限组件.频率组件总结: 认证组件格式: 1 写一个认证类 from rest_framework.authentication import BaseAuthentication cla ...
- rest_framework组件之认证,权限,访问频率
共用的models from django.db import models # Create your models here. class User(models.Model): username ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- Django高级篇三。restful的解析器,认证组件,权限组件
一.rest=framework之解析器 1)解析器作用. 根据提交的数据.只解析某些特定的数据.非法数据不接收,为了系统安全问题 比如解析的数据格式有 有application/json,x-www ...
随机推荐
- 第五章HTML
HTML介绍 标签:有一个头,一尾 <!DOCTYPE html><html lang="en"><head> <!-- 文档的标题.编码 ...
- python之 自动补全 tab
1.在python中运行命令sys.path查看python路径 >>> import sys>>> import tabTraceback (most recen ...
- Spring Boot Admin 的使用
Spring Boot 版本: 1.5.20 一.Spring Boot Admin Server 1.在pom.xml中增加 <dependency> <groupId>or ...
- java 生成微信的二维码 工具类
package com.app.wii.util; import java.io.File;import java.io.FileInputStream;import java.io.FileOutp ...
- 如何一步一步新建一个Owin项目
打开VS2015,新建Web应用程序,命名为OwinWeb(名字随意). 在弹出的“新建ASP.NET项目”窗口中选择“Empty”模板,“为以下项添加文件夹和核心引用”处全不选.点击确定. 创建完后 ...
- java随机分配端口占用其它服务端口问题完美解决
问题描述: java创建socket连接,创建的随机客户端端口占用了其它服务的端口,导致该服务无法启动 解决: 1.linux系统为java或其它程序提供随机端口配置项 查看端口范围:sysctl ...
- lnmp一件安装包 搭建laravel 环境(lnmp1.4)(报错500)
https://blog.csdn.net/huangyuxin_/article/details/78998486
- 使用 GDB 调试需要命令行参数的程序
使用 gdb 命令提供的 --args 选项可以调试需要命令行参数的程序,如下: gdb --args a.out arg1 arg2 arg3
- LeetCode——162. Find Peak Element
一.题目链接: https://leetcode.com/problems/find-peak-element/ 二.题目大意: 给定一个长度为N的一维数组,数组是无序的,要求找到数组中的极大值(或局 ...
- python 云打码 http接口
import http.client, mimetypes, urllib, json, time, requests ######################################## ...