Django -framework 框架

Django REST framework 框架


http://www.django-rest-framework.org/ 官网

 
安装djangorestframework
pip install djangorestframework

pip install markdown       # Markdown 可浏览API的标记支持
pip install django-filter  # 支持过滤
pip install coreapi

或者安装  git clone git@github.com:encode/django-rest-framework.git
    

    
settings.py 

ALLOWED_HOSTS = ['10.8.152.31']
INSTALLED_APPS = (
    ...
    'rest_framework',
    'app',
    'book',
)




urls.py
urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls'))
]





用restful可以很快做一个API接口
在book  app中创建一个文件serializers.py 序列化就是把查询的结果转变成json格式




 
book/serializers.py 

#导入序列化的类  
from rest_framework import serializers

#导入模型
from book.models import BookCategory,Book

# 二级分类的序列化
class CategorySerializer2(serializers.ModelSerializer):

    class Meta:
        # 指定要序列化的模型
        model = BookCategory
        # 指定要序列化的字段  "__all__"表示所有字段
        fields = "__all__"


# 一级分类的序列化
class CategorySerializer(serializers.ModelSerializer):

    # sub_category 是models.py中 BookCategory.parent_category中related_name的值
    #关联二级分类 使用CategorySerializer2  多对一的关系用many=True
    sub_category = CategorySerializer2(many=True)

    class Meta:
        model = BookCategory
        fields = "__all__"
        
#把模型的字段一一映射起来 序列化的结果集转化成json字符串  





        
  book/views.py


# Create your views here.

from django.shortcuts import render
#导入rest_framework封装好的视图
from rest_framework import mixins,viewsets

from book.models import BookCategory
from book.serializers import CategorySerializer

class CategoryViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,viewsets.GenericViewSet):
    """所有图书分类"""
    #queryset 根据类型查询一级分类结果集
    queryset = BookCategory.objects.filter(category_type = 1)
    serializer_class = CategorySerializer

    
    
    
RESTfulDemo/urls.py

   from django.conf.urls import url,include
from django.contrib import admin
#导入rest_framework的默认路由
from rest_framework.routers import DefaultRouter
#导入视图
from book.views import CategoryViewSet
#导入API接口文档
from rest_framework.documentation import include_docs_urls

#配置Category的url 路由
router = DefaultRouter()

#注册路由  相当于二级路由  
router.register(r'categorys',CategoryViewSet,base_name='categorys')
#会自动生成url
# ^ ^categorys/$ [name='categorys-list']
# ^ ^categorys\.(?P<format>[a-z0-9]+)/?$ [name='categorys-list']
# ^ ^categorys/(?P<pk>[^/.]+)/$ [name='categorys-detail']
# ^ ^categorys/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='categorys-detail']



urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^',include('app.urls')),
    url(r'^',include(router.urls)), #添加到一级路由
    url(r'^docs/',include_docs_urls(title="学习图书"))

] 



测试  http://10.8.152.31:8888/docs/

    
    

官网的实例

请求工具 
curl

httpie安装

windeows下安装 
$ pip install --upgrade pip setuptools
$ pip install --upgrade httpie

Linux 安装
# Debian, Ubuntu, etc.
$ apt-get install httpie


发get请求
$ http httpie.org

发put请求
Custom HTTP method, HTTP headers and JSON data:
$ http PUT example.org X-API-Token:123 name=John

 


# 创建项目目录
mkdir tutorial
cd tutorial

# 创建虚拟环境,并进入虚拟环境中
virtualenv env
source env/bin/activate

# 安装django 和 REST framework
pip install django
pip install djangorestframework

# 创建项目和app
django-admin.py startproject tutorial
cd tutorial
django-admin.py startapp quickstart
cd ..

 创建数据库:
python manage.py migrate

创建一个超级用户admin,密码是password123。我们将会在接下来的例子中使用这个账户。
python manage.py createsuperuser



创建一个新的模块叫 tutorual/quickstart/serializers.py


from django.contrib.auth.models import User, Group
from rest_framework import serializers

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url','username','email','groups')
     

class GroupSerializer(serializers.HyperlinkModelSerializer):
    class Meta:
        model = Group
        fields = ('url','name')
               
        
 这里我们使用 hyperlinked(HyperlinkedModelSerializer)。你也可以使用primary key和各式各样其他的关系。但是 hyperlinking是一个好的RESTful设计。




tutorial/quickstart/views.py

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from quickstart.serializers import UserSerializer, GroupSerializer

class UserViewSet(viewsets.ModelViewSet):
    """
    API允许查看和编辑 用户
    """
    queryset = User.object.all().order_by('-data_joined')
    serializer_class = UserSerializer
    
    
class GroupViewSet(viewsets.ModelViewSet):
    """
    API允许查看和编辑 组
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
    
    
将有共同行为的各式各样的View归为一类并称之为 ViewSets




tutorual/urls.py

from django.contrib import admin 
from django.conf.urls import url, include
from rest_framework import routers
from quickstart import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]


因为我们使用了viewsets来替代views,我们能够自动产生我们API的URL,只要在router中简单的注册一下我们的viewsets。
同样,如果我们需要更多的控制我们的API URLs,我们能够在简单的在下面使用常规的 class-based views,并写入url conf中。
最后,我们使用 browsable API来导入默认的登录登出Views.这是可选的。




tutorial/settings.py

INSTALLED_APPS = (
    ...
    'rest_framework',
)

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
    ],
    'PAGE_SIZE': 10
}



https://segmentfault.com 
    
测试 http://10.8.152.31:8888/

猜你喜欢

转载自blog.csdn.net/huiyinimen/article/details/83550131