首页 > 其他分享 >基于django原生代码提供api接口

基于django原生代码提供api接口

时间:2022-08-29 20:44:44浏览次数:66  
标签:原生 name age django instance api sex data description

创建了表单student:

  

from django.db import models

class Student(models.Model):
    # 学生信息
    name=models.CharField(max_length=255,verbose_name="姓名",unique=True)
    sex=models.BooleanField(default=1,verbose_name="性別")
    age=models.IntegerField(verbose_name="年龄")
    classmate=models.CharField(max_length=5,verbose_name="班级编号")
    description=models.TextField(max_length=1000,verbose_name="个性签名")

    def __str__(self):
        return self.name
    class Meta:
        # db_table = "tb_student"  # 数据库的表名字
        # verbose_name="学生"
        # verbose_name_plural=verbose_name
        verbose_name_plural="学生"

 

将表单注册到admin里面 ,否则后台不显示:

  

from django.contrib import admin
from . models import Student

admin.site.register(Student)

 

写视图views:(使用时用json格式提交)

from django.views import View
from .models import Student
from django.http.response import JsonResponse
import json

from django.http import QueryDict


class StudentView(View):
    def post(self,request):
        #接收并验证客户端信息
        data=json.loads(request.body)
        name=data.get("name")
        sex=data.get("sex")
        age=data.get("age")
        classmate=data.get("classmate")
        description=data.get("description")
        #操作数据库,保存数据
        instance=Student.objects.create(
            name=name,
            sex=sex,
            age=age,
            classmate=classmate,
            description=description,
        )
        #返回数据
        return JsonResponse(data={
            "id":instance.pk,
            "name":instance.name,
            "sex":instance.sex,
            "age":instance.age,
            "classmate":instance.classmate,
            "description":instance.description,
        },status=201)

    def get(self,request):
        # 读取数据库
        students_list=list(Student.objects.values()) #value返回列表
        # 返回数据
        return JsonResponse(data=students_list,status=200,safe=False)

class StudentInfoView(View):
    def get(self,request,pk):
        # 获取一条数据
        try:
            instance=Student.objects.filter(pk=pk)
            return JsonResponse(data={
                "id":instance.pk,
                "name":instance.name,
                "sex":instance.sex,
                "age":instance.age,
                "classmate":instance.classmate,
                "description":instance.description,
            },status=200)
        except Student.DoesNotExist:
            return JsonResponse(data=None,status=404)#没有内容
        
    def put(self,request,pk):
        # 更新学生数据
        #接收并验证客户端信息
        data=json.loads(request.body)
        name=data.get("name")
        sex=data.get("sex")
        age=data.get("age")
        classmate=data.get("classmate")
        description=data.get("description")
        #操作数据库,保存数据
        try:
            instance=Student.objects.get(pk=pk)
            instance.name=name
            instance.sex=sex
            instance.age=age
            instance.classmate=classmate
            instance.description=description
            instance.save()

        except Student.DoesNotExist:
            return JsonResponse(data=None,status=404)

        #返回数据
        return JsonResponse(data={
            "id":instance.pk,
            "name":instance.name,
            "sex":instance.sex,
            "age":instance.age,
            "classmate":instance.classmate,
            "description":instance.description,
        },status=201)

    def delete(self,request,pk):
        try:
            Student.objects.filter(pk=pk).delete()
        except:
            pass
        return JsonResponse(data={},status=204)

 

 

 

填写路由urls:

from django.urls import path,re_path
from . import views


# 路由列表
urlpatterns = [
    path("students/",views.StudentView.as_view()),
    re_path("^students/(?P<pk>\d+)/$",views.StudentInfoView.as_view())
    #使用re_path要在前面加上^后面加上$,防止格式和上面冲突

]

 

标签:原生,name,age,django,instance,api,sex,data,description
From: https://www.cnblogs.com/fuck-Innovative-training/p/16632939.html

相关文章

  • PostMan请求Web Api接口提示“Bas Request”错误
    一、如果PostMan请求WebApi接口提示“HTTPError400.Therequesthostnameisinvalid”错误出现上述错误的场景:1.在测试服务器上,项目是直接通过VisualStudio直接启......
  • APICloud AVM框架 封装车牌号输入键盘组件
    AVM(Application-View-Model)前端组件化开发模式基于标准WebComponents组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容WebComponents标......
  • 银行卡OCR API推荐
    在金融远程身份认证和电商支付绑卡等场景当中,我们都会用到银行卡识别的功能。今天我就把我遇到的一个好用的银行卡识别API分享推荐给大家——APISpace的银行卡OCR,自动......
  • 阿里云金融创新峰会云原生分论坛圆满举办,加速金融行业落地云原生
    随着云计算在多个行业的深入应用,企业应用构建面临资源弹性、系统稳定、应用敏捷、业务智能、可信安全等新的问题和挑战,云原生已经成为云时代业务应用构建的主流模式,全面容......
  • 好用的名人名言API推荐
    名言是指一些名人说的、写的、历史记录的,经过实践所得出的结论或建议,这些话易于流传且具有意义。 APISpace好用的名人名言大全API推荐给大家,返回各种类型的名人名言......
  • APICloud AVM 封装验证码输入框组件
    AVM(Application-View-Model)前端组件化开发模式基于标准WebComponents组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容WebCom......
  • 如何将本地化添加到 Django REST 框架
    如何将本地化添加到DjangoREST框架Django在本文中,我将为您提供有关如何使用I18N和DjangoRestFramework本地化DjangoRestAPI的指南。在开始本教程之前,我将......
  • APICloud 可视化编程 - 拖拉拽实现专业级源码
    低代码开发平台是无需编码(0代码或⽆代码)或通过少量代码就可以快速生成应用程序的开发平台。它的强⼤之处在于,允许终端⽤户使⽤易于理解的可视化⼯具开发自己的应用程......
  • assert failed: tcpip_send_msg_wait_sem IDF/components/lwip/lwip/src/api/tcpip.c:
    assertfailed:tcpip_send_msg_wait_semIDF/components/lwip/lwip/src/api/tcpip.c:455(Invalidmbox)assertfailed:tcpip_send_msg_wait_semIDF/components/lwip/l......
  • 使用 vue 开发 APICloud 应用的教程
    文档目录一、APICloud创建程序1、APICloud后台创建应用2、APICloud拉取代码,APICloud开发工具地址APICloud开发工具PC端,先下载APICloud开发工具,打开开发工具......