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框架认识不足导 ...
随机推荐
- windows平台下实现高可用性和可扩展性-ARR和HLB
本文档提供了关于如何将应用程序请求路由(ARR)与硬件负载均衡器一起使用以实现高可用性和可伸缩性的说明性指导.本文采用F5大IP负载均衡器来说明ARR与硬件负载平衡器之间的工作关系. IIS7.0及以 ...
- sqli-labs安装
平台:Win7 SP1 需要准备的东西: 1. Sqli-labs ,下载地址: https://github.com/Audi-1/sqli-labs 2.phpstudy ...
- python3编写网络爬虫19-app爬取
一.app爬取 前面都是介绍爬取Web网页的内容,随着移动互联网的发展,越来越多的企业并没有提供Web页面端的服务,而是直接开发了App,更多信息都是通过App展示的 App爬取相比Web端更加容易 ...
- python 基本数据类型--字符串实例详解
字符串(str) :把字符连成串. 在python中⽤', ", ''', """引起来的内容被称为字符串 . 注意:python中没有单一字符说法,统一称叫字 ...
- n阶方阵的最值问题和对角线的和问题
如题! package 矩阵2; public class JuZheng { public static void main(String args[]) { int array[][] = { { ...
- 【HNOI2018】毒瘤
[HNOI2018]毒瘤 设\(f_{v,0}\)表示\(v\)的子树中\(v\)不选的方案数,\(f_{v,1}\)表示\(v\)选的方案数. 显然 \[ f_{v,0}=\prod (f_{sn, ...
- 「APIO2017」商旅
「APIO2017」商旅 题目描述 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所深深吸引,决定定居于此,做一个商人.科巴有 \(N\) 个集市, ...
- 微信小程序如何引入外部字体库iconfont的图标
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 微信小程序不能识别很多文件, 其中就包括外部的字体文件. 那我们怎么突破他的防火线呢, ...
- 洛谷 P2404 自然数的拆分问题
题目链接 https://www.luogu.org/problemnew/show/P2404 题目背景 木有...... 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. ...
- npm install 安装报错:npm ERR! EPERM npm ERR! -4048 npm ERR! Error: EPERM: operation not permitted, unlink 'D:\test\demo\code\materialT\node_modules\.staging'
更新项目依赖包,删除掉package-lock.json.node_modules,运行npm install,报如上错误信息,查询资料说是没有权限,本人用管理员身份打开powershell,运行np ...