当前位置: 首页 > news >正文

drf入门规范(二)

四 RESTful API规范

image-20230514233722079

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。

RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。

这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。

事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。

4.1 数据的安全保障

  • url链接一般都采用https协议进行传输

    注:采用https协议,可以提高数据交互过程中的安全性

4.2 接口特征表现

  • 用api关键字标识接口url:

    • https://api.baidu.com
    • https://www.baidu.com/api

    注:看到api字眼,就代表该请求url链接是完成前后台数据交互的

4.3 多数据版本共存

  • 在url链接中标识数据版本

    • https://api.baidu.com/v1
    • https://api.baidu.com/v2

    注:url链接中的v1、v2就是不同数据版本的体现(只有在一种数据资源有多版本情况下)

4.4 数据即是资源,均使用名词(可复数)

  • 接口一般都是完成前后台数据的交互,交互的数据我们称之为资源

    • https://api.baidu.com/users
    • https://api.baidu.com/books
    • https://api.baidu.com/book

    注:一般提倡用资源的复数形式,在url链接中奖励不要出现操作资源的动词,错误示范:https://api.baidu.com/delete-user

  • 特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义

    • https://api.baidu.com/place/search
    • https://api.baidu.com/login

4.5 资源操作由请求方式决定(method)

  • 操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作
    • https://api.baidu.com/books - get请求:获取所有书
    • https://api.baidu.com/books/1 - get请求:获取主键为1的书
    • https://api.baidu.com/books - post请求:新增一本书书
    • https://api.baidu.com/books/1 - put请求:整体修改主键为1的书
    • https://api.baidu.com/books/1 - patch请求:局部修改主键为1的书
    • https://api.baidu.com/books/1 - delete请求:删除主键为1的书

4.6 过滤,通过在url上传参的形式传递搜索条件

  • https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
  • https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
  • https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
  • https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
  • https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件

4.7 响应状态码

4.7.1 正常响应
  • 响应状态码2xx
    • 200:常规请求
    • 201:创建成功
4.7.2 重定向响应
  • 响应状态码3xx
    • 301:永久重定向
    • 302:暂时重定向
4.7.3 客户端异常
  • 响应状态码4xx
    • 403:请求无权限
    • 404:请求路径不存在
    • 405:请求方法不存在
4.7.4 服务器异常
  • 响应状态码5xx
    • 500:服务器异常

4.8 错误处理,应返回错误信息,error当做key

{error: "无权限操作"
}

4.9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

4.10 需要url请求的资源需要访问资源的请求链接

# Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{"status": 0,"msg": "ok","results":[{"name":"肯德基(罗餐厅)","img": "https://image.baidu.com/kfc/001.png"}...]
}

比较好的接口返回

# 响应数据要有状态码、状态信息以及数据本身
{"status": 0,"msg": "ok","results":[{"name":"肯德基(罗餐厅)","location":{"lat":31.415354,"lng":121.357339},"address":"月罗路2380号","province":"上海市","city":"上海市","area":"宝山区","street_id":"339ed41ae1d6dc320a5cb37c","telephone":"(021)56761006","detail":1,"uid":"339ed41ae1d6dc320a5cb37c"}...]
}

四 序列化

api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

序列化: 把我们识别的数据转换成指定的格式提供给别人。

例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。

反序列化:把别人提供的数据转换/还原成我们需要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。

五 Django Rest_Framework

核心思想: 缩减编写api接口的代码

Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口。

image-20230514233742505

官方文档:Home - Django REST framework

github: GitHub - encode/django-rest-framework: Web APIs for Django. 🎸

特点

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 多种身份认证和权限认证方式的支持;[jwt]
  • 内置了限流系统;
  • 直观的 API web 界面;
  • 可扩展性,插件丰富

六 环境安装与配置

DRF需要以下依赖:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
  • Django (1.10, 1.11, 2.0)

DRF是以Django扩展应用的方式提供的,所以我们可以直接利用已有的Django环境而无需从新创建。(若没有Django环境,需要先创建环境安装Django)

6.1 安装DRF

前提是已经安装了django,建议安装在虚拟环境

# mkvirtualenv drfdemo -p python3
# pip install djangopip install djangorestframework
pip install pymysql
6.1.1 创建django项目
cd ~/Desktop
django-admin startproject drfdemo

使用pycharm打开项目,设置虚拟环境的解析器,并修改manage.py中的后缀参数。

6.2 添加rest_framework应用

settings.pyINSTALLED_APPS中添加’rest_framework’。

INSTALLED_APPS = [...'rest_framework',
]

接下来就可以使用DRF提供的功能进行api接口开发了。在项目中如果使用rest_framework框架实现API接口,主要有以下三个步骤:

  • 将请求的数据(如JSON格式)转换为模型类对象
  • 操作数据库
  • 将模型类对象转换为响应的数据(如JSON格式)

接下来,我们快速体验下四天后我们学习完成drf以后的开发代码。接下来代码不需要理解,看步骤。

6.3 体验drf完全简写代码的过程(了解)

6.3.1. 创建模型操作类
class Student(models.Model):# 模型字段name = models.CharField(max_length=100,verbose_name="姓名")sex = models.BooleanField(default=1,verbose_name="性别")age = models.IntegerField(verbose_name="年龄")class_null = models.CharField(max_length=5,verbose_name="班级编号")description = models.TextField(max_length=1000,verbose_name="个性签名")class Meta:db_table="tb_student"verbose_name = "学生"verbose_name_plural = verbose_name

为了方便测试,所以我们可以先创建一个数据库。

create database students charset=utf8;
6.3.1.1 执行数据迁移

把students子应用添加到INSTALL_APPS中

image-20230514233811372

初始化数据库连接

安装pymysql
pip install pymysql

主引用中__init__.py设置使用pymysql作为数据库驱动

import pymysqlpymysql.install_as_MySQLdb()

settings.py配置文件中设置mysql的账号密码

DATABASES = {# 'default': {#     'ENGINE': 'django.db.backends.sqlite3',#     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# },'default': {'ENGINE': 'django.db.backends.mysql','NAME': "students","HOST": "127.0.0.1","PORT": 3306,"USER": "root","PASSWORD":"123",},
}

终端下,执行数据迁移。

python manage.py makemigrations
python manage.py migrate

错误列表

# 执行数据迁移 python manage.py makemigrations 报错如下:

image-20230514233846491

解决方案:

注释掉 backends/mysql/base.py中的35和36行代码。

image-20230514233856786

# 执行数据迁移发生以下错误:

image-20230514233908432

解决方法:

backends/mysql/operations.py146行里面新增一个行代码:

image-20230514233918871

6.3.2. 创建序列化器

例如,在django项目中创建学生子应用。

python manage.py startapp students

在syudents应用目录中新建serializers.py用于保存该应用的序列化器。

创建一个StudentModelSerializer用于序列化与反序列化。

# 创建序列化器类,回头会在试图中被调用
class StudentModelSerializer(serializers.ModelSerializer):class Meta:model = Studentfields = "__all__"
  • model 指明该序列化器处理的数据字段从模型类BookInfo参考生成
  • fields 指明该序列化器包含模型类中的哪些字段,’all‘指明包含所有字段
6.3.3. 编写视图

在students应用的views.py中创建视图StudentViewSet,这是一个视图集合。

from rest_framework.viewsets import ModelViewSet
from .models import Student
from .serializers import StudentModelSerializer
# Create your views here.
class StudentViewSet(ModelViewSet):queryset = Student.objects.all()serializer_class = StudentModelSerializer
  • queryset 指明该视图集在查询数据时使用的查询集
  • serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器
6.3.4. 定义路由

在students应用的urls.py中定义路由信息。

from . import views
from rest_framework.routers import DefaultRouter# 路由列表
urlpatterns = []router = DefaultRouter()  # 可以处理视图的路由器
router.register('students', views.StudentViewSet)  # 向路由器中注册视图集urlpatterns += router.urls  # 将路由器中的所以路由信息追到到django的路由列表中

最后把students子应用中的路由文件加载到总路由文件中.

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path("stu/",include("students.urls")),
]
6.3.5. 运行测试

运行当前程序(与运行Django一样)

python manage.py runserver

在浏览器中输入网址127.0.0.1:8000,可以看到DRF提供的API Web浏览页面:

image-20230514233932741

1)点击链接127.0.0.1:8000/stu/students 可以访问获取所有数据的接口,呈现如下页面:

image-20230514233949677

2)在页面底下表单部分填写学生信息,可以访问添加新学生的接口,保存学生信息:

image-20230514234002759

点击POST后,返回如下页面信息:

image-20230514234020550

3)在浏览器中输入网址127.0.0.1:8000/stu/students/5/,可以访问获取单一学生信息的接口(id为5的学生),呈现如下页面:

image-20230514234031623

4)在页面底部表单中填写学生信息,可以访问修改学生的接口

image-20230514234043183

点击PUT,返回如下页面信息:

image-20230514234053208

5)点击DELETE按钮,可以访问删除学生的接口

image-20230514234103935

返回,如下页面:

image-20230514234114156

七 CBV源码分析

# 视图层
from django.shortcuts import render, HttpResponse
from django.views import View
class CBVTest(View):# 通过调度(dispatch)分发请求def dispatch(self, request, *args, **kwargs):passsuper().dispatch(request, *args, **kwargs)passdef get(self, request):return render(request, 'cbv.html')def post(self, request):return HttpResponse('cbv post method')
<!-- 模板层 -->
<form action="/cbv/" method="post">{% csrf_token %}<input type="text" name="usr"><button type="submit">提交</button>
</form>
# 路由层
from app import views
urlpatterns = [url(r'^cbv/', views.CBVTest.as_view()),
]

 

八 drf基本使用及request源码分析

8.1 APIView的使用

# 1)安装drf:pip3 install djangorestframework
# 2)settings.py注册app:INSTALLED_APPS = [..., 'rest_framework']
# 3)基于cbv完成满足RSSTful规范的接口
# 视图层
from rest_framework.views import APIView
from rest_framework.response import Response
user_list = [{'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Tom'}]
class Users(APIView):def get(self, request, *args, **kwargs):return Response({'status': 0,'msg': 'ok','results': user_list})def post(self, request, *args, **kwargs):# request对formdata,urlencoded,json三个格式参数均能解析name = request.data.get('name')id = len(user_list) + 1user = {'id': id, 'name': name}user_list.append(user)return Response({'status': '0','msg': 'ok','results': user})
# 路由层
from app import views
urlpatterns = [url(r'^users/', views.Users.as_view()),
]

8.2 APIView和Request对象源码分析

8.2.1 APIView
# as_view()# 核心走了父类as_viewview = super(APIView, cls).as_view(**initkwargs)# 返回的是局部禁用csrf认证的view视图函数return csrf_exempt(view)# dispatch(self, request, *args, **kwargs)# 二次封装request对象request = self.initialize_request(request, *args, **kwargs)# 自定义request规则self.initial(request, *args, **kwargs)# initialize_request(self, request, *args, **kwargs)# 原生request封装在request._request# initial(self, request, *args, **kwargs)# 认证self.perform_authentication(request)# 权限self.check_permissions(request)# 频率self.check_throttles(request)
8.2.2 Request对象

image-20230514234155306

 

相关文章:

drf入门规范(二)

四 RESTful API规范 REST全称是Representational State Transfer&#xff0c;中文意思是表述&#xff08;编者注&#xff1a;通常译为表征性状态转移&#xff09;。 它首次出现在2000年Roy Fielding的博士论文中。 RESTful是一种定义Web API接口的设计风格&#xff0c;尤其适用…...

使用Redis和Nginx分别实现限制接口请求频率

前言 为啥需要限制接口请求频率&#xff1f;这个是因为防止接口一直被刷&#xff0c;比如发送手机验证码的接口&#xff0c;一直被刷的话&#xff0c;费钱费资源的&#xff0c;至少做点基本的防护工作。以下分别使用Redis和Nginx实现限制接口请求频率方案。 一、基于Redis实现…...

ansible模块 (7-13)

模块 7、hostname模块&#xff1a; 远程主机名管理模块 ansible 192.168.10.202 -m hostname -a nameliu 8、copy模块&#xff1a; 用于复制指定的主机文件到远程主机的模块 常用参数&#xff1a; dest: 指出要复制的文件在哪&#xff0c;必须使用绝对路径。如果源目标是…...

MySQL概括与SQL分类

文章目录 一、计算机语言二、SQL语言三、数据库系统四、MySQL简介 一、计算机语言 二、SQL语言 三、数据库系统 四、MySQL简介...

微信小程序:wx:for 获取view点击的元素currentTarget.dataset为空

遍历数组渲染一组view通过bindtap事件获取点击的元素 解决办法&#xff1a; 在遍历时&#xff0c;设置data-item即可。 示例&#xff1a; <view wx:for"{{types}}" data-item"{{item}}"wx:key"key" bindtap"syntheActiveItem"c…...

Word的兼容性问题很常见,禁用兼容模式虽步不是最有效的,但可以解决兼容性问题

当你在较新版本的Word应用程序中打开用较旧版本的Word创建的文档时&#xff0c;会出现兼容性问题。错误通常发生在文件名附近&#xff08;兼容模式&#xff09;。兼容性模式问题&#xff08;暂时&#xff09;禁用Word功能&#xff0c;从而限制使用较新版本Word的用户编辑文档。…...

环境搭建及源码运行_java环境搭建_idea版本下载及安装

1、介绍 Idea是一款被广泛使用的Java集成开发环境&#xff0c;它提供了丰富的功能和工具来帮助开发人员更高效地编写和调试代码。作为一款开源软件&#xff0c;Idea不仅提供了基本的代码编辑、自动完成和调试功能&#xff0c;还支持大量的插件和扩展&#xff0c;可为开发人员提…...

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…...

芋道前端框架上线之后发现element-ui的icon图标全部乱码

前言 最近发现线上有人反映图标全部是乱码&#xff0c;登录上去看确实乱码&#xff0c;刷新就好最后一顿搜&#xff0c;发现是sass版本不兼容导致的图标乱码问题 解决办法 1.先把sass升级到1.39.0 2.来到vue.config.js文件配置代码-如果是芋道前端框架不用配置自带 css: {lo…...

每个伦敦金投资者都应该练习的日线图交易

在伦敦金市场中&#xff0c;每个投资者都应该试着去做日线图的交易。有的人一听到日线图马上摇头&#xff0c;原因是日线图的价格跨度大&#xff0c;导致止损距离也变大&#xff0c;这样对投资者来说无疑是增加了风险。如果资金量大的投资者还好说&#xff0c;可以降低仓位&…...

高通平台开发系列讲解(USB篇)adb应用adbd分析

沉淀、分享、成长,让自己和他人都能有所收获!😄 在apps_proc/system/core/adb/adb_main.cpp文件中main()函数会调用adb_main()函数,然后调用uab_init函数 在uab_init()函数中,会创建一个线程,在线程中会调用init_functionfs()函数,利用ep0控制节点,创建ep1、ep2输…...

【上海大学数字逻辑实验报告】七、中规模元件及综合设计

一、实验目的 掌握中规模时序元件的测试。学会在Quartus II上设计序列发生器。 二、实验原理 74LS161是四位可预置数二进制加计数器&#xff0c;采用16引脚双列直插式封装的中规模集成电路&#xff0c;其外形如下图所示&#xff1a; 其各引脚功能为&#xff1a; 异步复位输…...

JVM内存结构Java内存模型Java对象模型

导图&#xff1a; https://naotu.baidu.com/file/60a0bdcaca7c6b92fcc5f796fe6f6bc9 1.JVM内存结构&&Java内存模型&&Java对象模型 1.1.JVM内存结构 1.2.Java对象模型 Java对象模型表示的是这个对象本身的存储模型,JVM会给这个类创建一个instanceKlass保存在方…...

Istio 社区周报(第一期):2023.12.11 - 12.17

欢迎来到 Istio 社区周报 Istio 社区朋友们&#xff0c;你们好&#xff01; 我很高兴呈现第一期 Istio 社区周报。作为 Istio 社区的一员&#xff0c;每周我将为您带来 Istio 的最新发展、有见地的社区讨论、专业提示和重要安全新闻内容。 祝你阅读愉快&#xff0c;并在下一期中…...

质量图导向法解包裹之---计算边缘可靠性

在这之前需要我们知道像素点的可靠性 % 这反映了相位变化的平滑程度。以下是一个可能的实现&#xff0c;它使用了二阶差分来计算可靠性&#xff1a; function rel calculateReliability(wrappedPhase)% 应用高斯滤波减少噪声filteredImg imgaussfilt(wrappedPhase, 2); % 2 …...

C# WPF上位机开发(进度条操作)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件上面如果一个操作比较缓慢&#xff0c;或者说需要很长的时间&#xff0c;那么这个时候最好添加一个进度条&#xff0c;提示一下当前任务的进展…...

vulnhub-Tre(cms渗透)

靶机和kali都使用net网络&#xff0c;方便探测主机获取ip1.靶机探测 使用fping扫描net网段 靶机ip&#xff1a;192.168.66.130 2.端口扫描 扫描发现该靶机三个端口&#xff0c;ssh&#xff0c;还有两个web&#xff0c;使用的中间件也是不一样的&#xff0c;一个是apache&…...

Re解析(正则表达式解析)

正则表达式基础 元字符 B站教学视频&#xff1a; 正则表达式元字符基本使用 量词 贪婪匹配和惰性匹配 惰性匹配如下两张图&#xff0c;而 .* 就表示贪婪匹配&#xff0c;即尽可能多的匹配到符合的字符串&#xff0c;如果使用贪婪匹配&#xff0c;那么结果就是图中的情况三 p…...

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…...

《漫画算法》笔记——计算两个大数的和

例题&#xff1a; 输入&#xff1a;“123”&#xff0c;“234” 输出&#xff1a;“357” 思路&#xff1a; 使用数组&#xff0c;分别计算每一位上的加和&#xff0c;注意记录进位信息。 然后&#xff0c;将数组恢复成字符串&#xff0c;输出。 值得注意的是&#xff0c;加和…...

Python3.13版本改进规划

大家好&#xff0c;最近faster-cpython 项目的文档介绍了关于 Python 3.13 的规划&#xff0c;以及在 3.13 版本中将要实现的一些优化和改进。faster-python 是 Python 的创始人 Guido van Rossum 和他的团队提出的计划 &#xff0c;目标是在四年内将 CPython 的性能提升五倍。…...

aws配置以及下载 spaceNet6 数据集

一&#xff1a;注册亚马逊账号 注册的时候&#xff0c;唯一需要注意的是信用卡绑定&#xff0c;这个可以去淘宝买&#xff0c;搜索aws匿名卡。 注册完记得点击登录&#xff0c;记录一下自己的账户ID哦&#xff01; 二&#xff1a;登录自己的aws账号 2.1 首先创建一个用户 首…...

进阶之路:高级Spring整合技术解析

Spring整合 1.1 Spring整合Mybatis思路分析1.1.1 环境准备步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:添加Mybatis核心配置文件步骤8:编写应用程序步骤9:运行程序 1.…...

【ArcGIS微课1000例】0081:ArcGIS指北针乱码解决方案

问题描述&#xff1a; ArcGIS软件在作图模式下插入指北针&#xff0c;出现指北针乱码&#xff0c;如下图所示&#xff1a; 问题解决 下载并安装字体&#xff08;配套实验数据包0081.rar中获取&#xff09;即可解决该问题。 正常的指北针选择器&#xff1a; 专栏介绍&#xff…...

uniapp运行到手机模拟器

第一步&#xff0c;下载MUMU模拟器 下载地址&#xff1a;MuMu模拟器官网_安卓12模拟器_网易手游模拟器 (163.com) 第二步&#xff0c;运行mumu模拟器 第三步&#xff0c;运行mumu多开器 第三步&#xff0c;查看abs 端口 第四步&#xff0c;打开HBuilder,如下图&#xff0c;将…...

基于PHP的蛋糕购物商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的蛋糕购物商城系统 一 介绍 此蛋糕购物商城基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…...

嵌入式中的定时器概念

定时器概述 定时器是嵌入式系统中常用的一种外设,它可以产生一定的时间间隔、延时、定时等功能,广泛应用于定时、计数、脉冲宽度调制(PWM)等领域。 具体而言,定时器可以实现以下功能: 计时:定时器可以用来实现延时操作,例如等待外部设备的稳定、等待数据的接收等,也可以…...

鸿蒙ArkTS语言介绍与TS基础语法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言&#xff0c;它在TS基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等响应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言&#xff0c;已经被广泛用…...

08_CMDB系统开发二

CMDB系统开发二 一、用户组管理模块 1、展示用户组列表 Django自带了用户表&#xff0c;同时也带了用户组表。他们是多对多关系。用户组模型很简单&#xff0c;和User模型是多对多的关系。用户组顾名思义&#xff0c;就是对用户进行了分组。其作用在权限控制中就是可以批量的…...

JavaOOP篇----第九篇

系列文章目录 文章目录 系列文章目录前言一、java中是值传递引用传递?二、实例化数组后,能不能改变数组长度呢?三、假设数组内有5个元素,如果对数组进行反序,该如何做?四、形参与实参区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…...

17网站一起做网店 发货慢/最新seo教程

2019独角兽企业重金招聘Python工程师标准>>> 过度使用同步会导致性能低下、死锁或其他不确定问题 在一个同步方法或代码块中&#xff0c;不要放弃对客户端的控制 即&#xff1a;在一个同步区域内部&#xff0c;不要调用被覆盖方法&#xff0c;或者是传入对象提供的方…...

wordpress编辑器没有16px/网络营销的平台有哪些

一、导读 本文主要内容包括数组转换成List&#xff0c;List转成数组&#xff0c;List转成map的几种方式。 好文章 记得 收藏点赞关注 &#xff01;&#xff01;&#xff01; 二、代码 /*** 练习数组转list&#xff0c;list转数组&#xff0c;list转map** author JiaMing* sin…...

如何做系统集成公司网站/网络营销属于什么专业类型

经过小编多次下图刷怪发现起源冰城的稀有材料道具掉落非常多&#xff0c;特别是神魔晶石、祝福宝石和灵魂宝石掉落极高。缺少这类材料的朋友可以在起源冰城打怪刷材料哦&#xff01;而恶魔令和天地灵气必须击败高级boss和妖兽才有几率掉落一到两个材料&#xff0c;这两种材料太…...

杭州网站设计开发/app下载量推广

2019独角兽企业重金招聘Python工程师标准>>> https://github.com/javahongxi 本文转载自kaitao.toutiao.im 4.1 ServletContext接口介绍 ServletContext&#xff08;Servlet上下文&#xff09;接口定义了servlet运行在的Web应用的视图。容器供应商负责提供Servlet容…...

建设信用卡官方网站/培训心得体会800字

电大计算机科学与技术c语言各章练习题答案各章练习题答案第1章 C语言概述1.1 简答题1 答&#xff1a;C语言单词分为保留字、标识符、字面常量、运算符和分隔符5类。2 答&#xff1a;首字符必须是英文字母或下划线&#xff1b;其余位置上的字符必须是英文字母、十进制数字符号或…...

手机上可视化编程app/成都市seo网站公司

dLua类似gdb的lua调试器特性支持Linux平台C编写通过附加到其他进程上&#xff0c;进行调试gdb风格的调试指令&#xff0c;包括设置条件断点、查看变量、设置变量编译下载编译安装lua用脚本编译dlua&#xff0c;生成dlua与dluaagent.so&#xff0c;dlua是控制台&#xff0c;dlua…...