开发实践8_REST

这篇具有很好参考价值的文章主要介绍了开发实践8_REST。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Django REST Framework, Django View & APIView

MTV模式实现前后端分离。Representational State Transfer 表现层状态转化。Representation 资源(Resource a specific info. on net.)具体呈现形式。ST 修改服务端的数据。修改数据 == POST请求。实现: 安装依赖 pip install djangorestframework / 序列化 / 视图装饰器 / 视图集

pip install djangorestframework 

pip install httpie

python manage.py startapp rest_app 

setting注册

path('rest_app/', include('rest_app.urls', namespace='rest')),

models //

from django.db import models


class Students(models.Model):
    name = models.CharField(max_length=32, verbose_name="NAME")
    age = models.IntegerField(verbose_name="AAAAGE")
    gender = models.CharField(max_length=2, verbose_name="GENDER")
    gpa = models.FloatField(verbose_name="BASIS")

    class Meta:
        verbose_name = "Students"
        verbose_name_plural = verbose_name + 'S'

    def __str__(self):
        return self.name

    @classmethod
    def get_all(cls):
        return cls.objects.all()

admin //

from django.contrib import admin

from rest_app.models import Students


admin.site.register(
    Students
)

app下serializer.py //

from rest_framework import serializers

from rest_app.models import Students


class StudentSerializer(serializers.ModelSerializer):  # 自定义一个用于序列化student模型的序列化类
    class Meta:
        model = Students
        fields = (
            "id",
            "name",
            "age",
            "gender",
            "gpa",
        )

# 序列化:继承djangorestframework中的serialize。str(a dict), 是一个jason字符串。

views //

from rest_framework.decorators import api_view
from rest_framework.response import Response

from rest_app.models import Students
from rest_app.serializer import StudentSerializer


@api_view(["GET"])
def students_view(request):
    # 用不着render了,前端也不存在query set,所以需要序列化类
    students = Students.get_all()
    ser = StudentSerializer(students, many=True)
    return Response(ser.data)

# 视图装饰器。能接收什么样的请求。api_view。

urls //

from django.urls import path
from .views import *

app_name = 'rest'

urlpatterns = [
    path('stuview/', students_view, name="stuview"),
]

# 用httpie来检测。

 http get http://127.0.0.1:8000/rest/stuview

or postman.

Django rest post请求 put delete请求

views //

@api_view(["GET", "POST"])
def students_view(request):
    # 用不着render了,前端也不存在query set,所以需要序列化类
    if request.method == "GET":
        students = Students.get_all()
        ser = StudentSerializer(students, many=True)
        return Response(ser.data)
    if request.method == "POST":
        ser = StudentSerializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data, status=status.HTTP_201_CREATED)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)

# id是自增的,所以不创建也可。建了也白建。但其他关键字在创建时不可省略。

postman:

post raw json

开发实践8_REST,sqlite,数据库,python

@api_view(["GET", "PUT", "DELETE"])
def student_detail_view(request, sid):
    try:
        student = Students.get_one(sid)
    except Students.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == "GET":
        ser = StudentSerializer(student)
        return Response(ser.data)

    if request.method == "PUT":
        ser = StudentSerializer(student, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)

    if request.method == "DELETE":
        student.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

put  即使只修改一个字段也要写入所有字段

delete 不需要传,只需要send

二、Django REST 视图集

不使用子路由。所有函数通过视图集链接到总路由。视图集类似一个Class。

models //

class StudentsCla(models.Model):
    class_name = models.CharField(max_length=32, verbose_name="NAMECLA")
    mentor = models.CharField(max_length=32, verbose_name="HEADTEACHER")

    class Meta:
        verbose_name = "CLA"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.class_name

    @classmethod
    def get_all(cls):
        return cls.objects.all()

admin //

from django.contrib import admin

from rest_app.models import Students, StudentsCla

models = [
    Students,
    StudentsCla
]

admin.site.register(models)

serializer //

class StudentsClaSerializer(serializers.ModelSerializer):  # 自定义一个用于序列化student模型的序列化类
    class Meta:
        model = StudentsCla
        fields = (
            "class_name",
            "mentor",
        )

views //

class ListStudentsClaViewSet(ModelViewSet):
    queryset = StudentsCla.get_all()  # 使用模型视图集需要指定queryset的值和s_c
    serializer_class = StudentsClaSerializer
    pass

total urls //

from rest_framework import routers

from rest_app.views import ListStudentsClaViewSet

router = routers.DefaultRouter()
router.register('student_class', ListStudentsClaViewSet)
path('', include(router.urls))

开发实践8_REST,sqlite,数据库,python

视图集是将一个视图函数转换成一个类,并继承ViewSet。结果的这个类即 类视图。

三、VIEW & API VIEW 类视图

view→class,称为“”。常分三类。View类视图(django原生有的),APIView类视图(支持前后端分离),通用类视图。

View类视图:①继承View类,编写对应的请求方法,处理不同请求状态。②配置路由,使用as_view()。

演示:

 python manage.py startapp view_app

注册

path('view/', include('view_app.urls', namespace="view")),

models //

class Stu(models.Model):
    name = models.CharField(max_length=32, verbose_name="name")
    gpa = models.CharField(verbose_name="gpa")

    @classmethod
    def get_all(cls):
        return cls.objects.all()

views //

class ListStuView(View):
    def get(self, request):
        stus = Stu.get_all()
        return render(self.request, "", locals())

    def post(self, request):
        pass
        return render(self.request, "", locals())


class ListStuAPIView(APIView):
    def get(self, request):
        stus = Stu.get_all()
        return Response(status=status.HTTP_200_OK)

    def post(self, request):
        pass
        return render(self.request, "", locals())

    def put(self, request):
        pass

    def delete(self, request):
        pass

sub urls //

urlpatterns = [
     path('view/', ListStuView.as_view(), name="list"),
]

通用类视图

Django Restful

①操作所有的model。继承ListCreateAPIView类,并添加queryset和serializer_class两个类属性

②操作单个model。继承RetrieveUpdateDestroyAPIView类,并添加queryset和serializer_class两个类属性

总路由 //

path('view/', include('view_app.urls', namespace="view")),

models //

from django.db import models


class Stu(models.Model):
    name = models.CharField(max_length=32, verbose_name="name")
    gpa = models.IntegerField(verbose_name="gpa")

    @classmethod
    def get_all(cls):
        return cls.objects.all()

url //

app_name = "view"

urlpatterns = [
     path('view/', ListStuView.as_view(), name="list"),
     path('detail/<name>/', SingleStu.as_view()),
]

视图集不用写路由,但是类视图要写。

serializer //

class StuSerializer(serializers.ModelSerializer):  # 自定义一个用于序列化student模型的序列化类
    class Meta:
        model = Stu
        fields = (
            "name",
            "gpa",
        )

views //文章来源地址https://www.toymoban.com/news/detail-817872.html

class ListALLStudentsView(ListCreateAPIView):
    queryset = Stu.get_all()
    serializer_class = StuSerializer


class SingleStu(RetrieveUpdateDestroyAPIView):
    queryset = Stu.get_all()
    serializer_class = StuSerializer
    lookup_url_kwarg = "name"    # 需要溯源继承父类写的是啥        

到了这里,关于开发实践8_REST的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件设计开发笔记4:QT操作SQLite数据库

      有时候我们需要在软件中记录一些历史数据以便于对数据的查询。而我们希望软件不能太复杂,体量也不要太大,这个时候就需要如SQLite这样轻量级的数据库。这篇中我们就来讨论如何在使用QT开发应用是操作SQLite数据库。   SQLite是一款开源、轻量级、跨平台的数据库

    2024年02月09日
    浏览(62)
  • Python数据库模块sqlite3操作实例(非常实用)

    当使用Python进行SQLite数据库操作时, sqlite3 模块是一个非常常用和强大的工具。它提供了一系列函数和方法,用于创建、连接、查询和管理数据库。下面是一些常见的用法示例:   sqlite-utils 、 sqlitebiter 和其他类似的库可以提供更高级的功能,包括预编译语句的执行优化和数

    2024年02月13日
    浏览(47)
  • python使用pysqlcipher3对sqlite数据库进行加密

    python对很多项目都需要对sqlite数据库的数据进行加密,最流行的加密方式是使用pysqlcipher3,当前使用的python版本为3.7,本博文是直接使用pysqlcipher3在项目上的应用,使用的是已编译好的pysqlcipher3包,如果你需要pysqlcipher3,在后面有下载地址,下载后,可以直接使用,不需要再

    2024年04月13日
    浏览(37)
  • Python - 嵌入式数据库Sqlite3的基本使用

    SQLite是一种轻量级的嵌入式关系型数据库管理系统,而Python标准库中提供了与SQLite交互的模块,sqlite3。下面是一个Python 3中使用sqlite3模块的详细示例与解析。 这个例子展示了如何使用sqlite3模块来创建或连接一个数据库,创建一个表格,插入一些数据,查询数据,提交更改并

    2024年02月15日
    浏览(48)
  • 学生信息及成绩管理系统(Python+Sqlite)数据库版

    目录 功能模块: 运行功能演示:  具体代码实现过程: 创建sqlite 数据库  Python代码 引入os和sqlite3包: 初始化数据库: 连接数据库: 关闭并提交数据到数据库: 查询数据并显示: 添加并插入数据到数据库: 更新数据到数据库: 删除数据并更新数据库:  导入和导出数据

    2024年02月04日
    浏览(45)
  • 使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代应用程序开发中,与数据库进行交互是至关重要的一环。Python提供了强大的库来连接和操作各种类型的数据库,其中包括SQLite和MySQL。

    2024年03月27日
    浏览(59)
  • 安卓大作业:使用Android Studio开发天气预报APP(使用sqlite数据库)

    今天我来分享一下如何使用Android Studio开发一个天气预报APP。在文中,我们将使用第三方接口获取实时天气数据,并显示在APP界面上。 首先,打开Android Studio并创建一个新的项目。在创建新项目时,我们需要设置项目名称、包名和支持的最低API级别。 为了获取实时天气数据,

    2024年02月08日
    浏览(58)
  • Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)

    Android Studio开发项目图书管理系统项目视频展示: 点击进入图书管理系统项目视频 现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的

    2024年02月08日
    浏览(53)
  • Android Studio App开发中数据库SQLite的解析及实战使用(包括创建数据库,增删改查,记住密码等 附源码必看)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ SQLite是一种小巧的嵌入式数据库,使用方便,开发简单,如同mysql,oracle那样,SQLite也采用SQL语句管理数据,由于它属于轻型数据库,不涉及复杂的数据控制操作,因此App开发只用到数据定义和数据操纵两类SQL。 1:数据

    2024年02月03日
    浏览(81)
  • 在Python中利用内置SQLite3模块进行数据库操作的完整指南

      在Python中,使用SQLite非常方便,Python内置了 SQLite3 模块,无需额外安装。SQLite 是一个轻量级的嵌入式数据库,适用于小型项目和单用户应用。以下是一个简单的示例,演示如何在 Python 中使用 SQLite,并提供了常见的查询、增加、修改和删除功能。 首先,确保你的 Python 安装

    2024年02月03日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包