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. 截取所有的winform runtime error

    https://stackify.com/csharp-catch-all-exceptions/ AppDomain.CurrentDomain.FirstChanceException += (s ...

  2. 自己用的vim插件

    一.Plugin 'VundleVim/Vundle.vim'. 二.Plugin 'Valloric/YouCompleteMe' let g:ycm_server_python_interpret ...

  3. 通过junit写unit test

    how to run test within junit & mvn: During team development , there are more than 1 person edit ...

  4. python的mysql小代码

    我因为懒,就想写个批量insert数据的小代码 这里是代码 # _*_ encoding:utf-8 _*_ import os import MySQLdb import numpy as np d ...

  5. influxdb 全家桶运行

    一个简单的demo,集成了telegraf,influxdb,chronograf,kapacitor,nginx,一张来自官方的参考图 组件集成图 环境准备 使用docker-compose doc ...

  6. Spring BOOT的学习笔记

    1,静态文件夹src/main/resources/static下的,图片必须放在images文件夹下才能访问,直接放在static下不能访问 2,配置热部署,否则修改下Html,图片都得重启 htt ...

  7. servlet_4

    过滤器入门 过滤器的概念及执行基本流程 过滤器的使用场景 过滤器的实现及基本配置 过滤器链 过滤器链的配置 使用注解的方式无法保证过滤器链的执行顺序,所以只能使用web.xml的配置 按照出现在web ...

  8. H5外包 微信小程序外包 小程序外包 就找北京动点开发团队

    长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:liuxiang0884 TEL:13911652504

  9. CentOs 设置静态IP

    1.修改网卡配置 编辑:vi /etc/sysconfig/network-scripts/ifcfg-eno49 通过ifconfig命令,查看在用的网卡(特别是网卡别名).也可以进入/etc/sy ...

  10. QQ聊天框变成方框口口口口的解决办法

    QQ聊天框变成方框口口口口的解决办法 安装了QQ拼音输入法6.0之后,发现 QQ聊天对话框好友名称变成框口口口口口,网上没有找到办法,卸载轻聊版,安装完整版9.03之后,再次启动就好了.