一个简易的drf的项目例子
luffy_city
1.项目介绍
今日内容:(路飞项目) contentType组件:
路飞学成项目,有课程,学位课(不同的课程字段不一样),价格策略 问题, 如何设计表结构,来表示这种规则
为专题课,添加三个价格策略
查询所有价格策略,并且显示对应的课程名称
通过课程id,获取课程信息和价格策略 创建vue项目(目录结构介绍)
node.js 安装
vue脚手架:npm install -g @vue/cli
vue create 项目名字
用pycharm开发vue的项目
项目目录结构:
-node_modules 项目依赖
-public 单页面开发(index是主页)
-src ---开发项目就跟它打交道
-assets 放静态文件
-components 放组件的
-views 放的也是组件,但是他是页面组件
-App.vue 主页面
-main.js 项目主js(所有的配置,需要在里面写),入口
-router.js 路由配置相关
-store.js vuex组件相关的,状态管理器
-package.json 项目所有的依赖
一个组件中,都会有三部分:
-template 模板
-script 写js代码
-style 写样式
element-ui
-npm install element-ui
- vue跟django数据通信(axios) -npm install axios vue操作cookie并保存
npm install vue-cookies 登陆接口 课程列表
-vue路由携带参数跳转
前面加一个冒号:后面传一个字典,指定name:路由的名字,params:是携带的参数 <router-link :to="{name:'coursedetail',params:{'id':course.id}}">
{{course.name}}
</router-link> 课程详情页面
2.重点
、models. 、APIView 、ViewSetMixin 、serializers 、response 、utils ------response
2、models
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation
# Create your models here. class User(models.Model):
name = models.CharField(max_length=)
pwd = models.CharField(max_length=)
type = models.ImageField(choices=((,"common"),(,"VIP"),(,"SVIP")),default=)
bely = models.IntegerField()
def __str__(self):
return self.name class UserToken(models.Model):
user = models.OneToOneField("User",on_delete=models.CASCADE)
token = models.CharField(max_length=) #专题课
class Course(models.Model):
'''
专题课程
唯一性约束,名字不能重复
'''
name = models.CharField(max_length=,unique=True)
course_img = models.CharField(max_length=,verbose_name="课程图片")
brief = models.CharField(max_length=,verbose_name="课程概述")
level_choices = ((,"初级"),(,"中级"),(,"高级"))
level = models.SmallIntegerField(choices=level_choices,default=)
pub_date = models.DateField(verbose_name="发布日期",blank=True,null=True)
period = models.PositiveIntegerField(verbose_name="建议学习周期(days)",default=)
order = models.IntegerField("课程顺序",help_text="从上一个课程数字往后排")
status_choices = ((,"上线"),(,"下线"),(,"预上线"))
status = models.SmallIntegerField(choices=status_choices,default=)
price_policy = GenericRelation("PricePolicy") def __str__(self):
return self.name class Meta:
verbose_name_plural = "专题课--" class CourseDetail(models.Model):
course = models.OneToOneField("Course",on_delete=models.CASCADE)
hours = models.IntegerField('课时')
course_slogan = models.CharField(max_length=,blank=True,null=True)
recommend_courses = models.ManyToManyField("Course",related_name="recommend_by",blank=True)
teachers = models.ManyToManyField("Teacher",verbose_name="课程讲师") def __str__(self):
return self.course class Meta:
verbose_name_plural = "课程详细" class PricePolicy(models.Model):
'''
价格与有课程小气表
'''
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type','object_id')
valid_period_choices = ((,"1 day"),(,"3 天"),(,"7天"))
valid_period = models.SmallIntegerField(choices=valid_period_choices)
price = models.FloatField() class Meta:
unique_together = ("content_type","object_id","valid_period")
verbose_name_plural = "价格策略" def __str__(self):
return "%s(%s)%s"%(self.content_type,self.get_valid_period_display(),self.price) class Teacher(models.Model):
name = models.CharField(max_length=)
image = models.CharField(max_length=)
brief = models.TextField(max_length=) def __str__(self):
return self.name class Meta:
verbose_name_plural = "讲师"
admin.py
from django.contrib import admin # Register your models here.
from app01 import models admin.site.register(models.Course)
admin.site.register(models.CourseDetail)
admin.site.register(models.PricePolicy)
admin.site.register(models.Teacher)
admin.site.register(models.User)
admin.site.register(models.UserToken)
urls.py
from django.contrib import admin
from django.urls import path
from app01.views import courseview urlpatterns = [
path('admin/', admin.site.urls),
path('course/', courseview.Course.as_view({'get':'get_all','post':'add_course'})),
path('course/(?P<id>\d+)', courseview.Course.as_view({'get':'get_one','delete':'deletecourse'})),
]
views文件夹下的courseview.py
from app01 import models
from rest_framework.views import APIView
from rest_framework.viewsets import ViewSetMixin
from app01.Myser import CourseSer
from rest_framework.response import Response
from app01.utils import MyResponse class Course(ViewSetMixin,APIView): def get_all(self,request,*args,**kwargs):
response = MyResponse()
course_list = models.Course.objects.all()
courseSer = CourseSer(instance=course_list,many=True)
response.msg = "查询成功"
response.data = courseSer.data
return Response(response.get_dic) def get_one(self,request,*args,**kwargs):
pass
def add_course(self,request,*args,**kwargs):
pass
def deletecourse(self,request,*args,**kwargs):
pass
Myser.py
from rest_framework import serializers
from app01 import models class CourseSer(serializers.ModelSerializer):
class Meta:
model = models.Course
fields = '__all__'
utils.py 作为工具
class MyResponse():
def __init__(self):
self.status =
self.msg = None @property
def get_dic(self):
return self.__dict__
一个简易的drf的项目例子的更多相关文章
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— WebAPI项目主体结构(四)
目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 5.0 WebAPI项目主体结构 5.1 总体结 ...
- ENode 2.0 - 第一个真实案例剖析-一个简易论坛(Forum)
前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.目前这个论坛在UI上是使用了 ...
- Angularjs,WebAPI 搭建一个简易权限管理系统
Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一) 1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...
- 使用 RxJS 实现一个简易的仿 Elm 架构应用
使用 RxJS 实现一个简易的仿 Elm 架构应用 标签(空格分隔): 前端 什么是 Elm 架构 Elm 架构是一种使用 Elm 语言编写 Web 前端应用的简单架构,在代码模块化.代码重用以及测试 ...
- 如何搭建一个简易的 Web Terminal(一)
前言 在介绍本篇文章的时候,先说一下本篇文章的一些背景.笔者是基于公司的基础建设哆啦 A 梦(Doraemon)一些功能背景写的这篇文章,不了解.有兴趣的同学可以去 袋鼠云 的 github 下面了解 ...
- 撸了一个简易的配置中心,顺带整合到了SpringCloud
大家好,我是三友~~ 最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud. 本文大纲 配置中心的概述 随着历史的车轮不断的前进,技术不断的进步,单体 ...
- 基于 getter 和 setter 撸一个简易的MVVM
Angular 和 Vue 在对Angular的学习中,了解到AngularJS 的两个主要缺点: 对于每一次界面时间,Ajax 或者 timeout,都会进行一个脏检查,而每一次脏检查又会在内部循环 ...
- [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多 ...
- 在eclipse中配置一个简单的spring入门项目
spring是一个很优秀的基于Java的轻量级开源框架,为了解决企业级应用的复杂性而创建的,spring不仅可用于服务器端开发,从简单性.可测试性和松耦合性的角度,任何java应用程序都可以利用这个思 ...
随机推荐
- List<Map<String, Object>>取值
List<Map<String, Object>> postlist //一个list里面装着多个map,如下 [ {A=0100, B=4}, {A=0200, B=3}, ...
- [HDU3726]Graph and Queries
Problem 给你一张图,点的权值,边和几个操作: D x: 删除第x条边 Q x y: 询问包含x的联通块中权值第y大的权值 C x y: 将x这个点的权值改为y Solution 一看就要离线处 ...
- linux:NFS
1.简介 2.安装 安装分为服务端和客户端 [1]我们先拿一台机做服务端 yum install nfs-utils rpcbind -y 然后我们查查看安装没有,查询一个包是否被安装# rpm -q ...
- JavaScript -基础- 函数与对象
一.JavaScript三对象 1.分类方式一 1)ECMAScript JavaScript的ECMA规范 JS本身的对象 2)Dom 操作HTML相关 3)BOM游览器对象 游览器窗口对象,全局的 ...
- TensorFlow学习笔记——节点(constant、placeholder、Variable)
一. constant(常量) constant是TensorFlow的常量节点,通过constant方法创建,其是计算图(Computational Graph)中的起始节点,是传入数据. 创建方式 ...
- 三. Python基础(3)--语法
三. Python基础(3)--语法 1. 字符串格式化的知识补充 tpl = "我是%s,年龄%d,学习进度100%" %('Arroz',18) print(tpl) # 会提 ...
- sys.argv]的用法
Python中 sys.argv[]的用法简明解释 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果, ...
- tp配置
<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE ...
- leetcode55:跳跃游戏
解题思路1: 从头往后找每一个为0的元素,判断这个0能够跳过,所有的0都能跳过,则返回True,否则返回False 解题思路2: 从前往后遍历数组,设置一个访问到当前位置i时最远可调到的距离maxle ...
- python3自学第二天,模块,三元运算
1.模块的认识. sys模块,os模块等 如何引入模块 import os cmd_res1=os.system("dir") # 执行命令dir,不保存结果 print(cmd_ ...