前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >rest_framework自定义认证

rest_framework自定义认证

作者头像
kirin
发布于 2020-06-11 02:10:55
发布于 2020-06-11 02:10:55
32000
代码可运行
举报
文章被收录于专栏:Kirin博客Kirin博客
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rest_framework自定义认证,简单两步即可实现
下面是所有views urls models 的代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#views.py

from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from rest_framework.views import APIView
from rest_framework.request import Request

from rest_framework.authentication import BasicAuthentication
from . import models

def md5(user):
'''生成md5随机字符串'''
import hashlib
import time
ctime=str(time.time())
m=hashlib.md5(bytes(user,encoding='utf-8'))
m.update(bytes(ctime,encoding='utf-8'))
return m.hexdigest()

ORDER_DICT={
1:{
'name':'狗头',
'age':'18',
'sex':'男',
'content':'.....'
},
2:{
'name':'毛毛',
'age':'99',
'sex':'女',
'content':'.....'
},
}

def index(request):
return HttpResponse('ok')

class AuthView(APIView):
'''
用于用户登录认证
'''
def post(self,request,*args,**kwargs):
ret={'code':1000,'msg':None}
try:
user=request._request.POST.get('username')
pwd=request._request.POST.get('password')

obj=models.UserInfo.objects.filter(username=user,password=pwd).first()
if obj:
ret['code']=1001
ret['msg']='登录成功'
# 创建token表
token=md5(user)
print(token)
# 创建或更新token
models.UserToken.objects.update_or_create(user=obj,defaults={'token':token})
ret['token']=token
else:
ret['code']=1004
ret['msg']='账号或密码错误'
except Exception as e:
ret['code'] = 1002
ret['msg'] = '请求异常'

return JsonResponse(ret)

class Authication(object):
'''自定义认证需要两步,第一步先写一个类,第二步在需要认证的地方应用上类就可以实现认证'''
# 主要认证逻辑
def authenticate(self,request):
from rest_framework import exceptions
token=request._request.GET.get('token')
token_obj=models.UserToken.objects.filter(token=token).first()
if not token_obj:
raise exceptions.AuthenticationFailed('用户认证失败')
return (token_obj.user,token_obj)

# 必写这个函数,
def authenticate_header(self,request):
pass



class OrderView(APIView):
# 自定义认证
# 自定义认证类添加进来即可实现认证
authentication_classes = [Authication]
def get(self,request,*args,**kwargs):
# request.user
# request.auth
ret = {'code': 1000, 'msg': None, 'data': None}
# token=request._request.GET.get('token')
# if not token:
# return JsonResponse({'code':1003,'msg':'用户未登录'})

try:
ret['data']=ORDER_DICT
except Exception as e:
pass
return JsonResponse(ret)


class UserInfoView(APIView):
authentication_classes = [Authication]
def get(self,request):
return HttpResponse('用户信息')



#urls.py
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.urls import path
from . import views
app_name='app1'
urlpatterns=[
    path('',views.index),
    path('api/v1/auth',views.AuthView.as_view()),
    path('api/v1/order',views.OrderView.as_view()),
    path('api/v1/user',views.UserInfoView.as_view()),
]




#models.py
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models


class UserInfo(models.Model):
    user_type_choices=(
        (1,'普通用户'),
        (2,'VIP'),
        (3,'SIP'),
    )
    user_type=models.IntegerField(choices=user_type_choices,)
    username=models.CharField(max_length=32,unique=True)
    password=models.CharField(max_length=64)

class UserToken(models.Model):
    user=models.OneToOneField(to='UserInfo',on_delete=models.CASCADE)
    token=models.CharField(max_length=64)
# Create your models here.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rest_framework框架的基本组件
快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式。我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现。 models部分: from django.db import models # Create your models here. class Book(models.Model): title=mod
阿强Wwlt
2018/07/09
8760
rest_framework -- 认证
#####认证组件##### 一、认证是什么就不说了,某些网页必须是用户登陆之后,才能访问的,所以这时候就需要用上认证组件。 你不用rest_framework的认证组件也行,这种认证的话,完全可以自己写出来。 二、之前再写APIView的时候,那里提到过。 不记得在哪里的话,先找dispatch方法(APIView的记得),然后是self.initial(request, *args, **kwargs), 最后找到self.perform_authentication(re
py3study
2020/02/10
4440
Django rest framework源码分析(4)----版本
版本  新建一个工程Myproject和一个app名为api (1)api/models.py from django.db import models class UserInfo(models.Model): USER_TYPE = ( (1,'普通用户'), (2,'VIP'), (3,'SVIP') ) user_type = models.IntegerField(choices=USER_TYPE) usern
zhang_derek
2018/04/11
9730
Django rest framework源码分析(4)----版本
DRF-认证权限频率
我们知道在APIView执行的过程中,在dispatch方法中走了三大认证self.initial(request, *args, **kwargs)
HammerZe
2022/05/09
6130
DRF-认证权限频率
初次就这么给了你(Django-rest-framework)
工程已经创建好了,需要cd进工程里边,关键是manage.py在工程里边,我们就需要借用manage.py来进行其他的操作了。
Wyc
2018/09/11
1.2K0
实战-DRF快速写接口(认证权限频率)
实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestframework3.13 测试工具 Postman 需求 注册接口,包含字段用户名,密码,确认密码,用户类型 登陆接口,校验用户名,密码,生成随机字符串 认证功能,除了注册登陆接口外,所有接口都要登陆后访问 频率限制功能,每分钟访问5次,book的所有接口,使用这个频率类 权限限制功能,publish的所有操作需要超级用户能访问,其他的普通登陆用户就
HammerZe
2022/05/09
4870
实战-DRF快速写接口(认证权限频率)
python测试开发django-61.权限认证(permission)
用户登录后,才有操作当前用户的权限,不能操作其它人的用户,这就是需要用到权限认证,要不然你登录自己的用户,去操作别人用户的相关数据,就很危险了。
上海-悠悠
2019/09/17
2K0
python测试开发django-61.权限认证(permission)
django rest_framework 用户登录认证
1、安装 pip install djangorestframework 2、创建项目及应用 创建过程略 目录结构如图 3、设置settings.py 设置数据库连接 # MySQL 增加mysql
kirin
2020/05/21
1.1K0
rest_framework基础
简介 为什么要使用REST framework? Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs。   - 在线可视的API,对于赢得你的开发者们十分有用  - 验证策略涵盖了OAuth1a和OAuth2 - 同时支持ORM和非ORM数据源的序列化 - 可以配置各个环节,若无需更多强大的特性,使用一般基于类(function-based)的视图(views)即可  - 大量的文档,强力的社区支持 - 大公司如同Mozilla和Eventbrite,也是忠
人生不如戏
2018/05/30
4940
2. DRF入门
在日常开发中,会从别的API获取数据或者自己写API提供数据,数据格式一般都是采用JSON格式。这期间就会涉及两个专业术语:
alexhuiwang
2023/01/30
1.6K0
揭开DRF序列化技术的神秘面纱
在RESTful API中,接口返回的是JSON,JSON的内容对应的是数据库中的数据,DRF是通过序列化(Serialization)的技术,把数据模型转换为JSON的,反之,叫做反序列化(deserialization)。本文就来揭开DRF序列化技术的神秘面纱。
dongfanger
2020/12/18
6860
揭开DRF序列化技术的神秘面纱
day96-day98-media配置&token时效&models字段auto_XX
1.1 token = request.META.get('HTTP_AUTHENTICATE','')
少年包青菜
2020/03/23
5620
django-rest-framework登陆认证
# -*- coding: utf-8 -*- __author__ = 'YongCong Wu' # @Time : 2018/10/23 15:05 # @Email : : 1922878025@qq.com from rest_framework import exceptions from app import models class FirstAuthtication(object): def authenticate(self, request):
Wyc
2018/11/09
1.2K0
Django rest framework源码分析(1)----认证
一、基础 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一些知识 理解下面两个知识点非常重要,django-rest-framework源码中到处都是基于CBV和面向对象的封装 (1)面向对象封装的两大特性 把同一类方法封装到类中 将数据封装到对象中 (2)CBV 基于反射实现根据请求方式不同,执行不同的方法 原理:url-->view方法-->dispatch方法(反射执行其它方法:GET/POST/P
zhang_derek
2018/04/11
2.1K0
Django rest framework源码分析(1)----认证
Django rest framework源码分析(2)----权限
添加权限 (1)API/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # utils/permission.py class SVIPPremission(object): message = "必须是SVIP才能访问" def has_permission(self,request,view): if request.user.user_type != 3: return False
zhang_derek
2018/04/11
9260
Django rest framework源码分析(2)----权限
Django rest framework源码分析(3)----节流
添加节流 自定义节流的方法  限制60s内只能访问3次 (1)API文件夹下面新建throttle.py,代码如下: # utils/throttle.py from rest_framework.throttling import BaseThrottle import time VISIT_RECORD = {} #保存访问记录 class VisitThrottle(BaseThrottle): '''60s内只能访问3次''' def __init__(self):
zhang_derek
2018/04/11
1.1K0
Django rest framework源码分析(3)----节流
Django rest framework(6)----序列化
序列化 1.继承Serializer 基本使用  (1)models.py from django.db import models class UserInfo(models.Model): USER_TYPE = ( (1,'普通用户'), (2,'VIP'), (3,'SVIP') ) user_type = models.IntegerField(choices=USER_TYPE) username = mode
zhang_derek
2018/04/11
8860
Django rest framework(6)----序列化
认证组件
 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查询,没有登录就不能查看 ,这时候就要用到认证组件
py3study
2020/01/20
6760
rest_framework序列化与反序列化1
自定义序列化的过程,对数据的单查与群查,序列化的过程:ORM操作得到数据,然后将数据序列化成前台可以使用的数据返回给前台。
GH
2019/12/30
9250
django rest framework之注册
我直接讲作用吧,加了这句代码,那么这句代码所在的那个模型的属性就不会再被drf 序列化,从而也不会再去生成对应的对象
Tom2Code
2022/04/15
5840
django rest framework之注册
相关推荐
rest_framework框架的基本组件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文