1. 路飞学城第一天: 知识点 使用的是序列化与反序列化的使用:

1.创建一个公共相应的Json方法:

#创建一个公共响应的类:

class LuffyResponse():
def __init__(self):
self.status=''
self.msg=None
self.data=None
@property
def get_dic(self):
return self.__dict__ #公共异常类
class CommonException(Exception):
def __init__(self,msg):
self.msg=msg

创建一个commonutils.py文件

from rest_framework.response import Response
from rest_framework.views import APIView
from api import models
from api.utils.commonutils import LuffyResponse
from api.utils.commonutils import CommonException from api.luffyserializers import Courseserializers
from api.luffyserializers import CoursesDetailSerializers
from rest_framework.viewsets import ViewSetMixin
from django.core.exceptions import ObjectDoesNotExist
import uuid class LoginView(APIView):
def post(self, request):
response=LuffyResponse()
name = request.data.get('name')
pwd = request.data.get('pwd')
try:
user=models.UserInfo.objects.get(username=name,password=pwd) #判断用户是否存在,得到一个用户对象 token=uuid.uuid4() #通过uuid生成token类的字符串
ret=models.Token.objects.update_or_create(user=user,defaults={'key':token}) #直接保存修改原来的
response.token=token
response.name=name
response.msg='登录成功' except ObjectDoesNotExist as e: #完成程序的健壮性有问题直接抛出异常
response.status=101
response.msg='用户名或密码错误'
except Exception as e:
response.status=105
response.msg=str(e)
return Response(response.get_dic)

创建一个login接口

from rest_framework import serializers
from api import models class Courseserializers(serializers.ModelSerializer):
class Meta:
model = models.Course
fields = '__all__' price = serializers.SerializerMethodField() def get_price(self, obj):
price_policy = obj.price_policy.all().order_by('-price').first()
return price_policy.price class PolicyPriceSerializers(serializers.ModelSerializer):
class Meta:
model = models.PricePolicy
fields = ['price', 'valid_period', 'valid_per_display'] # valid_per_display=serializers.CharField(source='get_valid_period_display')
valid_per_display = serializers.SerializerMethodField() def get_valid_per_display(self, obj):
return obj.get_valid_period_display() class CoursesDetailSerializers(serializers.ModelSerializer):
class Meta:
model = models.CourseDetail
fields = '__all__' # 取出课程的所有价格策略
policy_price_list = serializers.SerializerMethodField() def get_policy_price_list(self, obj):
policy_list = obj.course.price_policy.all()
# policy_ser=PolicyPriceSerializers(instance=policy_list,many=True)
# return policy_ser.data return [{'id': policy.pk, 'valid_per_display': policy.get_valid_period_display(),'price':policy.price} for policy in policy_list] course_name=serializers.CharField(source='course.name') teachers=serializers.SerializerMethodField()
def get_teachers(self,obj):
teacher_list=obj.teachers.all() return [{'id':teacher.pk,'name':teacher.name} for teacher in teacher_list]

序列化组件实现 课程 课程套餐等

from rest_framework.response import Response
from rest_framework.views import APIView
from api import models
from api.utils.commonutils import LuffyResponse
from api.utils.commonutils import CommonException from api.luffyserializers import Courseserializers
from api.luffyserializers import CoursesDetailSerializers
from rest_framework.viewsets import ViewSetMixin
from django.core.exceptions import ObjectDoesNotExist
class CourseView(ViewSetMixin,APIView): def get_list(self, request, *args, **kwargs):
response = LuffyResponse()
try:
category=int(request.GET.get('category',None)) #获取课程的类型,转换为数字形式
course_list = models.Course.objects.all() if category:
course_list=course_list.filter(course_category_id=category) #过滤课程类型 course_ser = Courseserializers(instance=course_list, many=True) #开始序列化 response.data = course_ser.data #返回序列化好的数据 except Exception as e:
response.status = 105
response.msg = str(e)
# response.msg = '您的操作有误' return Response(response.get_dic) #单个课程详情接口
def get_detail(self, request, pk):
response = LuffyResponse()
try:
#注意:用course_id来查询
course_detail=models.CourseDetail.objects.get(course_id=pk)
course_detail_ser=CoursesDetailSerializers(instance=course_detail,many=False) response.data=course_detail_ser.data
response.msg='查询成功' except ObjectDoesNotExist as e:
response.status = 101
response.msg = '课程不存在'
except Exception as e:
response.status = 105
response.msg = str(e)
# response.msg = '您的操作有误' return Response(response.get_dic)

课程的接口,单个课程的接口和所有课程的接口

from django.conf.urls import url
from django.contrib import admin
from api.views import course,login
from django.views.static import serve
from luffy_city import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^courses/$', course.CourseView.as_view({'get':'get_list'})),
url(r'^login/$', login.LoginView.as_view()),
url(r'^courses/(?P<pk>\d+)', course.CourseView.as_view({'get':'get_detail'})),
url(r'^media/(?P<path>.*)', serve,{'document_root':settings.MEDIA_ROOT}), ] #注意: 使用了 ViewSetMixin 模块,就需要写 as_view({'get':'get_list'}) 模式里面需要传入字典来实现

url设置: 视图函数使用了ViewSetMixin

drf框架使用之 路飞学城(第一天)的更多相关文章

  1. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  2. django环境部署 crm和路飞学城

    环境依赖 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-de ...

  3. linux vue uwsgi nginx 部署路飞学城 安装 vue

    vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...

  4. python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  5. 路飞学城Python-Day59(第五模块复习题)

    HTML div标签是块级标签,单独一行,可以作为其他标签的容器,没有特定含义 span是内联标签,可以作为文本内容的容器,没有特定含义 1. 查询一下对div和span标签的理解 不同的标签有自己含 ...

  6. 路飞学城Python-Day59(第五模块记录)

    HTML部分 <!DOCTYPE html> <html lang="en"> <head> <!--head标签的主要作用:文档的头部主 ...

  7. 路飞学城Python-Day53

    01-jquery的介绍 JS在做项目或者是实现功能的时候,用JS去操作DOM元素非常复杂,代码量大,重复性代码也多 多个元素使用for循环遍历也是非常麻烦的,对于JS使用来说加大了难度 jQuery ...

  8. 路飞学城Python-Day14

    转载:python之路-路飞学城-python-book [25.常用模块-logging模块详解] [26.常用模块-logging模块详解2] [27.常用模块-logging模块日志过滤和日志文 ...

  9. day75:luffy:路飞学城项目后端环境搭建&Git相关知识点

    目录 1.Xadmin 1.Xadmin介绍 2.Xadmin安装 3.Xadmin的使用 2.项目环境搭建 1.外部依赖 2.依赖包安装 3.搭建项目 3.Git 4.日志配置 5.异常处理 6.创 ...

随机推荐

  1. python 基础之python的六大标准数据类型

    一:Number 数字类型(int  float  bool  complex) 1.整型: (正整数 0 负整数)#(1)二进制用0b表示intvar = 0b1010print(intvar)pr ...

  2. java-log4j日志打印

    参考路径: https://blog.csdn.net/edward0830ly/article/details/8250412 https://www.cnblogs.com/ITtangtang/ ...

  3. MSMQ .NET下的应用

    Message Message是MSMQ的数据存储单元,我们的用户数据一般也被填充在Message的body当中,因此很重要,让我们来看一看其在.net中的体现,如图: 在图上我们可以看见,Messa ...

  4. SoapUI简介及下载地址

    SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,mave ...

  5. CentOS下Redis的安装(转)

    目录 CentOS下Redis的安装 前言 下载安装包 解压安装包并安装 启动和停止Redis 启动Redis 停止Redis 参考资料 CentOS下Redis的安装 前言 安装Redis需要知道自 ...

  6. MARK DOWN 书写格式说明

    MarkdownPad2 书写格式说明: Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,而MarkdownPad2是其中一种支持M ...

  7. 交互课件用什么软件------承接教育类k12/幼儿html5交互课件/动画外包

    flash交互课件能生动表达教学内容,也深受广大教育工作者的喜爱,但是目前flash课件只能在pc电脑平台上进行展示,随着移动网络的发展,Adobe宣布2020年停止对flash更新和维护,越来越多的 ...

  8. [蓝桥杯]PREV-19.历届试题_九宫重排

    题目描述: 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 1 ...

  9. 使用命令行执行jmeter的方法

    1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...

  10. python excel表格操作

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...