1.Django配置回顾
1.路由分发 include
2.app注册 :app在不使用数据库相关操作时,可以不注册;drf使用前必须注册;总之注册就好了 补充:注册会加载app包下面的__init__文件
3.数据库配置:在setting文件中配置
3.orm 数据库配置
常用字段
后台向前台暴露文件资源 类似与静态资源配置static
前端访问
2.APIView的请求生命周期
3.请求解析模块
1. drf禁用了csrf认证规则 交给dispatch处理
2.自定义drf配置 请求数据格式
3. 向下兼容
4. 响应渲染模块
数据渲染的两种格式:数据渲染和 浏览器渲染(去restframework的setting文件查看)
解释:注释掉浏览器选然后,浏览器只能有数据渲染的方式,获得json格式的数据
5.序列化模块
1.序列化模块的引入
2.使用
##### models.py from django.db import models from django.conf import settings class User(models.Model): SEX_CHOICES = ((0, '男'), (1, '女')) name = models.CharField(max_length=64, verbose_name='姓名') password = models.CharField(max_length=64) age = models.IntegerField() height = models.DecimalField(max_digits=5, decimal_places=2, default=0) sex = models.IntegerField(choices=SEX_CHOICES, default=0) # sex = models.CharField(choices=[('0', '男'), ('1', '女')]) icon = models.ImageField(upload_to='icon', default='icon/default.png') # 自定义序列化给前台的字段 # 优点:1)可以格式化数据库原有字段的数据 2)可以对外隐藏原有数据库字段名 3)可以直接连表操作 @property # 所有字段都是插头 def gender(self): return self.get_sex_display() @property def img(self): return settings.BASE_URL + settings.MEDIA_URL + self.icon.name def __str__(self): return self.name ``` #### serializers.py 序列化核心 from rest_framework import serializers from . import models class UserModelSerializer(serializers.ModelSerializer): class Meta: # 该序列化类是辅助于那个Model类的 model = models.User # 设置参与序列化与反序列化字段 # 插拔式:可以选择性返回给前台字段(插头都是在Model类中制造) # fields = ['name', 'age', 'height', 'sex', 'icon] fields = ['name', 'age', 'height', 'gender', 'img'] ``` #### views.py from rest_framework.views import APIView from rest_framework.response import Response from . import models, serializers class UserAPIView(APIView): def get(self, request, *args, **kwargs): pk = kwargs.get('pk') if pk: # 单查 # 1)数据库交互拿到资源obj或资源objs # 2)数据序列化成可以返回给前台的json数据 # 3)将json数据返回给前台 obj = models.User.objects.get(pk=pk) serializer = serializers.UserModelSerializer(obj, many=False) return Response(serializer.data) else: # 群查 # 1)数据库交互拿到资源obj或资源objs # 2)数据序列化成可以返回给前台的json数据 # 3)将json数据返回给前台 queryset = models.User.objects.all() # many操作的数据是否是多个 serializer = serializers.UserModelSerializer(queryset, many=True) return Response(serializer.data) def post(self, request, *args, **kwargs): # 单增 # 1)从请求request中获得前台提交的数据 # 2)将数据转换成Model对象,并完成数据库入库操作 # 3)将入库成功的对象列化成可以返回给前台的json数据(请求与响应数据不对等:请求需要提交密码,响应一定不展示密码) # 4)将json数据返回给前台