Url

from django.contrib import admin
from django.urls import path, re_path
from django.urls import include urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path('^api/(?P<version>[v1|v2]\w+)/', include('app01.urls')),
]
from django.urls import path, re_path
from django.urls import include
from app01.views import account, coursehost, newspapers urlpatterns = [
re_path('login/$', account.LoginView.as_view()), re_path('course/$', coursehost.CourseView.as_view({"get": "list"})),
re_path('course/(?P<pk>\d+)/$', coursehost.CourseView.as_view({"get": "retrieve"})),
re_path(r'coursecategory/$', coursehost.CourseCategoryView.as_view({'get': 'list'})), ]

序列化

"""
* coding: utf-8 CreateTime:2019/12/18
Version: v1
DocName: account.py
Edit: Riven Effect: Course serializers SourceStorageLocation: RivenShop / app01 / views / coursehost.py
Modify and add function record:
ModifyTime:
1.
2.
Add function Time :
1.
2. """ from app01 import models
from rest_framework import serializers # Course
class CourseSerializer(serializers.ModelSerializer):
# (0, '初级'), (1, '中级'), (2, '高级') Can get value
course_type = serializers.CharField(source='get_course_type_display')
status = serializers.CharField(source='get_status_display')
level = serializers.CharField(source='get_level_display') class Meta:
model = models.Course
fields = ['id', 'name', 'course_type', 'level', 'sub_category', 'degree_course', 'course_img', 'status',
'brief', 'pub_date', 'period', 'attachment_path'] # CourseCategory
class CourseCategorySerializer(serializers.ModelSerializer):
class Meta:
model = models.CourseCategory
fields = '__all__' class CourseDetailSerializer(serializers.ModelSerializer):
# one2one/fk/choice Fk inquire
name = serializers.CharField(source='course.name')
img = serializers.CharField(source='course.course_img')
level = serializers.CharField(source='course.get_level_display') # m2m
recommend_courses = serializers.SerializerMethodField()
teachers = serializers.SerializerMethodField() # FK reverse
coursechapter = serializers.SerializerMethodField() class Meta:
model = models.CourseDetail
fields = ['id', 'hours', 'course_slogan', 'video_brief_link', 'why_study', 'what_to_study_brief',
'career_improvement', 'prerequisite', 'name', 'level', 'img', 'recommend_courses', 'teachers',
'coursechapter'] def get_recommend_courses(self, obj):
"""acquire recommend course"""
queryset = obj.recommend_courses.all()
return [{'id': row.id, 'name': row.name} for row in queryset] def get_teachers(self, obj):
"""acquire teachers all"""
obj = obj.teachers.all()
return [{'id': row.id, 'name': row.name} for row in obj] def get_coursechapter(self, obj):
"""acquire chapter all base on reverse"""
obj = obj.course.coursechapters.all() return [{'id': row.id} for row in obj]

视图

"""
* coding: utf-8 CreateTime:2019/12/17
Version: v1
DocName: account.py
Edit: Riven Effect: Supply data for Course SourceStorageLocation: RivenShop / app01 / views / Coursehost
Modify and add function record:
ModifyTime:
1.
2.
Add function Time :
1.
2. """ from app01 import models
from serializers.course import CourseCategorySerializer, CourseDetailSerializer, CourseSerializer from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.viewsets import ViewSetMixin class CourseCategoryView(ViewSetMixin, APIView):
"""
Course main class """ def list(self, request, *args, **kwargs): ret = {"code": 1000, "data": None}
try:
queryset = models.CourseCategory.objects.all()
ser = CourseCategorySerializer(instance=queryset, many=True)
ret['data'] = ser.data
except Exception as e:
ret['code'] = 1001
ret['error'] = '获取课程失败' return Response(ret) class CourseView(ViewSetMixin, APIView): def list(self, request, *args, **kwargs):
"""
Course list Api """ ret = {'code': 1000, 'data': None}
try:
queryset = models.Course.objects.all()
ser = CourseSerializer(instance=queryset, many=True)
print(ser.data)
ret['data'] = ser.data except Exception as e:
ret['code'] = 1001
ret['error'] = '获取课程失败' return Response(ret) def retrieve(self, request, *args, **kwargs):
""" CourseDetail api """ ret = {'code': 1000, 'data': None} try:
# Acquire course id
pk = kwargs.get('pk')
# CourseDetail object
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)

Django API接口FK ManyTo Many 模板的更多相关文章

  1. Django使用AJAX调用自己写的API接口

    Django使用AJAX调用自己写的API接口 *** 具体代码和数据已上传到github https://github.com/PythonerKK/eleme-api-by-django-rest ...

  2. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

  3. 初识Django —Python API接口编程入门

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

  4. Django FBV CBV以及使用django提供的API接口

    FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...

  5. Django项目:CMDB(服务器硬件资产自动采集系统)--03--03CMDB信息安全API接口交互认证

    #settings.py """ Django settings for AutoCmdb project. Generated by 'django-admin sta ...

  6. Django项目:CMDB(服务器硬件资产自动采集系统)--02--02CMDB将服务器基本信息提交到API接口

    AutoCmdb # urls.py """AutoCmdb URL Configuration The `urlpatterns` list routes URLs t ...

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

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

  8. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  9. 爬虫+django,打造个性化API接口

    简述 今天也是同事在做微信小程序的开发,需要音乐接口的测试,可是用网易云的开放接口比较麻烦,也不能进行测试,这里也是和我说了一下,所以就用爬虫写了个简单网易云歌曲URL的爬虫,把数据存入mysql数据 ...

随机推荐

  1. 032 SSM综合练习08--数据后台管理系统--jsp页面显示当前用户名

    1. 页面端标签控制权限 在jsp页面中我们可以使用spring security提供的权限标签来进行权限控制. (1)在pom文件中导入依赖 <dependency> <group ...

  2. Java开发笔记(一百四十二)JavaFX的对话框

    JavaFX的对话框主要分为提示对话框和文件对话框两类,其中提示对话框又分作消息对话框.警告对话框.错误对话框.确认对话框四种.这四种对话框都使用Alert控件表达,并通过对话框类型加以区分,例如Al ...

  3. 最少硬币数——Java

    问题:有n种硬币,面值分别为v1,v2,v3,…,vn,存于数组T[1:n]中,可以使用的各种面值的硬币个数存于数组Coins[1:n]中.对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法 ...

  4. IDEA 开发插件

    Alibaba Java Code Guidelines 阿里巴巴推出的一款Java代码规约扫描插件,按照<阿里巴巴Java开发手册>规定对代码风格以及质量进行实时检测.约束.强推.ecl ...

  5. sso cas 坑

    一个中文文档地址: http://www.cassso-china.cn/apereo_github_cas_5.2/apereo.github.io/cas/5.2.x/ ============= ...

  6. WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性)

    原文:WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性) 本文介绍如何使用 Windows 的 AppBar 相关 API 实现固定停靠在桌面上的特殊窗 ...

  7. 转:什么是DIP、IoC、DI

    DIP依赖倒置原则DIP(Dependency-Inversion Principles) IoC控制反转(Inversion of Control,IoC),简言之就是代码的控制器交由系统控制,而不 ...

  8. C# DataTable、DataSet、List、相互转换

      DataTable转LIst /// <summary> /// 利用反射将DataTable转换为List<T>对象 /// </summary> /// & ...

  9. 十二.作业难点(有IT大牛路过的可以帮我解答我的疑问?万分感谢)--转行的苦逼人

    今天开始改变写博客风格,其他不多说. 今天题目如下: # 7.写函数,完成以下功能: (8分) # 例如有: # user_list=[ # {"name": "alex ...

  10. 通过创建一个简单的骰子游戏来探究 Python

    在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示如何使用 Python 模块 Pygame 来创建一个图形化游戏.它将需要几篇文章才 ...