Bootstrap

django如何构建一个api


前端通过ajax向后端的url请求数据,那么当我们访问一个后端的url的时候,需要返回一些数据,这一篇笔记就是记录,访问后端url的时候,如何返回数据。

新建app子应用

进入到我们之前的设置好的apps目录下,用manage.py创建一个名为home的子应用:

python ../../manage.py startapp home

需要在setting/dev.py中的INSTALLED_APPS里申明我们这个子应用,直接在列表里加’home’.

创建轮播图模型

编写新建出来的子应用的models.py,代码如下,就相当于在数据库中创建一个表,表的每个字段就是模型中的成员变量,设置字段的类型、长度、注释等。

from tabnanny import verbose
from django.db import models

# Create your models here.
class Banner(models.Model):
    """轮播图模型"""
    #模型字段
    title = models.CharField(max_length=500, verbose_name="广告标题")
    ling = models.CharField(max_length=500, verbose_name="广告链接")
    iamge_url = models.CharField(max_length=255, verbose_name="图片")
    remark = models.TextField(verbose_name="备注信息")
    is_show = models.BooleanField(default=False,verbose_name="是否显示")
    orders = models.IntegerField(default=1, verbose_name="排序")
    is_delete = models.BooleanField(default=False, verbose_name="是否删除")
    
    #表信息声明
    class Meta:
        db_table = "ly_banner"
        verbose_name = "轮播广告"
        verbose_name_plural = verbose_name

    #自定义方法【自定义字段或者自定义工具方法】
    def __str__(self):
        return self.name

有了上述的代码,我们还要执行下面的两个步骤才能将上面的表应用到我们的数据库中:

#会生成一个*_initial.py文件
python manage.py makemigrations
#将上述生成的文件应用到数据库中
python manage.py migrate

构建视图

使用ListAPIView构建视图,views.py

from django.shortcuts import render

# Create your views here.
from rest_framework.generics import ListAPIView
from .models import Banner
from .serializers import BannerModelSerializer
from luffyapi.settings import constants
class BannerListAPIView(ListAPIView):
    queryset = Banner.objects.filter(is_show=True, is_deleted=False).order_by("-orders","-id")[:constants.BANNER_LENGTH]
    serializer_class = BannerModelSerializer

由于视图中要使用序列化器,所以要新建一个序列化器文件,serializers.py:

from rest_framework import serializers
from .models import Banner
class BannerModelSerializer(serializers.ModelSerializer):
    """轮播广告的序列化器"""
    # 模型序列化器字段声明
    class Meta:
        model = Banner
        fields = ["image_url","link"]

配置路由

先在子应用中配置路由,urls.py:

from django.urls import path,re_path
from . import views
urlpatterns = [
    path("banner/",views.BannerListAPIView.as_view()),
]

然后要把子应用的路由告诉我们的主应用,所以要到总路由urls.py中注册路由:

from django.contrib import admin
from django.urls import path,re_path,include
from django.conf import settings
from django.views.static import serve

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
    path('home/', include("home.urls") ),
]

自此,我们便可以访问http://api.luffycity.cn:8000/banner/

知识点

  1. 什么是序列化器?

个人的理解就是,对一个指定的类进行序列化就是将类中(或者说是表中)的字段转化为一个json对象,在get或者post的时候方便传输。具体的参见https://www.jianshu.com/p/89b144154e9d

  1. django的视图,也就是view该怎么理解?
  • Django的视图(view)是处理业务逻辑的核心,它负责处理用户的请求并返回响应数据。Django提供了两种编写视图的方式:基于函数的视图和基于类的视图
  • Django的视图(views.py)通常和URL路由(URLconf)一起工作的。服务器在收到用户通过浏览器发来的请求后,会根据用户请求的url地址和urls.py里配置的url-视图映射关系,去执行相应视图函数或视图类,从而返回给客户端响应数据
  • 每个视图函数的第一个默认参数都必需是request, 它是一个全局变量。Django把每个用户请求封装成了request对象,它包含里当前请求的所有信息,比如请求路径request.path, 当前用户request.user以及用户通过POST提交的数据request.POST
  • 人话:视图用来处理用户的请求
  1. django和django rest framwork有什么区别?

django-rest-framework是django的一个第三方拓展库,他使在django上开发RESTful风格的api接口变的更加轻松和快捷。

;