2018-11-7 18:53:17
等把项目做完再发完整代码和github连接
这里只整理笔记和新学的知识点!
1.url的两种写法
urls.py
from django.conf.urls import url,include from app01.views import course urlpatterns = [
# 方式一 这种方法需要用判断
# url(r'^course/$', course.CourseView.as_view()),
# url(r'^course/(?P<pk>\d+)/$', course.CourseView.as_view()), # 方式二 用了请求方式对应方法这个方式
url(r'^course/$', course.CourseView.as_view({'get': 'list'})), url(r'^course/(?P<pk>\d+)/$', course.CourseView.as_view({'get': 'retrieve'})), url(r'^test$', course.test),
]
在第二种传参数的写法,也就是请求方式对应方法名,这种写法类必须继承 ViewSetMixin,因为这个类重写了as_View方法,可以传参数
如下代码
from rest_framework.viewsets import ViewSetMixin, APIView class CourseView(ViewSetMixin, APIView):
pass
2.在 serializers序例化的时候,一对多和多对多的序例化方式不同
如下代码
from app01 import models
from rest_framework import serializers class CourseDetailSerializer(serializers.ModelSerializer):
"""
课程详细序列化
"""
# one2one/fk/choice
# 跨表取title
title = serializers.CharField(source='course.title')
img = serializers.CharField(source='course.course_img')
level = serializers.CharField(source='course.get_level_display') # m2m 自定义方法 返回所要数据
recommends = serializers.SerializerMethodField()
chapter = serializers.SerializerMethodField() class Meta:
model = models.CourseDetail
fields = ['course', 'title', 'img', 'level', 'slogon', 'why', 'recommends', 'chapter'] def get_recommends(self, obj):
# 获取推荐的所有课程
queryset = obj.recommend_courses.all()
return [{'id': row.id, 'title': row.title} for row in queryset] def get_chapter(self, obj):
# 获取推荐的所有课程
queryset = obj.course.chapter_set.all()
return [{'id': row.id, 'name': row.name} for row in queryset]
3. 关于在modes中choice字段如何获取后面的中文 需要用 get_字段名_display() 这个方法
例:
level_choices = (
(1,'初级'),
(2,'中级'),
(3,'高级'),
)
level = models.IntegerField(verbose_name='课程难易程度',choices=level_choices,default=1)
序例化代码
from app01 import models
from rest_framework import serializers
class CourseSerializer(serializers.ModelSerializer):
"""
课程序列化
"""
level = serializers.CharField(source='get_level_display') # 使用了 get_level_display class Meta:
model = models.Course
fields = ['id', 'title', 'course_img', 'level']
vue部分也没啥,等做完项目直接上传github
就这些知识点,附上笔记!
s9day105 内容回顾:
- restful 规范(10)
- django rest framework框架(10)
- 跨域
- 为什么会有跨域?
- 绕过浏览器同源策略就可以跨域。
- jsonp
动态创建script标签
同源策略会阻止ajax请求;不阻止具有src属性的标签
<script src='xxxx'></script>
- cors
设置响应头 今日内容:
- vue
- api 内容详细:
1. vue
- 课程列表
- 课程详细 - 任务:
- 课程表
id title course_img level(choices)
- 课程详细(one2one 课程 )
id why 推荐课程
- 章节
id name
- 功能:
a. 课程列表显示图片 b. 课程详细显示:
- 为什么要学习这个课程
- 所有推荐课程
- 所有章节 2. api
1. 查询所有的课程
http://127.0.0.1:8000/api/v1/course/
练习:level变中文 2. 查询课程详细
http://127.0.0.1:8000/api/v1/course/1/
- 路由 as_view 是否添加参数,取决于视图继承的类
- 序列化
- depth
- source
例:
title = serializers.CharField(source='course.title')
- 自定义method
例:
recommends = serializers.SerializerMethodField() def get_recommends(self, obj):
# 获取推荐的所有课程
queryset = obj.recommend_courses.all()
return [{'id': row.id, 'title': row.title} for row in queryset] 练习:显示该课程相关的所有章节 this补充:
题目1:
var name = '景女神' function Foo(name,age){
this.name = name;
this.age = age;
this.getName = function(){
console.log(this.name); # 文州 (function(){
console.log(this.name); # 女神
})() }
} obj = new Foo('文州',19)
obj.getName() 题目2:
var name = '景女神' function Foo(name,age){
this.name = name;
this.age = age;
this.getName = function(){
console.log(this.name); # 文州
var that = this
(function(){
console.log(that.name); # 文州
})() }
} obj = new Foo('文州',19) obj.getName() 题目3:
var name = '景女神'
obj = {
name:'文州',
age: 19,
getName:function(){
console.log(this.name); # 文州
var that = this
(function(){
console.log(that.name); # 文州
})()
}
}
obj.getName() 作业:
1. 前后端流程
2. 图片
3. CC视频账号
4. git相关
- 安装git软件
- 注册github账号