models.py

from django.db import models

class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
role_choice = ((1,'管理员'),(2,'普通用户'))
role = models.IntegerField(choices=role_choice) class BWH(models.Model):
'''三围信息'''
bust = models.IntegerField(verbose_name='胸围')
waist = models.IntegerField(verbose_name='腰围')
hips = models.IntegerField(verbose_name='臀围') user = models.OneToOneField(to=UserInfo)

  

serializers.py

from rest_framework import serializers
from app01 import models class BWHModelSerializer(serializers.ModelSerializer):
class Meta:
model = models.BWH
fields = '__all__' class UserModelSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserInfo
fields = '__all__'

  

permission.py

from rest_framework.permissions import BasePermission
from app01 import models class AdminPermission(BasePermission):
'''管理员权限认证'''
message = '您没有权限访问!'
def has_permission(self, request, view):
user_id = request.GET.get('uid')
user = models.UserInfo.objects.filter(pk=user_id).first() if not user or user.role == 2:
return False
else:
return True

  

auth.py

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01 import models class BlackNameAuth(BaseAuthentication):
'''黑名单认证''' def authenticate(self, request):
BLACK_NAME_LIST = ['小花', '小翠'] # 通过从url获取user_id的方式模拟用户登录
user_id = request.GET.get('uid')
user = models.UserInfo.objects.filter(pk=user_id).first() if not user or user.username in BLACK_NAME_LIST:
raise AuthenticationFailed('您没有登录或者被关小黑屋啦')
else:
return user.username,user_id

  

urls.py

from django.conf.urls import url,include
from django.contrib import admin
from rest_framework import routers
from app01 import views # 实例化一个routers对象
routers = routers.DefaultRouter()
# 往对象里注册(添加)url
routers.register('bwh',views.BWHViewSet)
routers.register('user',views.UserViewSet) urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'',include(routers.urls))
]

  

view.py

from app01.serializers import BWHModelSerializer
from app01.serializers import UserModelSerializer
from rest_framework.viewsets import ModelViewSet
from app01 import models
from app01.auth import BlackNameAuth
from app01.permission import AdminPermission
from rest_framework.pagination import PageNumberPagination class MyPagination(PageNumberPagination):
'''分页,自定义每页显示2条'''
page_size = 2 class BWHViewSet(ModelViewSet):
'''在黑名单中的用户禁止查看三围信息'''
authentication_classes = [BlackNameAuth] # 分页
pagination_class = MyPagination serializer_class = BWHModelSerializer
queryset = models.BWH.objects.all() class UserViewSet(ModelViewSet):
'''非管理员禁止查看用户信息'''
permission_classes = [AdminPermission] # 分页
pagination_class = MyPagination serializer_class = UserModelSerializer
queryset = models.UserInfo.objects.all()

  

一个简单的rest_framework demo的更多相关文章

  1. (转)一个简单的rest_framework demo

    转发:https://www.cnblogs.com/fu-yong/p/9100559.html models.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from ...

  2. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  3. spring boot一个简单用户管理DEMO

    概述 该Demo旨在部署一个简单spring boot工程,包含数据编辑和查看功能 POM配置 <?xml version="1.0" encoding="UTF- ...

  4. .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)

    前言: 自从.net core问世之后,就一直想了解.但是由于比较懒惰只是断断续续了解一点.近段时间工作不是太忙碌,所以偷闲写下自己学习过程.慢慢了解.net core 等这些基础方面学会之后再用.n ...

  5. 实现一个简单的虚拟demo算法

    假如现在你需要写一个像下面一样的表格的应用程序,这个表格可以根据不同的字段进行升序或者降序的展示. 这个应用程序看起来很简单,你可以想出好几种不同的方式来写.最容易想到的可能是,在你的 JavaScr ...

  6. MySQL一个简单的存储过程demo

    使用的工具是Navicat for MySQL. 首先创建一个学生表 mysql) ) ) auto_increment,age ) ) not null,primary key(s_no)); Qu ...

  7. 一个简单的直播demo for java

    obs推流,nginx挂rtmp模块,配置rtmp端口,obs向此端口推流,video.js H5拉流播放 加阿里CDN 超级简单- -

  8. 一个简单的单例模式Demo

    /** * @author :nx014924 * @date :Created in 5/30/2021 1:09 PM * @description: * @modified By: * @ver ...

  9. 一个简单地template模板

    之前的项目中用到了artTemplate模板,感觉挺有意思,于是查看相关资料,自己动手写了个简单地template模板插件.虽然会有一些不足,但也是自己的一番心血.主体代码如下 /* * 一个简单地t ...

随机推荐

  1. 【Linux资源管理】iotop命令监控磁盘使用情况

    一.iotop工具介绍 I/O可谓是数据库\服务器的最大瓶颈问题了,在使用top.nmon.zabbix.sar等工具监控I/O时,要么没有I/O监控(如top.zabbix),要么仅仅监控到磁盘层面 ...

  2. 购物车功能:使用jQuery实现购物车全选反选,单选,商品增删,小计等功能

    效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. $.ajax(),$.get(),$.post()的区别,以及一些参数注意规则

    $.ajax()方法和$.get(),$.post()方法的对比 $.ajax()方法是最完整的写法,可以完成所有的ajax请求(包含get类型和post类型) $.get()和$.post()都是简 ...

  4. mac安装配置mysql

    目录 mac安装配置mysql 1.mysql的安装 2.设置root用户的密码 3.分别执行一下命令 4.配置mysql环境变量 mac安装配置mysql 1.mysql的安装 ​ 安装过程十分简单 ...

  5. VUE 跳转另一页面返回之前页面刷新,但数据依然存在

    在第一个页面填写数据后存入本地缓存: 再次跳转回来时判断是否填入数据,如果有数据,将缓存数据填写上.

  6. 解决webview上移

    //解决webview上移 $(".webView").blur(function() { setTimeout(function() { var scrollHeight = d ...

  7. elasticsearch简单的安装以及集群配置详解

    首先要确保有java8的环境,安装方法如下(centos) wget --no-check-certificate --no-cookies --header "Cookie: oracle ...

  8. 详解Linux运维工程师高级篇(大数据安全方向).

    hadoop安全目录: kerberos(已发布) elasticsearch(已发布)http://blog.51cto.com/chenhao6/2113873 knox oozie ranger ...

  9. USB-Blaster驱动安装失败——文件哈希值不在指定目录中

    右击此电脑,选择管理,选择设备管理器,更新USB-Blaster驱动出现问题 问题: 文件的哈希值不在指定的目录文件中,如图: 解决办法: Windows键+R→shutdown.exe /r /o ...

  10. 安装虚拟机与初触linux心得

    安装虚拟机与初触linux心得 安装虚拟机 不知道是电脑问题还是软件问题,我安装虚拟机的过程异常坎坷,首先我在官网,360,太平洋等地方下载的virtualbox5.0以后的软件普遍有问题,问题是打不 ...