基于Django框架的rest_framework的身份验证和权限解析
作者:想成为数据分析师的开发工程师 时间:2021-02-21 23:42:58
1. 概述
到目前为止,程序的API对任何人都可以编辑或删除,没有任何限制。我们希望有一些更高级的行为,进行身份验证和权限分配,以确保:
数据始终与创建者相关联
只有经过身份验证的用户才能创建数据
只有数据的创建者可以更新或删除未经身份验证的请求
若未经过身份验证只有只读访问权限
2. 使用admin应用的User
配置好settings中的数据库配置
将admin应用的数据库进行迁移
使用 createsuperuser 创建用户
给可浏览的API添加登录功能 在根urls中添加:
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('rest_app.urls')),
path('api-auth/',include('rest_framework.urls')),
]
说明:
api-auth: 可以设置为任意符合规则的路径
再次访问api页面,在页面的右上角会看到登录操作的按钮
此时,还是没有做到身份验证的功能
3. 视图中添加权限
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from rest_app.models import *
from rest_app.app_serializer import StudentSerializer,ClassesSerializer
from django.http import JsonResponse,HttpResponse,Http404
from rest_framework.parsers import JSONParser
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.views import APIView
from rest_framework import mixins, generics
from rest_framework import permissions
# Create your views here.
'''
新增 post students/
删除 delete students/id/
修改 put students/id/
查询一个 get students/id/
查询所有 get students/
'''
# 优化代码:
class StudentsView(generics.ListCreateAPIView):
# 指定需要操作的数据与序列化类
queryset = Student.objects.all()
serializer_class = StudentSerializer
# 添加身份验证功能
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
class StudentDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
# 添加身份验证功能
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
此时,再次访问页面就无法对其进行操作了,需要登录
来源:https://blog.csdn.net/m0_63953077/article/details/128175648
标签:Django,验证,权限


猜你喜欢
精致的web设计
2009-12-04 19:07:00
赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程 <font color=red>原创</font>
2022-03-02 04:40:53

python网络爬虫实现个性化音乐播放器示例解析
2021-10-06 10:14:51

MySql数据库中Select用法小结
2024-01-22 08:45:42
JS实现新建文件夹功能
2024-04-16 09:50:15

sqlserver数据库高版本备份还原为低版本的方法
2024-01-19 02:29:30

JavaScript实现为input与textarea自定义hover,focus效果的方法
2024-04-10 11:01:18

JavaScript省市级联下拉菜单实例
2024-04-10 16:18:18
Python通过4种方式实现进程数据通信
2023-11-04 15:13:48
pandas读取CSV文件时查看修改各列的数据类型格式
2023-09-26 16:44:58
YOLOv5车牌识别实战教程(四)模型优化与部署
2021-04-22 01:32:27

在ASP中使用SQL语句之12:连接
2009-04-23 18:27:00
Python IDE PyCharm的基本快捷键和配置简介
2021-09-18 07:08:10

js弹出的对话窗口永远保持居中显示
2024-04-23 09:13:00
ASP.NET数据库操作类实例
2024-01-12 21:01:07
总结Python中逻辑运算符的使用
2023-01-10 14:54:40

网页制作前台之javascript
2013-07-23 08:32:59
什么是Python中的顺序表
2021-07-12 22:17:47

CSS高级文字排版的实例
2009-03-24 20:56:00
Alfred + Gitee搭建免费图床的使用实例详解
2023-10-04 08:24:30
