Django 的 REST framework 基础知识

news2025/1/13 10:32:02

系列文章目录

提示:阅读本章之前,请先阅读目录


文章目录

  • 系列文章目录
  • 前言
  • 1. 创建django项目
  • 2. 修改settings.py
  • 3. 根目录创建static文件夹
  • 4. 启动项目
  • 5. 创建数据表
  • 6. 创建一个超级管理员
  • 7. 登录django的admin后台
  • 8. 安装 REST framework
  • 9. 配置settings.py
  • 10. 重新生成数据表
  • 11. 配置urls.py路由
  • 12. 访问rest framework的登录
  • 13. 创建course app
  • 14. 配置course的apps.py
  • 15. 编写course的models.py
  • 16. 编写course的admin.py
  • 17. 把course加入app
  • 18. 创建数据表
  • 19. 编写serializers.py
  • 20. Django 原生的FBV和CBV编写接口


前言


1. 创建django项目

django-admin startproject 项目名称

在这里插入图片描述

2. 修改settings.py

修改

ALLOWED_HOSTS = ["*"]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_test',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': 3308
    }
}

新增

STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFIELS_DIRS = [
    os.path.join(BASE_DIR, "staticfiles")
]

3. 根目录创建static文件夹

4. 启动项目

python manage.py runserver

http://127.0.0.1:8000/
在这里插入图片描述

5. 创建数据表

python .\manage.py makemigrations
python .\manage.py migrate

6. 创建一个超级管理员

python .\manage.py createsuperuser
用户名 (leave blank to use 'xxxx'): smobee
电子邮件地址: xxxx@qq.com
Password:
Password (again):
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
密码只包含数字。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

7. 登录django的admin后台

http://127.0.0.1:8000/admin

在这里插入图片描述

8. 安装 REST framework

依赖requirements.txt

asgiref==3.2.7
certifi==2020.4.5.1
chardet==3.0.4
coreapi==2.3.3
coreschema==0.0.4
Django==3.0.6
django-filter==2.2.0
djangorestframework==3.11.0
idna==2.9
importlib-metadata==1.6.0
itypes==1.2.0
Jinja2==2.11.2
Markdown==3.2.2
MarkupSafe==1.1.1
Pygments==2.6.1
pytz==2020.1
requests==2.23.0
sqlparse==0.3.1
uritemplate==3.0.1
urllib3==1.25.9
zipp==3.1.0

官网

https://www.django-rest-framework.org/#installation

pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

9. 配置settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken',
]
REST_FRAMEWORK = {
    # 分页器
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    # 分页
    'PAGE_SIZE': 50,
    # 返回的时间格式
    'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
    # 返回的数据格式
    'DEFAULT_RENDER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    # 解析request.data
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
    # 全局权限
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated'
    ],
    # 认证方式
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ]
}

10. 重新生成数据表

python .\manage.py makemigrations

python .\manage.py migrate

在这里插入图片描述

11. 配置urls.py路由

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('api-auth/', include('rest_framework.urls')),
    path('admin/', admin.site.urls),
]

12. 访问rest framework的登录

http://127.0.0.1:8000/api-auth/login/

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

13. 创建course app

python .\manage.py startapp course

在这里插入图片描述

14. 配置course的apps.py

class CourseConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'course'
    verbose_name = '课程信息'

15. 编写course的models.py

from django.conf import settings
from django.db import models


class Course(models.Model):
    name = models.CharField(max_length=255, unique=True, help_text='课程名称', verbose_name='课程名称')
    introduction = models.TextField(help_text='课程介绍', verbose_name='课程介绍')
    price = models.DecimalField(max_digits=10, decimal_places=2, help_text='课程价格', verbose_name='课程价格')
    teacher = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, help_text='课程讲师',
                                verbose_name='课程讲师')
    create_at = models.DateTimeField(auto_now_add=True, help_text='创建时间', verbose_name='创建时间')
    update_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '课程信息'
        verbose_name_plural = '课程信息'
        ordering = ('price',)

    def __str__(self):
        return self.name

16. 编写course的admin.py

from django.contrib import admin
from .models import Course


@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    # 显示哪些字段
    list_display = ('name', 'introduction', 'teacher', 'price', 'create_at')
    # 搜索字段
    search_fields = list_display
    # 筛选字段
    list_filter = list_display

17. 把course加入app

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'course'
]

18. 创建数据表

python .\manage.py makemigrations

python .\manage.py migrate

在这里插入图片描述

19. 编写serializers.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author : zhongshaofeng
# File : serializers.py
# Time : 2023/6/30 0:06
from django.contrib.auth.models import User
from .models import Course
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        # 序列号所有字段,如果要序列化某些字段,写成元祖即可,('id', 'name', )
        fields = '__all__'


class CourseSerializer(serializers.ModelSerializer):
    # 引入外键
    teacher = serializers.ReadOnlyField(source='teacher.username')

    class Meta:
        model = Course
        fields = '__all__'
        # 设置深度
        depth = 2

# 带超链接的
# class CourseSerializer(serializers.HyperlinkedModelSerializer):
#     # 引入外键
#     teacher = serializers.ReadOnlyField(source='teacher.username')
#
#     class Meta:
#         model = Course
#         fields = '__all__'

20. Django 原生的FBV和CBV编写接口

import json

from django.shortcuts import render
from django.http import HttpRequest, JsonResponse, HttpResponse
from django.utils.decorators import method_decorator
from django.views import View
from django.views.decorators.csrf import csrf_exempt

from .models import Course

course_dict = {
    'name': '数学',
    'introduction': '这是一门数学哦',
    'price': 256.01
}


@csrf_exempt
def course_list(request: HttpRequest):
    """
    Django FBV 原生接口
    :param request:
    :return:
    """
    if request.method == 'GET':
        # 查询所有课程
        courses = Course.objects.all()
        # 等同于这种返回
        # return HttpResponse(json.dumps(courses), content_type='application/json')
        return JsonResponse(courses)

    if request.method == 'POST':
        # post的话,需要引入取消csrf认证
        # 序列化
        course = json.loads(request.body.decode('utf-8'))
        # return HttpResponse(json.dumps(course), content_type='application/json')
        return JsonResponse(course, safe=False)


# 这里的name='dispatch',是因为django路由进来时,先走的dispatch
@method_decorator(csrf_exempt, name='dispatch')
class CourseList(View):
    """
    Django 的 CBV 编写接口
    """
    
    def get(self, request: HttpRequest):
        return JsonResponse(course_dict)

    def post(self, request: HttpRequest):
        course = json.loads(request.body.decode('utf-8'))
        return HttpResponse(json.dumps(course), content_type='application/json')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Quiz 16_3-2: Databases | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Quiz 16_3-2: Databases单选题(1-10)操作题Autograder 1: Counting Email in a DatabaseAutograder 2: Multi-Table Database - Tracks Python for Everybody 课程简介 Python for Everybody 零基础程序设计&…

数据库管理-第八十七期 19c OCM之路-第一堂(02)(20230630)

第八十六期 19c OCM之路-第一堂(02) 本来计划是昨天写的,但是昨天突发膝盖筋膜炎,去骨科医院做了下治疗,前后两夜几乎无眠。本期内容主要是针对第一堂第四个考点:Manage application containers内容去做的…

Spring Boot中的@MessageMapping注解:原理及使用

Spring Boot中的MessageMapping注解:原理及使用 简介 在Web应用程序中,实现实时的双向通信是一项重要的功能。为了实现这种功能,需要使用WebSocket协议。Spring框架提供了Spring WebSocket模块来实现WebSocket通信。Spring Boot是基于Sprin…

《刷题日记03》链表

题目描述力扣https://leetcode.cn/problems/LGjMqU/ 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值…

实例003 像开始菜单一样漂亮的菜单

实例说明 Windows的开始菜单非常的独特,在菜单的旁边有一条竖着的彩条,彩条中还写着文字。这种独特的菜单能够使程序的界面看起来更加的漂亮。本例中就实现了这种菜单,运行本例弹出“打开菜单”时,就会看到菜单的左边有一个紫色的…

ChatGPT微调系列一:微调 流程

文章目录 前言一、啥叫微调二、为啥要微调三、不是所有模型都可以微调的四、总述微调的基本流程,以及涉及的主要函数,参数1. 安装2. 准备训练数据3. openai.api_key os.getenv() 进行一个说明4. 通过API 调用模型 常用函数5. 微调模型 常用函数6. OpenA…

【论文阅读】Self-supervised Image-specific Prototype Exploration for WSSS

一篇CVPR2022上的论文,用于弱监督分割 论文标题: Self-supervised Image-specific Prototype Exploration for Weakly Supervised Semantic Segmentation 作者信息: 代码地址: https://github.com/chenqi1126/SIPE 论文链接&…

【doxygen】markdown 表格中插入换行与缩进

文章目录 markdown 表格换行markdown 标准换行doxygen 中 markdown 表格换行 markdown 表格缩进 doxygen 中使用 markdown markdown 表格换行 markdown 表格生成 doxygen 时换行与标准的 markdown 语法稍有差异 markdown 标准换行 markdown 中可以使用 html 的换行标签 <…

Python学习之文件操作【基本操作,JSON文件操作】

前言 Python的文件操作是一个非常重要的主题&#xff0c;它可以用来读取&#xff0c;写入和操作各种类型的文件&#xff0c;包括文本文件、图像文件、音频文件等。在这里&#xff0c;我们将讨论一些基本的Python文件操作和JSON文件操作。 Python文件操作 Python提供了多种方…

73、基于51单片机温湿度光照检测控制esp8266无线WiFi app远程监测报警(程序+原理图+PCB源文件+参考论文+开题报告+元器件清单等)

研究目的 现代的生活中&#xff0c;许多情况都对环境的温湿度有比较严格的要求&#xff0c;因此&#xff0c;必须在某些特定环境安装温湿度报警器对环境的温湿度进行监控和调节。为此&#xff0c;本题目选用花卉温室的温湿度调节为背景环境&#xff0c;研究利用集成温湿度传感…

赛效:PDF文件怎么加密

1&#xff1a;在网页上打开并登录91ai工具&#xff0c;在特色功能里点击“PDF加密”。 2&#xff1a;点击上传文件&#xff0c;将本地PDF文件添加上去。 3&#xff1a;文件上传成功后&#xff0c;在文件下方设置密码后点击“开始加密”。 4&#xff1a;加密完成后点击下方下载按…

YOLOv5改进系列(12)——更换Neck之BiFPN

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

浅谈安科瑞电力监控系统解决方案 安科瑞 许敏

摘要&#xff1a;随着经济的发展&#xff0c;能源消耗速度正不断加快&#xff0c;因此我国提出了绿色可持续发展战略&#xff0c;要求在发展建设中以节能为主&#xff0c;不断减少资源能耗&#xff0c;而电能便是首要控制内容。如今我国为电能使用&#xff0c;对计量表进行了优…

Web 应用程序综合监控

综合监控是什么意思 模拟用户通过 Web 应用程序的旅程并对其进行监控以检测任何增加延迟的元素的过程被广泛称为综合监控或综合测试。 为什么需要综合监测 为了确保最终用户的无缝体验&#xff0c;综合性能监控势在必行。监视综合事务以帮助您了解用户如何与 Web 应用程序交…

flex布局瀑布流占位两边对齐不对称

.page{display: flex;justify-content: space-between;flex-wrap: wrap; }.page:after {content: ;width: 400px; // 也可以 flex:1}

压缩文件——干货代码分享

1.背景 最近写接口遇到通过FTP服务器发送文件的需求&#xff0c;文件内容需加密并压缩&#xff0c;故记录一下&#xff0c;提供已经测试通过的代码。 2.代码 package com.example.demo.utils;import lombok.extern.slf4j.Slf4j;import java.io.*; import java.util.zip.GZIPOu…

大学智慧课堂系统整理

目录 一、题目类型选择器(非组件库) 1.1、效果展示 1.2、代码展示 二、题目类型选择器(Vant组件库) 2.1、效果展示 2.2、代码展示 一、题目类型选择器(非组件库) 使用vue2&#xff1a;在methods里区分单个点击和多个点击&#xff0c;在view视图区分判断题和选择题。 如下…

正则表达式和BeautifulSoup

文章目录 1、正则表达式介绍2、正则表达式和BeautifulSoup3、获取属性4、Lambda表达式 1、正则表达式介绍 正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。它描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来…

​Nature |HiFi宏基因组助力挖掘海洋“新”微生物组

近期在《Nature》发表的一篇研究论文中&#xff0c;表述了如何在罕见的微生物类群和环境中研究未知的酶和天然产物&#xff0c;研究突出了微生物组学在深入挖掘天然产物合成与酶学机制中的关键作用&#xff0c;对海洋生态、进化、生物技术与天然产物等领域的研究具有重要意义。…

基于Java+Vue前后端分离乐购游戏商城系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…