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. siimpleHttpServer 快速建立一个文件服务器

    利用 SimpleHTTPServer 可以非常快速的建立一个http服务器,如果有同学在做共享文件时遇到了困难,只需要一行代码,即可建站完成. 在想要映射的文件夹目录内,执行命令行 python - ...

  2. 关于WeakEventManger的引用

    在引用WeakEventManger时,代码里添加的命名空间是System.Windows,但项目引用的却是WindowsBase,真奇葩.

  3. 使用nginx mirror 制作nexus 的简单ha

      主要是运行两台nexus 机器,通过nexus 的host 以及proxy 以及public 模型,结合nginx 的mirror 将对于host 的get 请求 mirror 到另一台机器pro ...

  4. edgedb 集成timescaledb

    timescaledb 是一个强大的pg 扩展,可以让我们的pg 数据库支持时序数据库的能力,以下测试下与edgedb 集成 预备 因为edgedb 当前是基于pg11 开发的,所以需要使用pg11 ...

  5. java中移位运算

    转自: https://blog.csdn.net/wk1134314305/article/details/74891419

  6. Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术

    一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...

  7. php 合并图片 (将活动背景图片和动态二维码图片合成一张图片)

    <?php //案例一:将活动背景图片和动态二维码图片合成一张图片 //图片一 $path_1 = './background.png'; //图片二 $path_2 = './FU0851_2 ...

  8. FileUpload上传

    单文件上传: ASPX: <div> <!-- 文件上传 --> <asp:FileUpload ID="FileUpload1" runat=&qu ...

  9. ios同步线程(dispatch_sync)保证代码在主线程中执行

    - (BOOL)transitionToNextPhase { // 保证代码在主线程 if (![[NSThread currentThread] isMainThread]) { dispatch ...

  10. 分布式job-任务调度(一)

    什么是任务调度: 任务调度:在单位时间内,去调用某个方法或者执行某段代码 java实现方式: 方法一(使用线程实现): public static void ThreadTskScheduling() ...