Django REST framework 初体验

Django REST framework

1. 背景

最近在断断续续学习Python,并将Python投入至实际生产中。团队研发的模式是前后端分离,之前有尝试直接使用Django写API,没问题可以运行,但相比其他语言感觉还是蹩脚,所以尝试看看有没有更好的方式,今天就体验Django REST framework的一些感受分享一下。

1.1. 前后端分离的好处:

前端现在有越来越强大的框架,后端也有很多语言可以实现接口,将前后端分离有助于技术栈的选择和配合,也能更好的让技术人员发挥长板。

对于一个系统存在多个使用端的时候,比如微信、App、网站,前后端分离后大部分接口是可以直接复用的。

2. Django REST framework 简介

Django REST framework 是一套基于Django框架编写RESTful风格API的组件。

2.1. Django REST framework 的特点:

a) Serializers(序列化):简单来说就是将复杂的数据结构变成JSON或XML格式,支持ORM和非ORM数据源的序列化。

Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can then be easily rendered into JSON, XML or other content types. Serializers also provide deserialization, allowing parsed data to be converted back into complex types, after first validating the incoming data.

b) Authentication(身份认证):快速实现支持Auth1、Auth2方式的权限验证。

c) Request and Response(请求与响应):扩展了常规的HttpResquest和TemplateResponse。

d) ViewSet and Routers(视图集和路由):类似与Java框架的Controllers
……

3. 小试牛刀

3.1. 配置环境

Python 版本: 3.6

pip install django==2.0.6
pip install djangorestframework==3.8.2

3.2. 创建项目

django-admin.py startproject study20180721
cd study20180721

3.3. 创建App

python manage.py startapp product

3.4. 在/study20180721/settings.py添加App

INSTALLED_APPS = (
    ...
    'rest_framework',
    'product',
)

3.5. 配置 /study20180721/urls.py

from django.conf.urls import url, include

urlpatterns = [
    url(r'^product/', include('product.urls')),
]

3.6. 编写model层 /product/model.py

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=8,decimal_places=2

    def __str__(self):
          return self.name

3.7. 配置数据库

python manage.py makemigratons
python manage.py migrate

3.8. 编写序列化模块 /product/serializer.py

from rest_framework import serializers
from .models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ("id","name","price")

3.9. 编写视图 /product/views.py

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import generics

from .models import Product
from .serializers import ProductSerializer

# 使用APIView
class ProductView(APIView):
    def get(self, request, format=None):
        product = Product.objects.all()
        serializer = ProductSerializer(product, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = ProductSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

3.10. 编写路由 /product/urls.py

from django.conf.urls import  url
from . import views

urlpatterns = [
    url(r'^api/$', views.ProductView.as_view(), name='product'),
]

3.11. 测试

curl http://localhost:8000/product/api/
curl -X POST http://localhost:8000/product/api/ -d "name=iPhone8&price=168.88"
curl http://localhost:8000/product/api/

4. 参考资料

4.1. 官方网站

http://www.django-rest-framework.org/
https://github.com/encode/django-rest-framework/

4.2. 参考文档

Django Rest Framework--oauth实验笔记--参考官方文档
https://blog.csdn.net/yu359697395/article/details/78918840

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 版权: https://github.com/haiiiiiyun/awesome-django-cn Aweso...
    若与阅读 22,995评论 3 241
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,956评论 1 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,436评论 6 428
  • Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由伯乐在线持续更...
    dxl1236阅读 4,615评论 2 33
  • 马不停蹄的一日,情绪有起伏,但事件也有推进,该做的还是按时完成了。这就是最正常的“无惊无险又到六点”的工作常态吧。...
    eyes275阅读 913评论 0 0