drf框架使用之 路飞学城(第一天)
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框架使用之 路飞学城(第一天)的更多相关文章
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- django环境部署 crm和路飞学城
环境依赖 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-de ...
- linux vue uwsgi nginx 部署路飞学城 安装 vue
vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...
- python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- 路飞学城Python-Day59(第五模块复习题)
HTML div标签是块级标签,单独一行,可以作为其他标签的容器,没有特定含义 span是内联标签,可以作为文本内容的容器,没有特定含义 1. 查询一下对div和span标签的理解 不同的标签有自己含 ...
- 路飞学城Python-Day59(第五模块记录)
HTML部分 <!DOCTYPE html> <html lang="en"> <head> <!--head标签的主要作用:文档的头部主 ...
- 路飞学城Python-Day53
01-jquery的介绍 JS在做项目或者是实现功能的时候,用JS去操作DOM元素非常复杂,代码量大,重复性代码也多 多个元素使用for循环遍历也是非常麻烦的,对于JS使用来说加大了难度 jQuery ...
- 路飞学城Python-Day14
转载:python之路-路飞学城-python-book [25.常用模块-logging模块详解] [26.常用模块-logging模块详解2] [27.常用模块-logging模块日志过滤和日志文 ...
- day75:luffy:路飞学城项目后端环境搭建&Git相关知识点
目录 1.Xadmin 1.Xadmin介绍 2.Xadmin安装 3.Xadmin的使用 2.项目环境搭建 1.外部依赖 2.依赖包安装 3.搭建项目 3.Git 4.日志配置 5.异常处理 6.创 ...
随机推荐
- Java CAS同步机制 实践应用
利用CAS实现原子操作类AtomicInteger (这是自定义的AtomicInteger:java有封装好的原子操作AtomicInteger类): class AtomicInteger { p ...
- java删除文件支持通配符
原文:https://blog.csdn.net/wdzayyt/article/details/7209530 感谢原作者 package com.covics.zfh; import java.i ...
- ECharts 从后台动态获取数据 (asp.net)
(一) 使用工具 visual studio 2017:Web开发:asp.net (代码中的js引用路径以及ajax方法调用的url,记得修改哦) (二) 准备工作(此处写给和我一样小白) 1.动态 ...
- 【爬虫】如何用python+selenium网页爬虫
一.前提 爬虫网页(只是演示,切勿频繁请求):https://www.kaola.com/ 需要的知识:Python,selenium 库,PyQuery 参考网站:https://selenium- ...
- 福利之——如何写好年终总结PPT
撰写年终总结PPT大致分三个步骤(TDR三部曲): 第一步:确定大纲(THINK) 第二步:优化PPT(DESIGN) 第三步:练习演讲(REHEARSE) 让领导看见你的成绩,听明白你未来的‘宏伟计 ...
- Maven 新手入门+命令大全
Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 官方文档(English): http://maven.apache.org/index.html Maven ...
- linux一些工具的安装(三)
linux(vmware15 centos7)中Docker安装 一.Docker卸载 1.查看已安装的docker安装包 $yum list installed|grep docker 执行后的 ...
- [JAVA]字节数组流
import java.io.*; public class ByteArrayStream { public static void main(String[] args) { byte[] dat ...
- fiddler 按条件过滤
使用fiddler抓包过程中最希望获取自己想要的数据,不重要的信息最希望的是过滤,如果重要和不重要的数据都展示对我们在寻找资源的时候产生了很大的干扰,所以我们需要按条件过滤: 1.启用fiddler ...
- Creating Excel files with Python and XlsxWriter——Introduction
XlsxWriter 是用来写Excel2007版本以上的xlsx文件的Python模块. XlsxWriter 在供选择的可以写Excel的Python模块中有自己的优缺点. #---------- ...