0731 #Django rest framework

FBV:Function base views
def index(request):
    if request.method == 'POST':
        return HTTPresponse(‘ok’)
    elif request.method == 'GET':
        return render(request,'index.html')

CBV : class base views
URLS:    
    urlpatterns=[
        url(r'^index/',views.Index.as_view())
    ]
    注:url(r'^index/',views.Index.as_view())是固定用法


views.py
from django import views
class Index(views.View):
    def get(self,request):
        return render(request,'index.html')
        
    def post(self,request):
        print(request.POST)
        return render(request,'index.html')
        
    注意事项:
        1.CBV定义时一定要继承django.views.View
        2.注册路由的时候要写类名 .as_view()
        3.具体原理:dispatch()方法中利用反射找到每个请求要执行的
    
    2.前后端分离
        1.前端:
            - APP
            - PC网站    
            - 移动端网站
    
        2.后端提供    JSON格式数据
        
        3.接口(API)是什么?
            URL
        4.小项目
            1. 使用Django 的视图 自己序列化
                1. HttpResponse
                2. JsonResponse
            2. 使用Django REST Framework 框架的序列化工具类
                1. 安装
                    pip install djangorestframework
                2. 导入
                    from rest_framework import serializers
                3. 使用
                    class ArticleSerializer(serializers.Serializer):

官方网址:

 

http://www.django-rest-framework.org/

 

中文文档:

 

https://q1mi.github.io/Django-REST-framework-documentation/

 

实例:
from
django.http import JsonResponse from app01 import models from rest_framework import serializers class DBG(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField() create_time = serializers.DateField() update_time = serializers.DateField() type = serializers.CharField(source='get_type_display') school = serializers.CharField(source="school.name")
#和ORM类绑定的序列化
class CYM(serializers.ModelSerializer): class Meta: model = models.Article #绑定的哪一个类 fields = '__all__'  #['id','name','title'] depth = 1 #官方推荐不超过10层 有外键关联时,才需要设置depth参数 def list1(request): query_set = models.Article.objects.all() print(query_set) xbg = CYM(query_set,many = True)
  return JsonResponse(xbg.data,safe=False)

参数解释:

many=True  表示能序列化多个对象


补充知识点:
    1. pip
        1. pip安装包临时指定 从国内的清华pip源下载:
            pip install django==1.11.11 -i https://pypi.tuna.tsinghua.edu.cn/simple
        2. 将虚拟环境的依赖包关系导出到requirements.txt    
            pip freeze > requirements.txt
            
        3. 按照 requirements.txt 安装项目依赖的第三方包
            pip install -r requirements.txt
    2. 在单独py文件运行django orm语句
        import os

        if __name__ == "__main__":
            os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_drf.settings")
            import django
            django.setup()

            from app01 import models
            ...
    
    3. 可调用对象
        def xx(arg):
            if callable(arg):
                print(arg())
            else:
                print(arg)

        xx('呵呵')
        xx(lambda:'嘿嘿嘿')

posted @ 2018-07-31 19:32  Murray穆  阅读(116)  评论(0编辑  收藏  举报