django使用restframework实现安全的api
参考地址:https://github.com/tomchristie/django-rest-framework/
一般如果在批量修改多的时候,不建议使用,一般在get请求,或者修改单条数据的时候使用;
安装:pip install djangorestframework
要通过rest-framework实现api,settings的配置如下:
INSTALLED_APPS = [
...
'rest_framework', #注册app
] REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
定义rest_urls,test_urls.py
from django.conf.urls import url, include
from rest_framework import routers from Sansa import rest_views
router = routers.DefaultRouter()
router.register(r'users', rest_views.UserViewSet) #生成一条url # Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
定义rest_views,rest的视图文件,rest_views.py
from Sansa import models
from Sansa import serializer from rest_framework import serializers, viewsets, routers class UserViewSet(viewsets.ModelViewSet):
queryset = models.UserProfile.objects.all() #必须是queryset和serializer_class,是写死的,这里的user因为是我们自定义的,使用需要写自定义的models对象
serializer_class = serializer.UserSerializer
创建serializers.py文件,序列化文件,定义对那个models的哪些字段展示,类似以modelform
from Sansa import models
from rest_framework import serializers, viewsets, routers # Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.UserProfile
fields = ('url', 'email', 'name', 'is_staff')
最后,需要将rest_urls和django的urls关联起来:urls
from django.conf.urls import url,include
from django.contrib import admin
from Sansa import views urlpatterns = [
url(r'report/$', views.asset_report),
url(r'api/', include('Sansa.rest_urls')), #关联url
url(r'report/asset_with_no_asset_id/$',views.asset_with_no_asset_id),
url(r'^new_assets/approval/$', views.new_assets_approval, name="new_assets_approval"),
]
需要注意,因为user是自定义的,需要在UserProfile的models中添加has_perms()的属性
class UserProfile(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
name = models.CharField(max_length=32)
# date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False) objects = MyUserManager() #实例化类 USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name'] #必须填写的字段 def get_full_name(self):
# The user is identified by their email address
return self.email def get_short_name(self):
# The user is identified by their email address
return self.email def __str__(self): # __unicode__ on Python 2
return self.email def has_perm(self, perm, obj=None): #有没有指定的权限
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return True def has_perms(self,perm,obj=None): return True def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return True @property
def is_staff(self):
"Is the user a member of staff?"
# Simplest possible answer: All admins are staff
return self.is_admin

好了,上述显示api已经创建就完成了,这样我们就可以仿照上面的内容,将Asset表的接口添加进来
1、serializer.py
from Sansa import models
from rest_framework import serializers, viewsets, routers # Serializers define the API representation. class AssetSerializer(serializers.ModelSerializer): #因为有通过外键关联的字段manufactory,所以不使用超链接
class Meta:
model = models.Asset
depth = 2 #将外键关联的表的第二层内容也展示出来
fields = ('url', 'asset_type','sn', 'manufactory','name', 'create_date') 因为Manufactory在是Asset表的外键,需要单独创建,将其的内容关联展示
class ManufactorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Manufactory
fields = ('url', 'manufactory','support_num', 'memo')
2、rest_views.py:创建视图
from Sansa import models
from Sansa import serializer from rest_framework import serializers, viewsets, router class AssetViewSet(viewsets.ModelViewSet):
queryset = models.Asset.objects.all()
serializer_class = serializer.AssetSerializer class ManufactoryViewSet(viewsets.ModelViewSet):
queryset = models.Manufactory.objects.all()
serializer_class = serializer.ManufactorySerializer
3、rest_urls.py
from django.conf.urls import url, include
from rest_framework import routers from Sansa import rest_views
router = routers.DefaultRouter()
router.register(r'users', rest_views.UserViewSet) #生成一条url
router.register(r'assets', rest_views.AssetViewSet) #生成一条url
router.register(r'manufactory', rest_views.ManufactoryViewSet) #生成一条url # Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

django使用restframework实现安全的api的更多相关文章
- CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...
- Django 之 restframework 频率组件的使用
Django 之 restframework 频率组件的使用以及源码分析 频率组件的使用 第一步,先写一个频率类,继承SimpleRateThrottle 一定要在这个类里面配置一个scop='字符串 ...
- 【Django】 rest-framework和RestfulAPI的设计
[rest-framework] 这是一个基于django才能发挥作用的组件,专门用于构造API的. 说到API,之前在其他项目中我也做过一些小API,不过那些都是玩票性质,结构十分简单而且要求的设计 ...
- Django之restframework
启动流程:引入rest_framework APP 在restframework中,GET数据可以通过request.query_params.get(xxx)获取,post数据可以通过request ...
- 通过django的rest-framework……(CBV)
为什么不使用FBV,因为CBV重用性很高 先看一个例子: from django.views.generic.base import View from django.http import Http ...
- rest-framework 序列化格式Restful API设计规范
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- django使用RestFramework的Token认证
今天实现的想法有点不正规: Django Rest framework的框架的认证,API都运行良好. 现在是要自己写一个function来实现用户的功能. 而不是用Rest 框架里的APIVIEW这 ...
- Python开发【Django】:日志记录、API认证
日志记录: 调用同一个对象,分别记录错误日志和运行日志 自定义日志类: class Logger(object): __instance = None def __init__(self): self ...
- django框架实现restful风格的API开发
RESTful风格的要求:https://www.cnblogs.com/chichung/p/9933116.html 利用django原生的框架直接做RESTful的API开发是怎样的呢?感受一下 ...
随机推荐
- solr7.4 tomcat环境下搭建(windows)
-版本solr-7.4.0 -环境 Windows jdk1.8 -启动方式:部署在apache-tomcat-8.5.28,以下简称Tomcat 1. 将solr-7.4.0\server\sol ...
- 安装Thinkphp5
Thinkphp完全开发手册地址:https://www.kancloud.cn/manual/thinkphp5/118006 1.安装扩展mbstring扩展:sudo apt-get insta ...
- Mac下RabbitMQ安装和在Java client端的使用
安装: 1.使用homebrew下载rabbitMQ: brew install rabbitmq 执行结果如下: Updating Homebrew... ==> Auto-updated H ...
- SPOJ3276 D-query
题意:n个数 a1...an,q组询问,每组询问给定 l,r,输出 [ l, r ] 有多少不同的数 ( n ≤30000, q ≤200000, ai ≤ 106 ) 离线 + 树状数组维护 #in ...
- 【Jmeter自学】Jmeter性能测试(四)
==================================================================================================== ...
- Shell 格式化输出数字、字符串(printf)
1.语法 printf打印格式字符串,解释'%'指令和'\'转义. 1.1.转义 printf使用时需要指定输出格式,输出后不换行. printf FORMAT [ARGUMENT] printf O ...
- android 开发 RecyclerView 横排列列表布局
1.写一个一竖的自定义布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- FreeMarker之FTL指令
assign指令 此指令用于在页面上定义一个变量 (1)定义简单类型: <#assign linkman="周先生"> 联系人:${linkman} (2)定义对象类型 ...
- 链接(跳转)<router-link> 和 路由实例Router
<router-link>和<router-link>传入的对象参数中包含path路径.name命名路由.params路径参数.query ?查询,并且如果提供了 path,p ...
- VS2017创建一个 ASP.NET Core2.0 应用,并搭建 MVC 框架
https://testerhome.com/topics/11747 1.使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具 2.打开VS2017,点击文件-新建-项目,选 ...