符合RESTful规范的API
统一使用的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的更多相关文章
- yii2restful规范的api使用
说明:restful是一套优秀的接口调用规范. 使用规范: 1,安装yii2 使用composer安装 安装完 Composer,运行下面的命令来安装 Composer Asset 插件: php c ...
- [01] 浅谈RESTful风格的API
1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...
- restful规范和restframework框架
什么是接口? 接口可以理解为url就是接口. 那么在其他语言里面接口也可以是约束类 restful规范是什么? RESTful是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便 ...
- django中的restful规范
基于django的原生restful规范 主路由:url.py from django.conf.urls import url, include from django.contrib import ...
- restful规范与rest_framework
django两种开发模式: 一.前后端不分离项目 二.前后端分离项目 什么是restful规范? 在前后端不分离的项目中,网页所需要的数据可以直接通过模板渲染的方式传递到前端页面,并且可以很好的支持d ...
- Restframework框架总结及restful规范
1. django rest framework框架的作用? 帮助开发者可以快速开发出遵循restful规范的API 2. django rest framework框架都有哪些组件(10)? -版本 ...
- 基于Django的Rest Framework框架的RESTful规范研究
一.什么是RESTful规范 总的来说:RESTful规范就是一个非技术,人为约定的一个面向资源的架构理念. REST与技术无关,代表的是一种软件架构风格,REST是Representational ...
- 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架
一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...
- RESTful 规范
RESTful 规范 前言 rest 是一种软件架构风格,如果使用的是 rest 接口,那么就可以说你的接口是 restful. rest接口是围绕''资源''展开的,利用 HTTP 的协议,其实 r ...
随机推荐
- 雷林鹏分享:Ruby CGI 编程
Ruby CGI 编程 Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的. 使用Ruby您不仅可以编写自己的SMTP服务器,FT ...
- express 调优的一个过程和心得,不错的文章
Netflix的软件工程师Yunong Xiao最近在公司的技术博客上写了一篇文章,分析了他所在的团队在将Netflix网站UI转移到Node.js上时遇到的延迟问题.在文章中他描述了找到问题根本原因 ...
- php--------网页开发实现微信JS的(定位,地图显示,照片选择功能)
今天说说微信网页开发中一下JS的功能,分享一下,希望对各位有所帮助. 前提:要有公众号,和通过微信认证,绑定域名,得到相应信息,appid,appsecret等. 微信开发文档:https://mp. ...
- 个人知识管理系统Version1.0开发记录(12)
最近碰到个问题,在五个工作日内阅读一个百万行左右代码量的新项目集合,如何解决呢? 第一个工作日,环境观察.待在那个项目组,看项目成员们在做些什么事情,开发,测试,聊天,或多或少可以收集到一些项目相关的 ...
- Unsupported major.minor version 51.0解决办法(转)
我使用的是Eclipse-jee-indigo + JDK 1.6.23环境,结果使用时出现Unsupported major.minor version 51.0错误提示,下面我来介绍Unsuppo ...
- HDU 4633 Who's Aunt Zhang ★(Polya定理 + 除法取模)
题意 用K个颜色给魔方染色,魔方只能整体旋转并且旋转重合的方案算一种,求一共有多少不同的染色方案. 思路 经典的Polya应用,记住正六面体的置换群就可以了,魔方就是每个大面变成9个小面了而已: 本题 ...
- [转载]浏览器中输入url 并且按下回车之后发生了什么?
解析URL 浏览器通过 URL 能够知道下面的信息: Protocol "http" 使用HTTP协议 Resource "/" 请求的资源是主页(index) ...
- 解决Myeclipse闪退问题
才安装好Myeclipse就出了问题,打开之后没过多久就自动退出了,看了好多解决方法都无效,后来才找到正确路径,转载过来方便跟我遇到同样问题的小伙伴,尽快解决 转载自:http://blog.csdn ...
- HTML, CSS. JS的各种奇淫技巧
1. js 中为了省字节,性能, 防止被重写等发明了各种写法,记录下 //取整 parseInt(a,10); //Before Math.floor(a); //Before a>>0; ...
- 关于C#引用dll动态链接库文件的注释问题
1.dll动态库文件项目生成属性中要勾选"XML文档文件" 注意:1).要选中项目,查看项目属性,选中解决方案是找不到的.2).XML文件的名字不要修改. 2.添加引用时XML文件 ...