Python Django全功能框架开发秘籍
本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。
文章目录
- 引言
- 一、Django 简介
- 1.1 Django 的诞生与背景
- 1.2 Django 的特点概述
- 二、Django 的核心特性
- 2.1 ORM 特性
- 2.1.1 ORM 原理与优势
- 2.1.2 ORM 在实际应用中的优势
- 2.2 模板引擎
- 2.2.1 模板引擎的工作机制
- 2.2.2 模板引擎在实际开发中的应用
- 2.3 表单处理
- 2.3.1 表单处理的基本概念
- 2.3.2 表单处理在实际场景中的优势
- 2.4 中间件
- 2.4.1 中间件的作用与原理
- 2.4.2 中间件在实际项目中的应用
- 三、Django 项目的架构设计
- 3.1 分层架构设计
- 3.2 模块化设计
- 四、Django 项目的部署与优化
- 4.1 部署 Django 项目
- 4.2 性能优化
- 总结
引言
大家好,我是沛哥儿。
在如今这个互联网技术飞速发展、日新月异的时代,对于咱们开发者来说,选择一款合适的 Web 框架那可真是至关重要,就好比战士上战场选一把称手的兵器一样。今天咱就来好好唠唠 Django 这个全功能的 Web 框架,它可是凭借强大的功能和简洁易用的特性,成了众多开发者的心头好。接下来深度剖析一下 Django 的那些厉害之处。
一、Django 简介
1.1 Django 的诞生与背景
Django 是基于 Python 的一款 Web 框架,由 Adrian Holovaty 和 Simon Willison 在 2005 年创建。从诞生的那一刻起,它就带着“不要重复发明轮子”的设计哲学横空出世。这个理念就好比是给开发者们提供了一个装满各种工具的百宝箱,让大家可以直接用里面现成的工具来搭建复杂的 Web 应用,而不用再自己辛辛苦苦地去造各种小工具。
1.2 Django 的特点概述
Django 全功能特性丰富得很,自带 ORM(对象关系映射)、模板引擎、表单处理等众多实用功能。这就好比是一个超级大礼包,你想要的功能,它基本都有。比如说 ORM,它能让开发者用 Python 代码直接操作数据库,而不用费劲去写 SQL 语句;模板引擎可以让开发者用 HTML 代码定义页面布局,再通过模板语言动态插入数据;表单处理则能方便地处理用户提交的数据,还能进行数据验证。
下面是一个简单的 mermaid 流程图,展示 Django 的主要特性关系:
二、Django 的核心特性
2.1 ORM 特性
2.1.1 ORM 原理与优势
Django 的 ORM 是其核心特性之一。它就像是一个翻译官,把 Python 代码翻译成数据库能懂的 SQL 语句,从而让开发者可以用熟悉的 Python 语言来操作数据库。这样一来,开发者就不用去深入了解各种数据库的 SQL 语法了,大大提高了开发效率。而且,Django 的 ORM 支持多种数据库后端,像 MySQL、PostgreSQL、SQLite 等,开发者可以根据项目需求随意挑选。
# 以下是一个简单的 Django ORM 示例,定义一个商品模型
from django.db import models# 定义商品模型类
class Product(models.Model):# 商品名称字段,最大长度为 200name = models.CharField(max_length=200)# 商品价格字段,使用 DecimalField 存储精确的十进制数price = models.DecimalField(max_digits=10, decimal_places=2)def __str__(self):# 返回商品名称作为对象的字符串表示return self.name
在这个示例中,我们定义了一个 Product
模型类,它有两个字段:name
和 price
。通过这个模型类,我们可以方便地对商品数据进行增删改查操作。
2.1.2 ORM 在实际应用中的优势
在实际开发中,比如开发一个电商网站,开发者可以用 ORM 定义商品、订单、用户等模型,再用 ORM 提供的 API 完成商品的增删改查、订单的处理等操作。这样一来,开发者就能把更多的精力放在业务逻辑的实现上,而不用操心底层数据库的细节。就好比你要盖房子,ORM 就像是一个专业的建筑工人,帮你把地基打好,你只需要在上面盖房子就行了。
2.2 模板引擎
2.2.1 模板引擎的工作机制
Django 的模板引擎允许开发者使用 HTML 代码定义页面布局,然后通过模板语言动态插入数据。它提供了丰富的模板标签和过滤器,就像是给开发者提供了一把神奇的画笔,能轻松完成各种复杂的页面渲染。比如说,你可以用模板标签来控制页面的逻辑,用过滤器来对数据进行格式化。
# 在 Django 视图中传递数据到模板
from django.shortcuts import render
from .models import Product# 定义商品列表视图函数
def product_list(request):# 从数据库中获取所有商品对象products = Product.objects.all()# 渲染商品列表模板,并传递商品列表数据return render(request, 'product_list.html', {'products': products})
<!-- product_list.html 模板文件 -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Product List</title>
</head>
<body><h1>Product List</h1><ul>{% for product in products %}<li>{{ product.name }} - ${{ product.price }}</li>{% endfor %}</ul>
</body>
</html>
在这个示例中,我们在视图函数中获取商品数据,然后传递给模板。在模板中,使用 {% for %}
标签遍历商品列表,并显示每个商品的名称和价格。
2.2.2 模板引擎在实际开发中的应用
在开发新闻网站时,开发者可以用模板定义新闻列表页、新闻详情页等页面,再通过模板语言动态插入新闻数据。这样就能轻松实现页面的个性化定制,而不用关心后端数据的处理。就好比是给你一个空白的画布,你可以根据自己的想法随意涂抹颜色。
2.3 表单处理
2.3.1 表单处理的基本概念
Django 的表单处理允许开发者用 Python 代码定义表单,并通过表单类处理表单提交的数据。它提供了丰富的验证功能,就像是一个严格的质检员,能确保用户输入的数据符合预期的格式。比如说,在用户注册时,它可以验证用户输入的邮箱是否合法,密码是否符合长度要求等。
# 定义用户注册表单类
from django import forms# 用户注册表单类,继承自 forms.Form
class UserRegistrationForm(forms.Form):# 用户名输入字段,最大长度为 100username = forms.CharField(max_length=100)# 密码输入字段,使用 PasswordInput 隐藏输入内容password = forms.CharField(widget=forms.PasswordInput)# 邮箱输入字段,使用 EmailField 验证邮箱格式email = forms.EmailField()
# 在视图中处理表单提交
from django.shortcuts import render, redirect
from .forms import UserRegistrationForm# 定义用户注册视图函数
def user_registration(request):if request.method == 'POST':# 如果是 POST 请求,使用请求数据初始化表单对象form = UserRegistrationForm(request.POST)if form.is_valid():# 如果表单数据有效,进行相应处理username = form.cleaned_data['username']password = form.cleaned_data['password']email = form.cleaned_data['email']# 这里可以进行用户注册的逻辑,比如保存到数据库return redirect('success_page')else:# 如果是 GET 请求,创建一个空的表单对象form = UserRegistrationForm()# 渲染用户注册模板,并传递表单对象return render(request, 'user_registration.html', {'form': form})
在这个示例中,我们定义了一个用户注册表单类,包含用户名、密码和邮箱字段。在视图中,根据请求方法处理表单数据,如果数据有效,则进行相应的处理。
2.3.2 表单处理在实际场景中的优势
在开发用户注册功能时,开发者可以用 Django 的表单处理来定义用户注册表单,然后轻松实现用户注册功能,并确保用户输入的数据符合预期的格式。这样就能让用户交互更加便捷,就像是给用户提供了一个友好的向导,引导用户正确地完成注册流程。
2.4 中间件
2.4.1 中间件的作用与原理
Django 的中间件允许开发者定义一系列的中间件组件,来处理请求和响应。它就像是一个交通警察,在请求到达视图之前和响应返回给客户端之前,对请求和响应进行拦截和处理。中间件可以完成很多有用的功能,比如身份验证、日志记录、性能监控等等。
下面是一个简单的 mermaid 流程图,展示中间件的处理流程:
比如说,我们可以写一个简单的中间件来记录每个请求的处理时间:
import timeclass RequestTimeMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):start_time = time.time()response = self.get_response(request)end_time = time.time()print(f"Request to {request.path} took {end_time - start_time:.2f} seconds.")return response
要使用这个中间件,只需要在 settings.py
中的 MIDDLEWARE
列表里添加它的路径:
MIDDLEWARE = [# ...'your_app.middleware.RequestTimeMiddleware',# ...
]
2.4.2 中间件在实际项目中的应用
在实际项目中,中间件可以用来做很多事情。比如,我们可以写一个中间件来进行用户身份验证。当用户访问某些需要登录的页面时,如果用户没有登录,就会被重定向到登录页面。
from django.shortcuts import redirectclass AuthenticationMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 定义需要登录才能访问的页面路径protected_paths = ['/dashboard/', '/profile/']if request.path in protected_paths and not request.user.is_authenticated:return redirect('login')response = self.get_response(request)return response
同样,把这个中间件添加到 settings.py
的 MIDDLEWARE
列表中,就可以实现对特定页面的访问控制了。
三、Django 项目的架构设计
3.1 分层架构设计
Django 项目可以采用分层架构来组织代码,这样可以提高代码的可维护性和可扩展性。一般来说,我们可以把项目分为数据层、业务逻辑层和表现层。
数据层主要负责与数据库交互,也就是我们前面提到的 ORM 部分。业务逻辑层处理具体的业务规则,表现层负责与用户交互,也就是视图和模板的部分。
下面是一个简单的类图,展示分层架构的关系:
3.2 模块化设计
在 Django 项目中,我们还可以采用模块化设计。把不同的功能模块分开,每个模块有自己独立的模型、视图、模板和表单。这样可以让代码更加清晰,便于团队协作开发。
比如说,我们开发一个电商网站,可以把商品模块、订单模块、用户模块分开。每个模块可以有自己的 URL 路由和视图函数。
# 商品模块的 urls.py
from django.urls import path
from . import viewsurlpatterns = [path('products/', views.product_list, name='product_list'),path('products/<int:pk>/', views.product_detail, name='product_detail'),
]# 订单模块的 urls.py
from django.urls import path
from . import viewsurlpatterns = [path('orders/', views.order_list, name='order_list'),path('orders/<int:pk>/', views.order_detail, name='order_detail'),
]
然后在项目的总 urls.py
中把这些模块的 URL 路由合并起来:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('products/', include('products.urls')),path('orders/', include('orders.urls')),
]
四、Django 项目的部署与优化
4.1 部署 Django 项目
部署 Django 项目可以采用不同的方式,比如使用 Nginx + Gunicorn + Django 的组合。Nginx 作为前端服务器,负责处理静态文件和转发请求到 Gunicorn,Gunicorn 作为应用服务器来运行 Django 项目。
下面是一个简单的部署流程图:
部署步骤如下:
- 安装 Nginx 和 Gunicorn
- 配置 Nginx 来转发请求到 Gunicorn
- 启动 Gunicorn 来运行 Django 项目
# 启动 Gunicorn
gunicorn your_project.wsgi:application -b 127.0.0.1:8000
4.2 性能优化
为了提高 Django 项目的性能,我们可以采取很多措施。比如,使用缓存来减少数据库查询。Django 自带了缓存框架,我们可以使用文件系统缓存、内存缓存等等。
from django.core.cache import cachedef some_view(request):data = cache.get('my_data')if data is None:data = SomeModel.objects.all()cache.set('my_data', data, 60 * 15) # 缓存 15 分钟return render(request, 'template.html', {'data': data})
还可以优化数据库查询,避免 N+1 查询问题。比如,使用 select_related()
和 prefetch_related()
方法。
# 避免 N+1 查询
products = Product.objects.select_related('category').all()
总结
Django 作为一款强大的 Python Web 框架,有着丰富的功能和特性。从 ORM 到模板引擎,从表单处理到中间件,每个部分都为开发者提供了便利。通过合理的架构设计、有效的部署和性能优化,我们可以开发出高效、稳定的 Web 应用。无论是新手开发者还是有经验的架构师,都可以在 Django 的世界里找到自己的乐趣和挑战。
#Django #PythonWeb开发 #ORM #模板引擎 #表单处理 #中间件 #项目架构 #项目部署 #性能优化 #Web开发技巧
相关文章:
Python Django全功能框架开发秘籍
本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 引言一、Django 简介1.1 Django 的诞生与背景1.2 Django 的特点概述 二、Django 的核心特性2.1 ORM 特性2.1.1 ORM 原理与优势2.1.2 ORM 在实际应用中的优势 2.2 模板引擎2.2.1 模板引擎的工作机…...
四核 A53+工业级存储:移远 SC200L 与 pSLC SD NAND 如何重构 T-BOX 性能边界?
博客目录 一、移远 SC200L:T-BOX 的 “智慧大脑”二、米客方德 MKDN064GIL-ZA T-BOX:数据安全的坚固堡垒三、深度协同:拓展 T-BOX 应用边界 在车联网浪潮席卷而来的当下,T-BOX 作为汽车与外界交互的核心枢纽,其性能优劣…...
docker方式启动Jenkins
docker方式启动Jenkins 1.启动命令 我已经打包好了文件,如下命令即可启动 docker run -d -v jenkins_home:/var/jenkins_home -p 8088:8080 -p 50000:50000 --restarton-failure registry.cn-hangzhou.aliyuncs.com/devops_de/jenkins:lts-jdk17 还需要设置一下目录权限,要…...
【目标检测】图像处理基础:像素、分辨率与图像格式解析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
国产免费的k8s管理平台
xkube是一款永久免费且无任何功能限制的k8s集群管理平台,提供PC端和移动端全平台支持,具备完善的集群管理、运维监控和CI/CD发布功能,让企业轻松实现跨集群的统一管理和自动化运维。 技术特点: 1、xkube是一款国产永久免费的k8s…...
火山引擎大模型未来发展趋势
用户可能正在做技术选型或者行业研究,需要预测火山引擎在激烈竞争中的突围方向。从问题简洁性看,ta可能已经有一定基础认知,不需要我从零科普大模型概念。 火山引擎作为字节跳动的技术输出平台,优势在于背靠抖音、今日头条等超级应…...
Java基础(三):逻辑运算符详解
Java基础系列文章 Java基础(一):发展史、技术体系与JDK环境配置详解 Java基础(二):八种基本数据类型详解 Java基础(三):逻辑运算符详解 目录 一、什么是逻辑运算符?二、基础逻辑运算符(3种)1、&&…...
设计模式 | 单例模式
单例模式(Singleton Pattern) 是设计模式中最简单却最常用的模式之一,它确保一个类只有一个实例,并提供全局访问点。本文将深入探讨单例模式的核心思想、实现技巧以及在C中的多种实现方式。 为什么需要单例模式? 在软…...
SQL_Server 基本语法
1.创建数据库 use master go if exists(select * from sysdatabases where nameCourseManageDB) drop database CourseManageDB go --创建数据库 create database CourseManageDB on primary (--数据库的逻辑文件名(就是系统用的,必须唯一)…...
剑指offer39_连续子数组的最大和
连续子数组的最大和 输入一个 非空 整型数组,数组里的数可能为正,也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为 O ( n ) O(n) O(n)。 数据范围 数组长度 [ 1 , 1000 ] [1,1000] [1,100…...
SPL 实践系列:跨库移植 SQL
背景 应用程序可能要基于不同数据库工作,各种数据库的 SQL 语法大体一致,但仍有些差别,结果就要改造这些 SQL,而这事通常只能手工调整,工作量大还容易出错。 完全自动改造 SQL 几乎是无法做到的,毕竟各种…...
docker启动的rabbitmq搭建并集群和高可用
Docker 搭建 RabbitMQ 集群步骤 以下是使用 Docker 快速搭建 RabbitMQ 集群的详细步骤,包含配置文件、网络设置和集群组建过程。 1. 创建自定义网络 首先创建一个 Docker 网络,使容器间可以通过名称互相访问: docker network create rabb…...
ISCSI存储
ISCSI存储 一、iscsi简介 1. 基本概念 iSCSI(Internet Small Computer System Interface)即互联网小型计算机系统接口,它是一种基于 TCP/IP 协议的存储网络协议,将传统的 SCSI(Small Computer System Interface&…...
算法与数据结构:动态规划DP
文章目录 动态规划算法全面解析一、核心思想与基本概念二、动态规划与其他算法的区别三、动态规划的解题步骤四、经典案例解析1. **斐波那契数列(Fibonacci)**2. **0-1背包问题(0-1 Knapsack)**3. **最长公共子序列(LC…...
核心概念解析:AI、数据挖掘、机器学习与深度学习的关系
核心概念解析:AI、数据挖掘、机器学习与深度学习的关系 本节旨在厘清人工智能(AI)、机器学习(ML)、深度学习(DL)、数据挖掘等常被混淆的概念及其相互关系。 1. 从应用目标看:人工智…...
跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破
跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破 大语言模型(LLM)推理能力的提升是AI领域的重要方向,强化学习(RL)为此提供了新思路。本文提出的GURU框架,通过构建跨领域RL推理语…...
黑马python(十三)
目录: 1.文件编码概念 2.文件的读取操作 3.文件的写入操作 4.文件的追加写操作 5.文件操作的综合案例 1.文件编码概念 2.文件的读取操作 多次调用read或相关读取方法会接着上一次读取的记录读 如果文件没有关闭,只要程序还在运行,文件…...
Redis-CPP 5大类型操作
这篇文章不会讲解所有关于5大基础类型的所有命令,只讲解几个常用的命令操作。如果想看全部的命令操作,可以看其它的文章。 string set 先来看一看set操作在服务器端的函数原型: SET key value [expiration EX seconds|PX milliseconds] [N…...
Linux 下的 socket
1、简介 Socket,中文常称为“套接字”,是 UNIX 操作系统中引入的一种通信抽象接口,用于支持不同进程之间,特别是不同主机之间的通信。在 UNIX 哲学中,“一切皆文件”,包括网络通信也不例外。Socket 就是这种…...
链接脚本基础语法
目录 前言 ELF文件布局 链接脚本语法 段定义标准格式 地址计数器 . 地址计数器的动态特性 赋值 vs 引用 符号定义 通配符规则 COMMON块 COMMON 块的产生与处理 示例脚本 前言 由于嵌入式系统内存资源珍贵,链接脚本可指定代码段(.text &#…...
Python期末速成
一.基础内容 赋值语句: a 1 b "mayday" 标识符规则: 1.字母,数字,下划线,汉字组成。但数字不能开头 2.不能是保留字 3.特殊符号不行,*¥^等 注释是在语句前面加# …...
Python打卡训练营Day56
DAY 56 时序数据的检验 知识点回顾: 假设检验基础知识 原假设与备择假设P值、统计量、显著水平、置信区间 白噪声 白噪声的定义自相关性检验:ACF检验和Ljung-Box 检验偏自相关性检验:PACF检验 平稳性 平稳性的定义单位根检验 季节性检验 ACF检…...
没掌握的知识点记录
1、微内核的主要优点在于结构清晰、内核代码量少,安全性和可靠性高、可移植性强、可伸缩性、可扩展性高;其缺点是难以进行良好的整体优化、进程间互相通信的开销大、内核功能代码不能被直接调用而带来服务的效率低。 2、题目: 分页内存管理…...
Python商务数据分析——Python 入门基础知识学习笔记
一、简介 1.1 Python 特性 解释型语言:代码无需编译可直接运行,适合快速开发。 动态类型:变量类型在运行时确定(如x1后x"str"仍合法)。 面向对象:支持类、对象、继承等特性,代码可…...
企业级安全实践:SSL 加密与权限管理(二)
权限管理:企业数据的守护者 权限管理的基本概念与重要性 权限管理,是指根据系统设置的安全规则或策略,用户可以访问且仅能访问自己被授权的资源,不多不少 。它是企业信息安全体系的重要组成部分,旨在确保只有授权的人…...
JavaScript 的 “==” 存在的坑
(双等) 指的是宽松相等 — 会做隐式类型转换 举例:0 // true 5 5 // true (三等) 指的是严格相等 — 类型和值都相等才 true 举例:0 // false 5 5 // false 在业务逻辑里经常因为隐式转换导致条件误判,业界普遍推荐 一律用 / !。 举…...
深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台
——从物理设备到虚拟机流量的全链路剖析 核心技术组合:VLAN逻辑隔离 OVS虚拟交换 Bonding链路聚合 超融合网络管理 一、架构全景:物理与虚拟网络的协同(附架构图) 核心设计哲学 #mermaid-svg-VbGP3fCgNnoLVMgH {font-family:&…...
Git使用总结
1.基本概念: Git中的区域: git中有几个区域;本地工作区;本地提交区;origin远端。 一般来说的工作上传顺序是: 将修改文件添加到工作区域----提交到本地提交区域----push到远端分支 Git中的分支 远端和…...
爬虫入门练习(文字数据的爬取)
爬取csdn用户的用户简介 学习一下 BeautifulSoup方法 from bs4 import BeautifulSoup html_content """ <html> <head><title>示例网页</title> </head> <body><h1 class"main-title">欢迎学习Beauti…...
MySQL学习(1)——基础库操作
欢迎来到博主的专栏:MySQL学习 博主ID:代码小豪 文章目录 数据库原理基础库操作增删数据库数据库编码与校验规则验证不同的校验规则对于库中数据的影响 备份与恢复数据库 数据库原理 mysql版本:mysql8.0 操作系统:ubuntu22.4 为了减少由于环境配置以及权限限制带来的使用问题&…...
P99延迟:系统性能优化的关键指标
理解P99延迟 当谈论系统性能时,延迟指标扮演着至关重要的角色。其中,P99延迟作为最重要的性能指标之一,能够帮助我们识别系统的性能瓶颈,优化用户体验。 构建一个功能完善的后端系统,通过了所有功能测试,准…...
人工智能、机器人最容易取哪些体力劳动和脑力劳动
人工智能、机器人最容易取哪些体力劳动和脑力劳动 人工智能和机器人的发展可以替代人类简单的体力劳动和脑力劳动,但很难替代复杂的体力劳动和脑力劳动。 肌肉收缩的原理和运动特点 人类的体力劳动是靠肌肉的收缩完成的,其工作原理是肌肉内的肌球蛋白…...
【代码解析】opencv 安卓 SDK sample - 1 - HDR image
很久没有写安卓了,复习复习。用的是官方案例,详见opencv-Android-sdk 包 // 定义包名,表示该类的组织路径 package org.opencv.samples.tutorial1;// 导入所需的OpenCV和Android类库 import org.opencv.android.CameraActivity; // OpenCV…...
管理综合知识点
比与比例涉及的问题 比与比例基础知识比例的转换正反比例浓度问题利润问题增长率问题比例与面积行程问题 一、比例转换与性质 核心公式: 若 a : b c : d a:b c:d a:bc:d或 a b c d \frac{a}{b} \frac{c}{d} badc → a d b c ad bc adbc(交…...
机器学习:特征向量与数据维数概念
特征向量与数据维数概念 一、特征向量与维数的定义 特征向量与特征类别 在机器学习和数据处理中,每个样本通常由多个特征(Feature) 描述。例如,一张图片的特征可能包括颜色、形状、纹理等;一个客户的特征可能包括年龄…...
《情感反诈模拟器》2025学习版
1.2 专业内容支持 67篇情感诈骗案例研究14万字心理学分析资料783条专业配音对白 二、安装与运行 2.1 系统要求 最低配置: 显卡:GTX 1060CPU:i5-8400存储:25GB空间 2.2 运行步骤 解压游戏文件(21.7GB)…...
C++ - 标准库之 <string> npos(npos 概述、npos 的作用)
一、std::string::npos 概述 std::string::npos 是一个静态常量,表示 size_t 类型的最大值 std::string::npos 用于表示字符串操作中的未找到的位置或无效位置 std::string::npos 属于 C 标准库中的 <string> 头文件 二、std::string::npos 的作用 std::s…...
策略设计模式
1. 什么是策略模式 策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户端,客户端中的具体实现只需要了解上下文类。 2. 由什么组成 策略接口&…...
C++结构体初始化与成员函数实现语法详解
C结构体初始化与成员函数实现语法详解 一、结构体静态成员初始化语法 在C中,静态成员变量需要在类外部进行定义和初始化。提供的代码展示了如何为MAIN_PROPULSION_CAN类的静态成员变量进行初始化: MAIN_PROPULSION_CAN::VoltageThresholds MAIN_PROPU…...
第八章 网络安全
1 什么是网络安全 安全通信具有的性质: 机密性:只有发送方和希望的接收方能否理解传输的报文内容(发送方加密报文,接收方解密报文)认证(端点鉴别):发送方和接收方需要确认对方的身…...
开源 python 应用 开发(一)python、pip、pyAutogui、python opencv安装
最近有个项目需要做视觉自动化处理的工具,最后选用的软件为python,刚好这个机会进行系统学习。短时间学习,需要快速开发,所以记录要点步骤,防止忘记。 链接: 开源 python 应用 开发(一&#x…...
CMCC RAX3000M nand版 OpenWrt 可用空间变小的恢复方法
文章目录 问题背景尝试一、通过 Tftpd64 重新刷写 initramfs-recovery 镜像 (不成功)尝试二、重新分配 ubi 卷(此操作存在一定的危险,请查阅相关资料,避免影响到核心分区) 问题背景 CMCC RAX3000M Nand 版…...
云函数调测、部署及日志查看
1、调试云函数 业务函数开发完成后,需要验证函数代码的正确性,DevEco Studio工具支持本地调用和远程调用两种形式的调试函数方法,首先来看看通过本地调用方式调试函数。 1)通过本地调用方式调试云函数 为了验证函数的正确性以及…...
逆向某物 App 登录接口:还原 newSign 算法全流程
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ newSign 参数分析 通过 Hook Java 层加密算法得到 newSign 参数相关信息如下: 具体参考:逆向某物 App 登录接口:抓包分析…...
2140、解决智力问题
题目 解答 正向不好做,反向遍历。 定义:dp[i] [i,n)的分数 初始化:dp[n]0 递推:dp[i]max(dp[i1],questions[i][0]dp[iquestions[i][1]1]) 如果越界了,就截断到dp[n] 最后return dp[0]即可 class Solution { publ…...
肖臻《区块链技术与应用》第六讲:比特币网络
一、分层架构:应用层之下的P2P网络 比特币并非凭空运作,它的协议运行在互联网的应用层之上。而在其底层,支撑整个系统的是一个对等网络(Peer-to-Peer, P2P)。可以这样理解: 应用层 (Application Layer): …...
(C++)素数的判断(C++教学)(C语言)
源代码: #include <iostream> using namespace std;int fun(int num){if(num<1){return 1;}if(num%20){return 0;}else{return 2;} }int main(){while (1){int y0;int num0;cout<<"请输入一个整数:\n";cin>>num;yfun(nu…...
openai-agents实现input_guardrails
目录 版本模块引入自定义LLM模型input_guardrail设置main函数 代码: input_guardrails.ipynb 版本 import agents print(agents.__version__)0.0.19模块引入 from __future__ import annotationsfrom pydantic import BaseModelfrom agents import (Agent,Guardr…...
在高数中 导数 微分 不定积分 定积分 的意义以及联系
在高等数学中,导数、微分、不定积分、定积分是微积分的核心概念,它们既有明确的定义和几何/物理意义,又相互关联。下面分别说明它们的意义,并总结它们之间的联系。 导数的意义 定义: 函数 y f(x) 在点 x 处的导数定义…...
Linux系统基本操作指令
Linux系统基本操作指令 文章目录 Linux系统基本操作指令一、介绍二、基础设置2.1 设置ubuntu与window的共享目录2.2 ubuntu系统简单介绍 三、Linux命令及工具介绍3.1 目录管理命令(功能,格式,参数,系统参数)3.2 文件操作命令 四、网络命令4.1…...