第三节 Django rest framework 序列器与视图集

第一部分

Django rest framework

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.创建虚拟环境
 mkvirtualenv -p /usr/bin/python3 drfstudy

在这里插入图片描述

2. 下载 Django 环境
pip install django -i https://pypi.douban.com/simple

在这里插入图片描述

3. 下载 djangorestframework 环境
  pip install djangorestframework -i https://pypi.douban.com/simple

在这里插入图片描述

4. 查看
 pip list

在这里插入图片描述

5. 创建项目 
  django-admin startproject drfstudy

在这里插入图片描述
在这里插入图片描述

6. 用 pycharm 新建一个项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击 CREATE

在这里插入图片描述

7. 配置同步目录

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.同步、下载

在这里插入图片描述

在这里插入图片描述

9. 配置 pycharm 运行项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开机服务后访问失败情况

在这里插入图片描述

在服务器内部试试能不能访问,结果提示端口被占用

在这里插入图片描述

于是在服务器重新转发一个新的端口8001使用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务开机后,成功访问

在这里插入图片描述

10. 配置作者信息

在这里插入图片描述

11. 使用 root 用户登录

	mysql -uroot -p

在这里插入图片描述

12. 创建一个新的数据库
	create database `drfstudy` charset='utf8';

在这里插入图片描述

13. 创建数据库对应的用户及赋予它权限

grant all privileges on drfstudy.* to 'drfstudyu'@'%' identified by 'qwe123';
flush privileges;

在这里插入图片描述
在这里插入图片描述

14. 创建完数据库及其用户后,退出root用户,使用创建的用户登录

在这里插入图片描述

15. 想要使用Django操作这个数据库,需要下载安装pimysal

pip install pymysql -i https://pypi.douban.com/simple

在这里插入图片描述

16. 重启pycharm
17. 注册pymysql引擎

    import pymysql
	pymysql.install_as_MySQLdb()

在这里插入图片描述

18.关于配合
[client]
database = drfstudy
user = drfstudyu
password = qwe123
host = 127.0.0.1
port = 3306
default-character-set = utf8

在这里插入图片描述
在这里插入图片描述

19. 第一次迁移映射

在这里插入图片描述

 makemigrations
 migrate

在这里插入图片描述
在这里插入图片描述

20. 注册 (Django rest framework 是一款APP)

在这里插入图片描述

21. 时序的配置

在这里插入图片描述

22. 配置 host

在这里插入图片描述

23. 配置日志器,记录网站的日志信息
import os

# 配置日志器,记录网站的日志信息
LOGGING = {
    # 版本
    'version': 1,
    # 是否禁用已存在的日志器
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(BASE_DIR, "logs/drfstudy.log"),  # 日志文件的位置
            'maxBytes': 300 * 1024 * 1024,
            'backupCount': 10,
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {  # 定义了一个名为django的日志器
            'handlers': ['console', 'file'],
            'propagate': True,
            'level': 'INFO',  # 日志器接收的最低日志级别
        },
    }
}

24. 配置过滤信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

25. push 项目初始化到仓库

在这里插入图片描述
在这里插入图片描述

第二部分

1. 新建一个APP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 因为我们的项目目录不比较多,新建一个apps目录用于存放所有的APP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

资源目录标记可取消

在这里插入图片描述

删除不同步到虚拟机,需要在虚拟机进行收到删除。

在这里插入图片描述

3.注册apps
 import sys
 # 把 apps 目录加入到 sys.path 中
 sys.path.insert(0, BASE_DIR)  # 项目根目录
 sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))   # 当前项目目录下的apps路径

在这里插入图片描述

4.注册user

在这里插入图片描述

5.先写models.py文件

class Student(models.Model):
    SEX_CHOICES = (
        (0, '女'),
        (1, '男'),
    )
    name = models.CharField(max_length=30, verbose_name='姓名')
    age = models.CharField(verbose_name='年龄', null=True, blank=True)
    sex = models.CharField(verbose_name='性别', null=True, blank=True)
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'student'

在这里插入图片描述

6. 映射迁移
 makemigrations
 migrate
 如果提交没有反应,则先推上去,在打开manage.py

在这里插入图片描述
在这里插入图片描述

7.序列化

在这里插入图片描述

8.创建 user app的序列化器

在这里插入图片描述

9. ModelSerializer 比 Serializer 方便

在这里插入图片描述

"""
    序列化器
        本质就是一个类,和模型类差不多的类
        用于JSON格式与模对象进行互转以及校验数据

        定义的属性就是要参与转换的字段

        序列化器字段可以少于或多于模型类字段(属性)

        定义返回的数据有哪些字段

""" 
from rest_framework import serializers
from .models import Student

class StudentSerializer(serializers.ModelSerializer):
   class Meta:
       model = Student  # 指定序列化器映射的模型类
       fields = '__all__'  # fields指定映射字段__all__表示所有字段
       # fields = ['id', 'name', 'age']  # 只映射id,name,age
       # exclude = ['id']  # 映射除id字段之外的所有字段
       # 修改映射字段
       extra_kwargs = {
           'age': {'min_value': 0, 'max_value': 200},
       }

   # 追加额外的校验逻辑
   def validate_name(self, value):
       if 'python' not in value.lower():
           raise serializers.ValidationError('name error')
       return value

   # # 对象级别的额外验证
   #
   # def validate(self, data):
   #     if 'python' not in data['name'].lower():
   #         raise serializers.ValidationError('name error')
   #     return data

 

在这里插入图片描述

11. 编写视图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.response import Response
from .models import Student
from .serializers import StudentSerializer
# Create your views here.

class StudentViewSet(viewsets.ViewSet):
    def list(self, request):
        # 获取所有的学生信息,返回的是模型类集合
        student = Student.objects.all()
        # 序列化: 实例化序列化器。传入要转换的模型集合,如果是多条数据一般我们加一个参数many=True
        serializer = StudentSerializer(student, many=True)
        # 返回响应: 返回序列化后的数据
        return Response(serializer.data)

在这里插入图片描述

12. 写路由

在这里插入图片描述
在这里插入图片描述

13.运行、请求

在这里插入图片描述

14. 创建学生

    def create(self, request):
        # 获取前端传入的数据
        serializer = StudentSerializer(data=request.data)  # 得到的是前端的数据,我们需要转模型,反序列化
        # 校验
        serializer.is_valid(raise_exception=True)

        # 保存数据
        serializer.save()
        # 返回响应: 返回序列化数据
        return Response(serializer.data)


在这里插入图片描述

from django.urls import path
from .views import StudentViewSet

urlpatterns = [
    path('student/', StudentViewSet.as_view({'get': 'list', 'post': 'create'}))
]

在这里插入图片描述

15. 运行请求效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

16.条件显示1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

18. 条件显示2

在这里插入图片描述

19.关于年龄校验效果

在这里插入图片描述
在这里插入图片描述

20. 关于姓名校验效果

在这里插入图片描述
在这里插入图片描述

21. 查单
 def retrieve(self, request, pk):
        try:
            student = Student.objects.get(id=pk)
        except Student.DoesNotExist:
            return Response(status=HTTP_404_NOT_FOUND)

        serializer = StudentSerializer(instance=student)  # instance 序列化 , data 反序列化
        return Response(serializer.data)

在这里插入图片描述


 path('student/<pk>/', StudentViewSet.as_view({'get': 'retrieve'}))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

22. 待学习

在这里插入图片描述

23. 推送

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY2065

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值