统一使用的utils,serializers:

class BaseResponse:

    def __init__(self):
self.code = 1000
self.data = None
self.error = None @property
def dict(self):
return self.__dict__

版本1:

from django.conf.urls import url
from api.views import course
from api import views urlpatterns = [
url(r"courses/$",course.CoursesView.as_view()),
url(r"courses/(?P<pk>\d+)/$",course.CourseDetailView.as_view()), ]

urls

from django.shortcuts import HttpResponse
from rest_framework.views import APIView
from rest_framework.versioning import URLPathVersioning
from rest_framework.response import Response
from api.serializers import course
from api import models
from api.utils.response import BaseResponse
from rest_framework.pagination import PageNumberPagination class CoursesView(APIView): def get(self,request,*args,**kwargs):
result = BaseResponse()
try:
queryset = models.Course.objects.all()
# 分页
page = PageNumberPagination()
course_list = page.paginate_queryset(queryset,request,self) # 分页之后的结果执行序列化
# 分页之后必须在序列化类中加上:instance=course_list
ser = course.CourseSerializers(instance=course_list,many=True)
# ser_obj = course.CourseSerializers(queryset,many=True) result.data = ser.data
# result.data = ser_obj.data
except Exception as e:
result.code = 500
result.error = "无法获取数据"
return Response(result.dict) class CourseDetailView(APIView):
def get(self,request,pk,*args,**kwargs):
result = BaseResponse()
try:
course_obj = models.Course.objects.get(id=pk)
ser_obj = course.CourseSerializers(instance=course_obj)
result.data = ser_obj.data
except Exception as e:
result.code = 500
result.error = "无法获取数据" return Response(result.dict)

views

# from rest_framework.viewsets import ModelViewSet
from rest_framework import serializers
from api import models class CourseSerializers(serializers.ModelSerializer):
level = serializers.CharField(source="get_level_display")
class Meta:
model = models.Course
fields = "__all__"
depth = 5 class DegreeSerializers(serializers.ModelSerializer):
teacher_name = serializers.SerializerMethodField()
# teacher_name = serializers.CharField(source="teachers.")
class Meta:
model = models.DegreeCourse
fields = ["name","teacher_name"] def get_teacher_name(self,row):
teacher_list = row.teachers.all()
return [{"name": i.name } for i in teacher_list] class DegreeScholarSerializers(serializers.ModelSerializer):
# scholar = serializers.CharField(source="scholarship_set.all")
scholar = serializers.SerializerMethodField()
class Meta:
model = models.DegreeCourse
fields = ["name","scholar"] def get_scholar(self,row):
scholar_list = row.scholarship_set.all()
return [{"scholar": i.value} for i in scholar_list] class DegreeMokuaiSerializers(serializers.ModelSerializer):
# degree_mokuai = serializers.CharField(source="")
# print(111)
class Meta:
model = models.DegreeCourse
fields = ["name"]
# fields = "__all__" class Course_Serializers(serializers.ModelSerializer):
level = serializers.CharField(source="get_level_display")
why_study = serializers.CharField(source="coursedetail.why_study")
what_to_study_brief = serializers.CharField(source="coursedetail.what_to_study_brief")
recommend_courses = serializers.SerializerMethodField()
class Meta:
model = models.Course
fields = ["name","level","why_study","what_to_study_brief","recommend_courses"] def get_recommend_courses(self,row):
recomment_list = row.coursedetail.recommend_courses.all()
return [{"id":item.id,"name":item.name} for item in recomment_list] class CourseQuestionSerializer(serializers.ModelSerializer):
# question = serializers.CharField(source="asked_question.all")
question = serializers.SerializerMethodField()
class Meta:
model = models.Course fields = ["name","question"] def get_question(self,row):
question_list = row.asked_question.all()
return [{"question":i.question,"answer":i.answer} for i in question_list] class CourseOutlineSerializers(serializers.ModelSerializer):
courseoutline = serializers.SerializerMethodField()
class Meta:
model = models.Course
fields = ["name","courseoutline"]
# fields = "__all__" def get_courseoutline(self,row):
outline_list = row.coursedetail.courseoutline_set.all()
return [{"courseoutline":i.title,"content":i.content} for i in outline_list] class CourseChapterSerializers(serializers.ModelSerializer):
course_chapter = serializers.SerializerMethodField() class Meta:
model = models.Course
fields = ["name","course_chapter"] def get_course_chapter(self,row):
course_chapter_list = row.coursechapters.all()
return [{"chapter": i.name} for i in course_chapter_list]

serializers

版本2:

  urls:

from django.conf.urls import url
from api.views import course
from api import views urlpatterns = [
# 如果as_view()里面要传参数的话,前提视图CBV必须继承 ViewSetMixin ,这样才能往as_view()中传入参数。
# 键值对的形式,表明了各请求方式对应的方法,所以特定的请求方式,便可执行相应的方法。
# 如果as_view()里写了相应的键值对,在视图CBV中必须写出相应的方法。 url(r'courses/$',course.CoursesView.as_view({'get':'list','post':'create'})), url(r'courses/(?P<pk>\d+)/$',course.CoursesView.as_view({'get':'retrieve','put':'update','delete':'destroy'}))
]

  views:

from django.shortcuts import HttpResponse
from rest_framework.views import APIView
from rest_framework.versioning import URLPathVersioning
from rest_framework.response import Response
from api.serializers import course
from api import models
from api.utils.response import BaseResponse
from rest_framework.pagination import PageNumberPagination
from rest_framework.viewsets import ViewSetMixin # 继承ViewSetMixin
class CoursesView(ViewSetMixin,APIView):
def list(self,request,*args,**kwargs):
result = BaseResponse()
try:
# 从数据库中获取数据
queryset = models.Course.objects.all()
ser_obj = course.CourseSerializers(queryset,many=True) result.data = ser_obj.data
except Exception as e:
result.code = 500
result.error = "无法获取数据"
return Response(result.dict) def create(self,request,*args,**kwargs):
'''
post方式,增加
:param request:
:param args:
:param kwargs:
:return:
'''
def retrieve(self,request,pk,*args,**kwargs):
'''
详细显示
:param request:
:param pk:
:param args:
:param kwargs:
:return:
'''
result = BaseResponse()
try:
course_obj = models.Course.objects.get(id=pk)
ser_obj = course.CourseSerializers(instance=course_obj)
# print(ser_obj)
result.data = ser_obj.data
# print(result.data)
except Exception as e:
result.code = 500
result.error = "无法获取数据"
return Response(result.dict) def update(self,pk,*args,**kwargs):
'''
put,更改
:param pk:
:param args:
:param kwargs:
:return:
''' def destroy(self,pk,*args,**kwargs):
'''
delete ,删除
:param pk:
:param args:
:param kwargs:
:return:
'''

版本3:

  urls:

from django.conf.urls import url
from api.views import course
from api import views urlpatterns = [
# 如果as_view()里面要传参数的话,前提视图CBV必须继承 ViewSetMixin ,这样才能往as_view()中传入参数。
# 键值对的形式,表明了各请求方式对应的方法,所以特定的请求方式,便可执行相应的方法。
# 如果as_view()里写了相应的键值对,在视图CBV中必须写出相应的方法。 url(r'courses/$',course.CoursesView.as_view({'get':'list'})), url(r'courses/(?P<pk>\d+)/$',course.CoursesView.as_view({'get':'retrieve'}))
]

  views:

from django.shortcuts import HttpResponse
from rest_framework.views import APIView
from rest_framework.versioning import URLPathVersioning
from rest_framework.response import Response
from api.serializers import course
from api import models
from api.utils.response import BaseResponse
from rest_framework.pagination import PageNumberPagination
from rest_framework.viewsets import ViewSetMixin
from rest_framework.mixins import ListModelMixin,CreateModelMixin,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,ListModelMixin
from rest_framework.viewsets import GenericViewSet class CoursesView(ListModelMixin,GenericViewSet):
queryset = models.Course.objects.all()
def list(self,request,*args,**kwargs):
result = BaseResponse()
try:
course_list = models.Course.objects.all()
ser_obj = course.CourseSerializers(course_list,many=True)
result.data = ser_obj.data
except Exception as e:
result.code = 500
result.error = "无法获取数据"
return Response(result.dict) def retrieve(self,request,pk,*args,**kwargs):
result = BaseResponse()
try:
course_obj = models.Course.objects.get(id=pk)
ser_obj = course.CourseSerializers(course_obj)
result.data = ser_obj.data
except Exception as e:
result.code = 500
result.error = "无法获取数据"
return Response(result.dict)

符合RESTful规范的API的更多相关文章

  1. yii2restful规范的api使用

    说明:restful是一套优秀的接口调用规范. 使用规范: 1,安装yii2 使用composer安装 安装完 Composer,运行下面的命令来安装 Composer Asset 插件: php c ...

  2. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  3. restful规范和restframework框架

    什么是接口? 接口可以理解为url就是接口. 那么在其他语言里面接口也可以是约束类 restful规范是什么? RESTful是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便 ...

  4. django中的restful规范

    基于django的原生restful规范 主路由:url.py from django.conf.urls import url, include from django.contrib import ...

  5. restful规范与rest_framework

    django两种开发模式: 一.前后端不分离项目 二.前后端分离项目 什么是restful规范? 在前后端不分离的项目中,网页所需要的数据可以直接通过模板渲染的方式传递到前端页面,并且可以很好的支持d ...

  6. Restframework框架总结及restful规范

    1. django rest framework框架的作用? 帮助开发者可以快速开发出遵循restful规范的API 2. django rest framework框架都有哪些组件(10)? -版本 ...

  7. 基于Django的Rest Framework框架的RESTful规范研究

    一.什么是RESTful规范 总的来说:RESTful规范就是一个非技术,人为约定的一个面向资源的架构理念. REST与技术无关,代表的是一种软件架构风格,REST是Representational ...

  8. 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架

    一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...

  9. RESTful 规范

    RESTful 规范 前言 rest 是一种软件架构风格,如果使用的是 rest 接口,那么就可以说你的接口是 restful. rest接口是围绕''资源''展开的,利用 HTTP 的协议,其实 r ...

随机推荐

  1. 并发编程-synchronized关键字大总结

    0.synchronized 的特点: 可以保证代码的原子性和可见性. 1.synchronized 的性质: 可重入(可以避免死锁.单个线程可以重复拿到某个锁,锁的粒度是线程而不是调用).不可中断( ...

  2. PrestaShop 1.7 订单生成后下载服务器出现 505 的错误

    PrestaShop 生成订单后下载,服务器上有 505 的错误. 经查看应该是服务器上的错误: Allowed memory size of 134217728 bytes exhausted (t ...

  3. Lightoj-1220

    https://vjudge.net/problem/LightOJ-1220 求x=bp中最大的p,x可能为负数. 因数分解,x=p1x1*p2x2*...*pnxn x=(p1x1'*p2x2'* ...

  4. VM虚拟机上在NAT模式下设置静态IP的做法

    1.问题:由于业务需要,个人笔记本电脑上用Vmware安装了3台Ubuntu虚拟机,现要求pc机连入局域网后,四台机器(3台ubuntu虚拟机+1台宿主机)能上网,并且,虚拟机要使用某一网段的固定IP ...

  5. 位于/var/log目录下的20个Linux日志文件

    位于/var/log目录下的20个Linux日志文件[译] from:http://buptguo.com/2014/01/16/linux-var-log-files/ 原文地址:20 Linux ...

  6. 条件查询、SQL、JPQL、HQL比较

    一.什么是JPQL 在 Java EE 中,JPQL( Java 持久性查询语言)是专门为Java 应用程序访问和导航实体实例设计的.JPQL是EJB2使用的查询语言EJB QL的扩展,它继承了EJB ...

  7. Jenkins插件开发(四)-- 插件发布

    上一篇blog介绍了插件开发中要注意的一些问题, 我们再来介绍插件开发完成后,如何上传到jenkins的插件中心(这里假设你的代码是放在github上的,使用svn或其他版本管理工具的请参考其他文章) ...

  8. Nginx 反向代理 如何在web应用中获取用户ip

    转载:http://blog.csdn.net/bao19901210/article/details/52537279 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断 ...

  9. sqlite常用语法详细介绍

    1.SQL语句的预编译:将语句转为数据流,执行语句前检查语句的语法,但不能知道语句是否能查出结果.此方法有返回值  预编译成功则返回SQLITE_OK----0否则返回SQLITE_ERROR---- ...

  10. 這是我既C語言作業寫博客後寫的第一篇博客

    這篇博客應該算是寫給我自己的博客吧,所以這裏我想用繁體字寫,因為我漸漸地發現我已經很少使用到繁體字了,日常QQ聊天都使用簡體字,繁體字都懶得切換了,但是為了不讓別人麻煩,在外界交流的時候我會使用簡體字 ...