rest framwork 小试身手
models.py
from django.db import models class Course(models.Model):
"""
课程表
"""
title = models.CharField(verbose_name='课程名称',max_length=32)
course_img = models.CharField(verbose_name='课程图片',max_length=64)
level_choices = (
(1,'初级'),
(2,'中级'),
(3,'高级'),
)
level = models.IntegerField(verbose_name='课程难易程度',choices=level_choices,default=1) def __str__(self):
return self.title class CourseDetail(models.Model):
"""
课程详细
"""
course = models.OneToOneField(to='Course')
slogon = models.CharField(verbose_name='口号',max_length=255)
why = models.CharField(verbose_name='为什么要学?',max_length=255)
recommend_courses = models.ManyToManyField(verbose_name='推荐课程',to='Course',related_name='rc') def __str__(self):
return "课程详细:"+self.course.title class Chapter(models.Model):
"""
章节
"""
num = models.IntegerField(verbose_name='章节')
name = models.CharField(verbose_name='章节名称',max_length=32)
course = models.ForeignKey(verbose_name='所属课程',to='Course') def __str__(self):
return self.name
urls.py
from django.conf.urls import url,include
from api.views import course
urlpatterns = [
url(r'^course/$', course.CourseView.as_view({'get':'list'})),
url(r'^course/(?P<pk>\d+)$', course.CourseView.as_view({'get':'retrieve'})),
url(r'^test$', course.test),
]
course.py
from rest_framework.views import APIView
from rest_framework.response import Response
from api import models from rest_framework import serializers class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = models.Course
fields = "__all__" class CourseDetailSerializer(serializers.ModelSerializer): # one2one/fk/choice
title = serializers.CharField(source='course.title')
img = serializers.CharField(source='course.course_img')
level = serializers.CharField(source='course.get_level_display') # m2m
recommends = serializers.SerializerMethodField() class Meta:
model = models.CourseDetail
fields = ['course','title','img','level','slogon','why','recommends'] def get_recommends(self,obj):
# 获取推荐的所有课程
queryset = obj.recommend_courses.all() return [{'id':row.id,'title':row.title} for row in queryset] # View
# APIView
# GenericAPIView
from rest_framework.viewsets import GenericViewSet,ViewSetMixin,ModelViewSet
class CourseView(ViewSetMixin,APIView): def list(self,request,*args,**kwargs):
"""
课程列表接口
:param request:
:param args:
:param kwargs:
:return:
"""
ret = {'code':1000,'data':None} try:
queryset = models.Course.objects.all()
ser = CourseSerializer(instance=queryset,many=True)
ret['data'] = ser.data
except Exception as e:
ret['code'] = 1001
ret['error'] = '获取课程失败' return Response(ret) def retrieve(self,request,*args,**kwargs):
"""
课程详细接口
:param request:
:param args:
:param kwargs:
:return:
"""
ret = {'code': 1000, 'data': None} try:
# 课程ID=2
pk = kwargs.get('pk') # 课程详细对象
obj = models.CourseDetail.objects.filter(course_id=pk).first() ser = CourseDetailSerializer(instance=obj,many=False) ret['data'] = ser.data except Exception as e:
ret['code'] = 1001
ret['error'] = '获取课程失败' return Response(ret) def test(request,*args,**kwargs):
from django.shortcuts import HttpResponse
obj = models.Course.objects.filter(id=2).first()
print(obj.title)
print(obj.level) #
print(obj.get_level_display() ) #
return HttpResponse('...')
访问
http://127.0.0.1:8000/api/v1/course/
返回结果如下

访问
http://127.0.0.1:8000/api/v1/course/1
返回结果如下

rest framwork 小试身手的更多相关文章
- 1.使用Entity Framwork框架常用的技术手段Code First 和Reverse Engineer Code First
提示:VS版本2013, Entity Framwork版本5.0.0,Mysql数据库 使用Entity FrameWork的好处就不多说,直接上手如何使用.两种形式:1.将代码映射到数据库实体 ...
- [读书笔记]C#学习笔记一: .Net Framwork
前言: 一次偶然的机会 在园子里看到@Learning hard 出版的一本书: <<C#学习笔记>>, 然后买来 一直到现在读完, 感觉很不错, 适合入门, 书中内容是从C ...
- C#笔记一 .Net Framwork
参考Learning hard本人在博客园的主页: http://www.cnblogs.com/zhili/ 以及本书中的一些知识点: http://www.cnblogs.com/zhil ...
- 018如何建立自动化框架 how to bulid the framwork
本讲包括: 一. objective 二. How to bulid 三. Keyview of frawork (关键视图) 四. conclusion automation framwork:自动 ...
- Entity Framwork db First 中 Model验证解决办法。
由于项目中用到 Entity Framwork db First 每次从数据库生成数据模型之后都会把模型更新. 只要有一个表更新.所有的类都会重新生成. 在网上找了各种例子都是差不多的, 可能 ...
- 温故而知新之java的collection framwork
经常用到的List,Map等这些数据结构,都是来自于java的util包下,而java对于其整体设计,简称为collection framwork.(ps.其实,Map接口并不继承自collectio ...
- rabbitmq支持.net framwork 3.5的最后版本
方便后来人!!!经过一系列的确认!! rabbitmq支持.net framwork 3.5的最后版本是3.4.3, 安装步骤: 1.工具->Nuget程序包管理器,进入控制台 2.Instal ...
- REST framwork之分页器,路由器,响应器
一 REST framwork分页器: from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination ...
- 记录一次BUG修复-Entity Framwork SaveChanges()失效
目录 一. 前言 二.问题背景 三.问题描述 四.问题解决步骤 六.总结 一. 前言 这是笔者在参与一个小型项目开发时所遇到的一个BUG,因为项目经验不足对Entity Framwork框架认识不足导 ...
随机推荐
- Shell脚本常用模板
作为一个运维人员编写Shell脚本是很平常的,一个格式好的脚本不仅赏心悦目,后期自己和别人也易于维护. 下面的脚本就是我自己的shell编写格式,如下: [root@mini05 -]# cat te ...
- 第八章 计时器(BEEPER1)
*------------------------------------- BEEPER1.C -- Timer Demo Program No. (c) Charles Petzold, ---- ...
- Spring的AOP基于AspectJ的注解方式开发1
参考自黑马培训机构 创建项目,引入jar包 编写目标类,切面类并完成配置 package spring.day2_aop2; /* * 编写目标类 */ public class OrderDao { ...
- 【Teradata】日期类型计算
1.EXTRACT(抽取年/月/日/时/分/秒) //抽取年/月/日/时/分/秒 SELECT EXTRACT (YEAR FROM CURRENT_DATE); SELECT EXTRACT (M ...
- [ZJOI2018]胖
嘟嘟嘟 都说这题是送分题,但我怎么就不觉得的呢. 看来我还是太弱了啊-- 大体思路就是对于每一个设计方案,答案就是每一个关键点能更新的点的数量之和. 关键在于怎么求一个关键点能更新那些点. 首先这些点 ...
- hive 压缩 差不多出来数据 各种压缩 数据格式
待学习 DeprecatedLzoTextInputFormat
- 深入学习Redis:Redis内存模型
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 一.Redis内存统计 工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计 ...
- mysql安装-CentOS6下解压安装mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
删除已经安装版本 yum list installed mysql [root@localhost ~]# yum list installed mysql Loaded plugins: faste ...
- linux内存源码分析 - 内存回收(lru链表)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的收缩,所以 ...
- Java验证工具类
在项目中使用Java经常有验证功能的使用,比如手机号,密码等验证. 总结一下,写出个工具类方便以后用的时候直接引. package com.common.utils; import org.apach ...