首页 > 其他分享 >Django DRF - 框架安装使用(一)

Django DRF - 框架安装使用(一)

时间:2023-12-09 17:32:20浏览次数:33  
标签:verbose name 框架 models 123456abc django contrib Django DRF


DRF - 框架安装使用

一. 在开发Web应用中,有两种应用模式

  • 前后端不分离
  • 前后端分离

DRF框架使用了前后端分离的模式

Django DRF - 框架安装使用(一)_DRF框架基础

二. Restful设计方法

  • 请求url(路径)
  • 请求方法

1. 路径

资源作为网址,只能有名词,不能有动词,而且所用的名词往往与数据库的表名对应。

举例来说,以下是不好的例子:

/getProducts
/listOrders
/retreiveClientByOrder?orderId=1

对于一个简洁结构,应该始终用名词。 此外,利用的HTTP方法可以分离网址中的资源名称的操作。

GET /products :将返回所有产品清单
POST /products :将产品新建到集合
GET /products/4 :将获取产品 4
PUT /products/4 :将更新产品 4

API中的名词应该使用复数。无论子资源或者所有资源。

举例来说,获取产品的API可以这样定义

获取单个产品:http://127.0.0.1:8080/AppName/rest/products/1
获取所有产品: http://127.0.0.1:8080/AppName/rest/products

2.HTTP动词

对于资源的具体操作类型,由HTTP动词表示。

常用的HTTP动词有下面四个(括号里是对应的SQL命令)。

GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。

还有三个不常用的HTTP动词。

PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

下面是一些例子。

GET /zoos:列出所有动物园
POST /zoos:新建一个动物园(上传文件)
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

3.过滤信息(Filtering)

如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

下面是一些常见的参数。

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoos/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。

三. Django REST framework

1. 项目准备

创建项目+创建应用+安装应用+配置模板路径+本地化+mysql数据库+URLconf+视图

2. 安装和配置

安装应用,关闭csrf中间件

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

3. 定义模型类

# 准备书籍列表信息的模型类
class BookInfo(models.Model):
    # 创建字段,字段类型...
    name = models.CharField(max_length=20, verbose_name='名称')
    pub_date = models.DateField(verbose_name='发布日期',null=True)
    readcount = models.IntegerField(default=0, verbose_name='阅读量')
    commentcount = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    image = models.ImageField(upload_to='book', null=True, verbose_name='图片')

    class Meta:
        db_table = 'bookinfo'  # 指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.name
# 准备人物列表信息的模型类
class PeopleInfo(models.Model):

    name = models.CharField(max_length=20, verbose_name='名称')
    password = models.CharField(max_length=20,verbose_name='密码')
    description = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    book = models.ForeignKey(BookInfo, related_name='people',on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'peopleinfo'
        verbose_name = '人物信息'

    def __str__(self):
        return self.name

迁移,执行迁移后插入数据
book信息

insert into bookinfo(name, pub_date, readcount,commentcount, is_delete) values
('射雕英雄传', '1980-5-1', 12, 34, 0),
('天龙八部', '1986-7-24', 36, 40, 0),
('笑傲江湖', '1995-12-24', 20, 80, 0),
('雪山飞狐', '1987-11-11', 58, 24, 0);

people信息

insert into peopleinfo(name, password, book_id, description, is_delete)  values
    ('郭靖', '123456abc', 1, '降龙十八掌', 0),
    ('黄蓉', '123456abc', 1, '打狗棍法', 0),
    ('黄药师', '123456abc', 1, '弹指神通', 0),
    ('欧阳锋', '123456abc', 1, '蛤蟆功', 0),
    ('梅超风', '123456abc', 1, '九阴白骨爪', 0),
    ('乔峰', '123456abc', 2, '降龙十八掌', 0),
    ('段誉', '123456abc', 2, '六脉神剑', 0),
    ('虚竹', '123456abc', 2, '天山六阳掌', 0),
    ('王语嫣', '123456abc', 2, '神仙姐姐', 0),
    ('令狐冲', '123456abc', 3, '独孤九剑', 0),
    ('任盈盈', '123456abc', 3, '弹琴', 0),
    ('岳不群', '123456abc', 3, '华山剑法', 0),
    ('东方不败', '123456abc', 3, '葵花宝典', 0),
    ('胡斐', '123456abc', 4, '胡家刀法', 0),
    ('苗若兰', '123456abc', 4, '黄衣', 0),
    ('程灵素', '123456abc', 4, '医术', 0),
    ('袁紫衣', '123456abc', 4, '六合拳', 0);

4. 视图

from django.views.generic import View
from django.http.response import JsonResponse

# Create your views here.
class BookListView(View):
    """
    图书列表
    """
    def get(self,request):

        return JsonResponse({'msg':'ok'})

5. URLconf

settings.py中:指定url配置(项目的根路由)

ROOT_URLCONF = 'bookmanager.urls'

项目中urls.py:只要不是admin/就匹配成功,包含到应用中的urls.py

from django.urls import path,include
from django.contrib import admin

urlpatterns = [
     path('admin/', include(admin.site.urls)),

     # 只要不是‘admin/’就匹配成功,包含到应用中的urls.py
     path('', include('book.urls')),
 ]

应用中urls.py:匹配books/成功就调用views中的BookListView视图,测试项目逻辑

from django.urls import path
from book import views
urlpatterns = [
    path('books/',views.BookListView.as_view()),
]

以上就是DRF框架的基本安装配置使用,希望对你有帮助!


标签:verbose,name,框架,models,123456abc,django,contrib,Django,DRF
From: https://blog.51cto.com/u_15349841/8750995

相关文章

  • 构建外卖系统:使用Django框架
    在当今数字化的时代,外卖系统的搭建不再是什么复杂的任务。通过使用Django框架,我们可以迅速建立一个强大、灵活且易于扩展的外卖系统。本文将演示如何使用Django构建一个简单的外卖系统,并包含一些基本的技术代码。步骤一:安装Django首先,确保你已经安装了Python。然后,通过以下命令安装......
  • Django - 在后台上传文章封面图 - 并在前端页面展示
    需要用到 models.ImageField(),它继承自 models.FileField(), 用ImageField的时候需要安装pillowpipinstallpillow-ihttps://pypi.douban.com/simple/ 首先,进行媒体文件配置:settings中配置:#真正存储图片的文件夹MEDIA_ROOT=os.path.join(BASE_DIR,"media")#......
  • 基于mysql、laravel、vue2框架开发的手术麻醉临床信息系统源码,自主版权
    手术麻醉系统源码技术架构:PHP、js、mysql、laravel、vue2手术麻醉临床信息管理系统是数字化手段应用于手术过程中的重要组成部分,用数字形式获取并存储手术相关信息,既便捷又高效。既然是管理系统,那就是一整套流程,管理患者手术、麻醉的申请、审批、安排以及术后有关各项数据的记录......
  • 饮冰十年-人工智能-FastAPI-03- FastAPI之模型迁移(类似Django的migrante)
         在开发Web应用程序时,通常会涉及到数据库模型的更改,例如添加新的表、字段或索引。为了使这些更改反映在数据库中,我们使用数据库迁移工具。FastAPI本身并不包含数据库迁移(migration)的功能,但你可以使用第三方库来处理数据库迁移。其中,Alembic是一个常用的数据库迁......
  • 前端框架中 MVC 和 MVVM 两种设计方式的区别
    MVC和MVVM是两种常见的软件架构模式。它们都致力于提供清晰的组织结构和代码分离,让开发者能够更有效率地开发和维护复杂的应用程序。然而,它们在组织代码和处理用户交互上有一些重要的区别。首先,让我们了解一下MVC(Model-View-Controller)模式。MVC是一种设计模式,被广泛应用于......
  • VUE框架CLI组件化列表信息完整功能实现------VUE框架
    CLI组件化列表信息完整功能实现<template><div><BugHeader:bugList="bugList":saveBugCallBack="saveBugCallBack"></BugHeader><BugList:updateDescCallBack="updateDescCallBack":selectAllRollbac......
  • VUE框架CLI组件化组件的自定义事件和子组件向父组件传递数据的实现------VUE框架
    <template> <div> <!--内置函数的实现步骤--> <!--提供事件源,给事件源绑定事件,编写回调函数,将回调函数和事件进行绑定--> <!--等待事件的触发,事件触发执行回调函数--> <!--组件的自定义事件实现步骤--> <button@click="Hello()">你好</button> <!--给Us......
  • pytest + yaml 框架 -59.用例失败重跑机制pytest-rerunfailures
    前言有些接口可能不太稳定,第一次跑的时候由于网络原因或者其它原因失败,但是重新跑2次又成功了。对于这种需要重新跑几次的场景,可以使用用例失败重跑机制,需安装pytest-rerunfailures插件。场景示例失败重跑需要依赖pytest-rerunfailures插件,使用pip安装就行pipinstallp......
  • Django 含有外键模型新增数据以及序列化
    Django含有外键模型新增数据以及序列化Django原生实现外键classAppleModel(models.Model):id=models.AutoField(primary_key=True)app_name=models.CharField(max_length=50)classPickleModel(models.Model):pid=models.AutoField(primary_key=True)......
  • Java-Spring框架中用到的设计模式
    Java-Spring框架中用到的设计模式单例模式(Singleton)Spring中的Bean默认是单例的,容器中只存在一个实例。这有助于节省资源,提高性能。工厂模式(Factory)Spring使用工厂模式来创建和管理Bean。通过配置文件或注解,Spring容器可以根据需要创建相应的Bean对象。代理模......