栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第三节 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//', StudentViewSet.as_view({'get': 'retrieve'}))



22. 待学习

23. 推送

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号