11.7luffycity项目(2)

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账号
    
    

 

posted @ 2018-11-07 19:12  我想喝杨枝甘露~  阅读(158)  评论(0)    收藏  举报