Python学习笔记(十一)-- Django API RESTful
1. Django rest framework 之序列化
https://www.cnblogs.com/midworld/p/11380194.html
2.写API的三个重点
(1)路由;(2)视图类(提供给用户访问,相当于原来的视图函数);(3)序列化类(提供给视图类使用,把对象序列化成Json)
【非API的程序访问三个步骤:(1)解析路由;(2)调用视图函数;(3)视图函数返回。】
https://www.bilibili.com/video/BV1H4411W7iL?p=64&spm_id_from=pageDriver
3.序列化类
from rest_framework import serializers
注意:使用rest_framework,需先 settings.py的INSTALLED_APPS中先添加rest_framework。
# Application definition INSTALLED_APPS = ( ......... "rest_framework", ........ )
4.一个Model类至少对应一个序列化类,继承于serializers.ModelSerializer。
序列化类的功能是把对应类型的对象转换成Json。
class Meta属性
- model 指明该序列化器处理的数据字段从那个模型类参考生成(或者说是那个类的对象)
- fields 指明该序列化器包含模型类中的哪些字段,fields = "__all__"指明包含所有字段
5.视图类
from rest_framework import viewsets
- queryset 指明该视图集在查询数据时使用的查询集
- serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器
6.路由Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用路由Routers来帮助我们快速实现路由信息绑定、调用
REST framework提供了两个router类
- SimpleRouter
- DefaultRouter
创建router对象
from rest_framework import routers router = routers.DefaultRouter()
7.调试/文档 工具
7.1 安装
pip install coreapi
7.2 添加路由
from rest_framework.documentation import include_docs_urls urlpatterns = [ ... path('docs/', include_docs_urls(title='站点页面标题')) ]
8.django-admin
成功安装Django后,虚拟机终端会有 django-admin命令。
执行 django-admin startproject 项目名 即可创建出对应项目文件夹。
这个以项目命名的文件内包含一个 manage.py文件 和一个与项目名同名的文件夹。
9.获取当前程序的文件名和路径
import os
获取当前程序的文件名
os.path.abspath(__file__)
文件夹的名字
os.path.dirname(os.path.abspath(__file__))
所在文件夹的父目录
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
以上代码一般用户获取项目的绝对路径
10.URL
定义:统一资源定位符 Uniform Resource Locator。
作用:用来表示互联网上某个资源的地址。
URL的一般语法格式:
protocol://hostname[:port]/path[?query][#fragment]
注:[]代表其中的内容可省略。例如默认的端口80,就可以省略不写。
(1)protocol:
* http 通过HTTP访问该资源。格式为 http://
* https 通过安全的https访问该资源。格式为https://
* file 资源是本地计算机上的文件。格式为 file://
(2) hostname
是指存放资源的服务器的域名系统(DNS)主机名、域名或者IP地址。
(3)port
整数,可选,省略时使用默认端口。
各种协议的默认端口不同,如http的默认端口号为80.
(4)path 路由地址
有零或者多个“/” 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
路由地址决定了服务器端会如何处理这个请求。
(5)query(查询)
可选,用于给静态网页传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
(6)fragment(信息片段)
字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。使用#来表示。
11.URL 请求处理过程
step 1 :Django 从配置文件中,根据ROOT_URLCONF找到 主路由文件;默认情况下,该文件在项目同名目录下的urls文件中。
step 2:Django 加载主路由文件中的urlpatterns变量【包含很多路由的数组】。
step 3:依次匹配urlpatterns中的path,匹配到第一个合适的中断后续匹配。
step 4;匹配成功,调用对应的视图函数处理请求,返回相应;
匹配失败,返回404响应。
12.视图函数
视图函数是用于接收一个浏览器请求(HttpRequest对象)并通过HttpResponse对象返回响应的函数。此函数可以接受浏览器请求并根据业务逻辑返回相应的响应内容给浏览器。
语法为
def XXX_view(request[,其它参数...]) return HttpResponse对象
13.路由配置--path()函数
导入
from django.urls inport path
语法
path(route,views,name=None)
参数
route:字符串类型,匹配的请求路径;
views:指定路径所对应的视图处理函数的名称;
name:为地址起别名,在模板中地址反向解析时使用。
14.路由配置--path转换器
语法:<转换器类型:自定义名>
作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数。
例如:path('page/\<int:page>',views.xxx)
转化器类型 | 作用 | 样例 |
str | 匹配除了’/‘之外的非空字符串 | “v1/users/<str:username>”匹配/v1/users/guoxiaohua |
int | 匹配0或者任何正整数。返回一个int | "page/<int:page>"匹配/page/100 |
slug | 匹配任意由ASCII字母或数字以及连字符和下划线组成的短标签 | "detail/<slug:sl>"匹配/detail/this-is-django |
path | 匹配非空字段,包括路径分隔符’/‘ | "v1/users/<path:ph>"匹配/v1/users/a/b/c |
15.路由配置--re_path()
在url的匹配过程中可以使用正则表达式进行精确匹配。
语法:re_path(reg,view,name=xxxx)
正则表达式为命名分组模式(?p<name>pattern);匹配提取参数后用关键字传参方式传递给视图函数。
https://blog.csdn.net/qq_41475058/article/details/112214991
https://www.bilibili.com/video/BV1Q14y1t71j?p=2&spm_id_from=pageDriver