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. 1.使用Entity Framwork框架常用的技术手段Code First 和Reverse Engineer Code First

    提示:VS版本2013,  Entity Framwork版本5.0.0,Mysql数据库  使用Entity FrameWork的好处就不多说,直接上手如何使用.两种形式:1.将代码映射到数据库实体 ...

  2. [读书笔记]C#学习笔记一: .Net Framwork

    前言: 一次偶然的机会  在园子里看到@Learning hard 出版的一本书: <<C#学习笔记>>, 然后买来 一直到现在读完, 感觉很不错, 适合入门, 书中内容是从C ...

  3. C#笔记一 .Net Framwork

    参考Learning hard本人在博客园的主页: http://www.cnblogs.com/zhili/     以及本书中的一些知识点: http://www.cnblogs.com/zhil ...

  4. 018如何建立自动化框架 how to bulid the framwork

    本讲包括: 一. objective 二. How to bulid 三. Keyview of frawork (关键视图) 四. conclusion automation framwork:自动 ...

  5. Entity Framwork db First 中 Model验证解决办法。

    由于项目中用到 Entity Framwork db First     每次从数据库生成数据模型之后都会把模型更新. 只要有一个表更新.所有的类都会重新生成. 在网上找了各种例子都是差不多的, 可能 ...

  6. 温故而知新之java的collection framwork

    经常用到的List,Map等这些数据结构,都是来自于java的util包下,而java对于其整体设计,简称为collection framwork.(ps.其实,Map接口并不继承自collectio ...

  7. rabbitmq支持.net framwork 3.5的最后版本

    方便后来人!!!经过一系列的确认!! rabbitmq支持.net framwork 3.5的最后版本是3.4.3, 安装步骤: 1.工具->Nuget程序包管理器,进入控制台 2.Instal ...

  8. REST framwork之分页器,路由器,响应器

    一 REST framwork分页器: from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination ...

  9. 记录一次BUG修复-Entity Framwork SaveChanges()失效

    目录 一. 前言 二.问题背景 三.问题描述 四.问题解决步骤 六.总结 一. 前言 这是笔者在参与一个小型项目开发时所遇到的一个BUG,因为项目经验不足对Entity Framwork框架认识不足导 ...

随机推荐

  1. centos7 下安装Apache2+MariaDB+PHP5过程详解

    1.启用Apache2 Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装,可以 yum install -y httpd 启动服务:systemctl start httpd ...

  2. MySQL注入与防御

    1.简介 1.1.含义 在一个应用中,数据的安全无疑是最重要的.数据的最终归宿都是数据库,因此如何保证数据库不被恶意攻击者入侵是一项重要且严肃的问题! SQL注入作为一种很流行的攻击手段,一直以来都受 ...

  3. puppet使用 apache passsenger 作为前端 (debian)

    目录 1. 概要 2. nginx + passenger 配置 2.1. package 安装 2.2. 配置文件设置 2.3. 测试配置结果 2.4. 参考网址 概要 之前做过 apache + ...

  4. #004 C语言大作业学生管理系统试着做

    链表不会用 文件不会使 在这种情况下就边写边做 希望这个月能做完这个作业 #include<stdio.h> #include<stdlib.h> #include<st ...

  5. linux远程目录共享

    一.环境介绍 1.服务器说明: 有两台服务器,(1)101报表服务器,上面是tomcat跑的原生FineReport报表系统,(2)103业务服务器,上面是具体的业务系统. 2.需求说明: 报表文件由 ...

  6. 12.scrapy框架之递归解析和post请求

    今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久 ...

  7. 大数据计算平台Spark内核全面解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着Spark在大数据计算领域的暂露头角,越来越多的 ...

  8. postgresql 按日期范围查询

    Timestamp without timezone 方法一: select * from user_info where create_date >= '2015-07-01' and cre ...

  9. UML各种图

    UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言.下面将对UML的九种图+包图的基本概念进行介绍以及各 ...

  10. 【ES6】import, require,export

    node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转 ...