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/

  • 相关阅读:
    SQL中的数据库设计三范式
    SQL中的DBA命令
    SQL中的视图
    SQL中的索引
    十大程序员必逛网站
    解放双手!你不知道的代码生成神器
    IT体系的演变
    Nginx的六种负载均衡策略
    前端Chrome调试小技巧汇总
    spring boot:使用async异步线程池发送注册邮件(spring boot 2.3.1)
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6683405.html
Copyright © 2011-2022 走看看