luffy_city
1.项目介绍
今日内容:(路飞项目) 1 contentType组件: 路飞学成项目,有课程,学位课(不同的课程字段不一样),价格策略 问题,1 如何设计表结构,来表示这种规则 2 为专题课,添加三个价格策略 3 查询所有价格策略,并且显示对应的课程名称 4 通过课程id,获取课程信息和价格策略 2 创建vue项目(目录结构介绍) 1 node.js 安装 2 vue脚手架:npm install -g @vue/cli 3 vue create 项目名字 4 用pycharm开发vue的项目 5 项目目录结构: -node_modules 项目依赖 -public 单页面开发(index是主页) -src ---开发项目就跟它打交道 -assets 放静态文件 -components 放组件的 -views 放的也是组件,但是他是页面组件 -App.vue 主页面 -main.js 项目主js(所有的配置,需要在里面写),入口 -router.js 路由配置相关 -store.js vuex组件相关的,状态管理器 -package.json 项目所有的依赖 6 一个组件中,都会有三部分: -template 模板 -script 写js代码 -style 写样式 7 element-ui -npm install element-ui - 3 vue跟django数据通信(axios) -npm install axios 4 vue操作cookie并保存 npm install vue-cookies 5 登陆接口 6 课程列表 -vue路由携带参数跳转 前面加一个冒号:后面传一个字典,指定name:路由的名字,params:是携带的参数 <router-link :to="{name:'coursedetail',params:{'id':course.id}}"> {{course.name}} </router-link> 7 课程详情页面
2.重点
1、models. 2、APIView 3、ViewSetMixin 4、serializers 5、response 6、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=32) pwd = models.CharField(max_length=32) type = models.ImageField(choices=((1,"common"),(2,"VIP"),(3,"SVIP")),default=1) 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=128) #专题课 class Course(models.Model): ''' 专题课程 唯一性约束,名字不能重复 ''' name = models.CharField(max_length=128,unique=True) course_img = models.CharField(max_length=255,verbose_name="课程图片") brief = models.CharField(max_length=128,verbose_name="课程概述") level_choices = ((0,"初级"),(1,"中级"),(2,"高级")) level = models.SmallIntegerField(choices=level_choices,default=1) pub_date = models.DateField(verbose_name="发布日期",blank=True,null=True) period = models.PositiveIntegerField(verbose_name="建议学习周期(days)",default=7) order = models.IntegerField("课程顺序",help_text="从上一个课程数字往后排") status_choices = ((0,"上线"),(1,"下线"),(2,"预上线")) status = models.SmallIntegerField(choices=status_choices,default=0) 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=128,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,"1 day"),(3,"3 天"),(7,"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=32) image = models.CharField(max_length=128) brief = models.TextField(max_length=128) 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 = 100 self.msg = None @property def get_dic(self): return self.__dict__