一个简易的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应用程序都可以利用这个思 ...
随机推荐
- Linux 硬件信息命令
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/cpuinfo| g ...
- 神奇的口袋(dp)
有一个神奇的口袋,总的容积是40,用这个口袋可以变出一 些物品,这些物品的总体积必须是40. John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品 的体积分别是a1,a2……an.John可 ...
- javascript 字符串函数
字符串的截取 str.substring(0,index) 字符串转换为日期 <script> var s = "2017-04-10"; var d = s.repl ...
- LeetCode 回溯法 别人的小结 八皇后 递归
#include <iostream> #include <algorithm> #include <iterator> #include <vector&g ...
- day01 初识Python
今日主要内容 1.初识python 2.简单了解下python的数据类型 nubmer=int(input("请输入数字大小:")) if nubmer>66: print( ...
- node(1) npm是什么?node的异步概念
NPM是随同的NodeJS一起安装的包管理工具 他可以做什么? 1.可以从NPM服务器下载别人的东西使用 2.可以把自己的东西传到NPM服务器,让别人下载使用 淘宝的镜像会快一点 cnpm ...
- Problem B 一元二次方程类
Description 定义一个表示一元二次方程的类Equation,该类至少具有以下3个数据成员:a.b和c,用于表示方程“a*x*x + b*x +c = 0”.同时,该类还至少具有以下两个成员函 ...
- UGUI动态绑定事件
using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine. ...
- L255
If a farmer wishes to succeed, he must try to keep a wide gap between his consumption and his produc ...
- php ,session 详解.
session是根据php.ini中的配置, 存储在 服务器端 ; 生成的sessionId ,也是根据 php.ini 的配置 存储在 客户端cookie中. session的设置: 存储方式:se ...