Rest Api(1)
Rest表现层状态转化
是一种架构风格:
1.从资源角度来观察整个网络 2.每个URL代表一种资源 3.客户端通过四个http动词对后端进行操作
准备工作
pip install djangorestframework pip install markdown # Markdown support for the browsable API. pip install django-filter # Filtering support
django项目setting中添加配置信息 'rest_framework'
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest', 'rest_framework' ]
第一步:在RestApiurl中添加app的url地址
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^api/',include("rest.rest_urls")), ]
在app rest的url中添加一个url地址,这个url地址就会生成一个自带的web页面
from django.conf.urls import url,include urlpatterns = [ url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), ]
第二步:权限管理
在setting中添加
REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ##如果你登录了.就可以进行增删改查,如果没有登录任何人只有只读权限 ] }
第三步rest api视图注册
第一步:你需要把restapi url 和django的url关联起来
url(r'^', include(router.urls)),
第二步:然后你注册一个api
router = routers.DefaultRouter() router.register(r'users', UserViewSet)
第三步:写一个视图,视图里关联好你序列化的类
class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() #serializer_class :交给UserSerializer类进行序列化 serializer_class = UserSerializer #定义显示表里的哪个字段 class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'email', 'is_staff')
----搞定了
第四步:浏览器访问

第五步:登录创建数据

##如果你还要进行更多操作,点这些进去跟改就行
上面的操作,东西都是整合在了一起,实际上分开写最好了
进阶[多表查询]
目录最好分割开来
创建一个
rest 视图
rest序列化
rest 路由

基本的创建API流程就是
1)创建你的序列化类
rest_serializers.py
class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = models.Userprofile fields = ('name', 'email','status_type')
2)创建你的views 类
rest_views.py
class UserViewSet(viewsets.ModelViewSet): queryset = models.Userprofile.objects.all() #serializer_class :交给UserSerializer进行序列化 serializer_class = UserSerializer
3)注册你的路由系统
rest_urls.py
router.register(r'users', UserViewSet)
完成!!
但是!!如果你遇到如下错误

意思就是: 因为你的表中有外键,rest 会尝试把这个外键表展示出来,但是你缺没有定义好要展示manufactory(也就是关联的表!!!)这个表视图和序列化的类,所以就报错了!!
所以,这里就涉及到外键关联,关联几个外键 那你关联几个外键,就得都把对应的都展示出来!!!!!
记得按照三个步骤去添加你的rest api。。。 ['1:序列化类','2:视图类','3:路由类'] 保证不会出错
数据展示[多表展示]
当你访问数据的时候,数据展示中会有连接地址的存在.

这时候你不想获得这样的数据,那你就需要在序列化类中修改继承类
例如:
class HostSerializer(serializers.ModelSerializer): class Meta: model = models.Hostname fields = ('ip','disk','cpu','kernel','species_type','role_type','source')
这样展示的就是完整的数据
[{"ip":"192.168.22.100","disk":"1024","cpu":"8","kernel":"centos6.5","species_type":1,"role_type":[],"source":1},{"ip":"192.168.11.22","disk":"1024","cpu":"12","kernel":"12","species_type":1,"role_type":[1],"source":3}]
但是,你的需求又提升了.不止想要这些简单的数据,还要关联表中的详细信息
你就需要这样写
[但是.层数越多,速度越慢!!两层就够了]
class HostSerializer(serializers.ModelSerializer): class Meta: model = models.Hostname depth = 2 #表示N层,就会展示N层 fields = ('ip','disk','cpu','kernel','species_type','role_type','source')
实现效果如下


浙公网安备 33010602011771号