zoukankan      html  css  js  c++  java
  • Django学习系列之django restframework

    曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style)。所以我们的选择变得很简单:前端ajax访问后端的RESTful API对资源进行操作
    Django中有一些可选的REST framework,比如django-piston,django-tasypie。 但是我和google(呵呵,不好意思)推荐这个:Django REST framework

    django-framework就是定义一个url,可以利用这个url去数据库中读数据,或者写数据

    安装配置django-framework

    安装django-framework

    pip install djangorestframework
    pip install markdown      
    pip install django-filter

    在Project中配置django-framework

    打开project的settings.py

    INSTALLED_APPS = (
        ...
        'rest_framework',
    )
    
    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' #所有人都能访问API,有读写权限
     ]
    }

    实例一:编写一个API用来获取用户信息

    在Madking的url.py里配置api的url

    from assets import rest_urls as asset_urls
    
    
    urlpatterns = [
        url(r'^api/', include(asset_urls)),  #api的入口url
    
    
    ]

    在asset的rest_urls.py里注册并关联视图

    from django.conf.urls import url, include
    from rest_framework import routers
    #导入rest_viewset,取个别名views
    from assets import rest_viewset as views
    #这个是rest_framework封装django 的routers
    router = routers.DefaultRouter()
    
    #将views里的UserViewSet和AssetViewSet注册进来
    #用户请求http://127.0.0.1:8000/api/users/和http://127.0.0.1:8000/api/asset/就能获取到数据
    router.register(r'users', views.UserViewSet) 
    router.register(r'asset', views.AssetViewSet)
    
    
    urlpatterns = [
        url(r'^', include(router.urls)),
        url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), #这个是API的认证,必须得登录才能请求API
    
    ]

    在asset的rest_viewset.py里定义去数据库里查询数据

    from rest_framework import viewsets
    from assets import models
    
    from assets import rest_serializers
    
    class UserViewSet(viewsets.ModelViewSet):
        queryset = models.UserProfile.objects.all()          #去查询所有的数据
        serializer_class = rest_serializers.UserSerializers  #序列化(表现层,将数据按照一定格式返回给用户)
    
    class AssetViewSet(viewsets.ModelViewSet):
        queryset = models.Asset.objects.all()
        serializer_class = rest_serializers.AssetSerializer

    在asset里的rest_serializers.py里定义

    #导入表结构
    from assets import models
    #导入serializer方法
    from rest_framework import serializers
    
    #获取UserProfile表里的信息
    class UserSerializers(serializers.ModelSerializer):
        class Meta:
            #指定数据库,
            model = models.UserProfile
            #指定返回给用户的具体表中的哪些字段
            fields = ('username','name')
    
    #获取Asset表里的信息
    class AssetSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Asset
            depth=2
            fields = ('name', 'sn','server','networkdevice')

    测试

    访问http://127.0.0.1:8000/api/能看到API

     访问获取用户信息的API:http://127.0.0.1:8000/api/users/

  • 相关阅读:
    ZOJ 2588 Burning Bridges
    POJ 1966 ZOJ 2182 Cable TV Network
    HDU 5348 MZL's endless loop
    HDU 5352 MZL's City
    Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
    ZOJ 1119 SPF
    HDU 3452 Bonsai
    HDU 1520 Anniversary party
    POJ 2239 Selecting Courses
    POJ 1144 Network
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6683405.html
Copyright © 2011-2022 走看看