首页 > 编程语言 >Python学习笔记(十一)-- Django API RESTful

Python学习笔记(十一)-- Django API RESTful

时间:2022-08-28 22:33:08浏览次数:83  
标签:匹配 framework Python 视图 Django -- path 序列化 路由

1. Django rest framework 之序列化

https://www.cnblogs.com/midworld/p/11380194.html 

 2.写API的三个重点

(1)路由;(2)视图类(提供给用户访问相当于原来的视图函数);(3)序列化类(提供给视图类使用,把对象序列化成Json)

 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。

  • 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

标签:匹配,framework,Python,视图,Django,--,path,序列化,路由
From: https://www.cnblogs.com/xuliuzai/p/15806186.html

相关文章

  • 内容区滚动组件封装
    iScroll5API中文版观察器温馨提示:让iscroll内容滚动,首先iscroll容器的高度,必须小于内容区的高度没设置内容区的高度就滚动不了了容器的高等于可视区的高度,可视区......
  • golang json使用10、-10、0表示,true、false、null
    packagemainimport("encoding/json""errors""fmt")typeAstruct{BrBoolean`json:"br"`}funcmain(){varcAe:=json.Unm......
  • leetcode 斐波那契数列 javascript实现
    写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项(即F(N))。斐波那契数列的定义如下:F(0)=0,  F(1) =1F(N)=F(N-1)+F(N-2),其中N>1.斐波那契数列由0......
  • 项目中索引的真实应用场景-2022新项目
    一、业务场景项目开发中,数据存储是一定少不了的,不管是存储关系型数据还是还是非关系型数据。可选择的范围也很广,比如mysql,postgresql,oracle,mongodb等等。一般都是根......
  • CF76E Points
    可以把题目转换成求:\[\sum_{i=1}^{n}\sum_{j=i+1}^{n}[(x_i-x_j)^2+(y_i-y_j)^2]\]继续化简:\[=\sum_{i=1}^{n}\sum_{j=i+1}^{n}(x_i-x_j)^2......
  • Swagger2—整合SpringBoot
    一、Swagger用于生成服务器接口的规范文档的工具,并且能够对接口进行测试的工具1.1作用生成接口说明文档对接口进行测试1.2整合添加依赖(Swagger2、SwaggerUI)......
  • 什么是数据中台?-----一文看懂
    数据中台的诞生数据中台的诞生,主要是由于企业信息化的深入发展以及20余年的长周期发展,导致了企业各信息系统越来越多,各种新业务模式层出不穷,同时各系统之间无法有效......
  • python字符串转换为字典
    通过eval转换:eval方法虽然没有转换问题,但存在安全性问题,因为eval不仅能解析数据类型还能解析一些恶意输入命令,可能造成不好的影响user='{"name":"john","gender":......
  • pytest基于配置文件运行pytest
    在pytest提供的终端运行测试用例的方式的基础上,pytest还支持使用配置文件来简化运行参数。可以通过pytest--help查看pytest配置文件的名:pytest.ini\tox.ini\setup.cfg.C......
  • RESTful 风格
    一、RESTful前后端分离开发的项目中,前后端是通过接口规范进行请求和响应,后端向前端提供请求时就要对外暴露一个URL;URL的设计不是随意的,需要遵从一定的设计规范—RESTful......