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

Django框架的全面指南:从入门到高级

Django框架的全面指南:从入门到高级

目录

  1. 引言
  2. Django简介
  3. 安装与配置
  4. 创建第一个Django项目
  5. Django的MVT架构
  6. 模型(Model)
  7. 视图(View)
  8. 模板(Template)
  9. URL路由
  10. 表单处理
  11. 用户认证与权限
  12. Django Admin
  13. 高级主题
  14. 总结

引言

Django是一个高级Python Web框架,它鼓励快速开发和干净、实用的设计。Django遵循“Don’t Repeat Yourself”(DRY)原则,旨在帮助开发者快速构建复杂的、数据库驱动的网站。无论你是初学者还是经验丰富的开发者,Django都能为你提供强大的工具和功能,帮助你高效地完成项目。

本文将带你从Django的基础知识开始,逐步深入到高级主题,涵盖模型、视图、模板、URL路由、表单处理、用户认证、Django Admin等内容。我们还将通过示例代码和案例来帮助你更好地理解和应用这些概念。

Django简介

Django最初是由Adrian Holovaty和Simon Willison在2003年开发的,目的是为了简化新闻网站的创建过程。自2005年发布以来,Django已经成为最受欢迎的Python Web框架之一。它被广泛应用于各种类型的项目,从小型博客到大型企业级应用。

Django的主要特点包括:

  • 快速开发:Django提供了许多内置功能,如ORM、模板引擎、表单处理等,使得开发者可以快速构建应用。
  • 安全性:Django内置了许多安全功能,如防止SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
  • 可扩展性:Django的设计允许开发者轻松地扩展和定制框架的功能。
  • 社区支持:Django拥有一个活跃的社区,提供了大量的文档、教程和第三方库。

安装与配置

在开始使用Django之前,你需要先安装它。Django可以通过Python的包管理工具pip来安装。

安装Django

打开终端或命令提示符,运行以下命令来安装Django:

pip install django

安装完成后,你可以通过以下命令来验证Django是否安装成功:

django-admin --version

如果安装成功,你将看到Django的版本号。

创建Django项目

安装完成后,你可以使用django-admin命令来创建一个新的Django项目。假设我们要创建一个名为myproject的项目,可以运行以下命令:

django-admin startproject myproject

这将创建一个名为myproject的目录,其中包含Django项目的基本结构。

运行开发服务器

进入项目目录并启动开发服务器:

cd myproject
python manage.py runserver

默认情况下,开发服务器将在http://127.0.0.1:8000/上运行。打开浏览器并访问该地址,你将看到Django的欢迎页面。

创建第一个Django项目

项目结构

在创建了Django项目后,你会看到以下目录结构:

myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.py
  • manage.py:一个命令行工具,用于与Django项目进行交互。
  • myproject/:项目的实际Python包。
    • settings.py:项目的配置文件。
    • urls.py:项目的URL路由配置。
    • wsgi.py:用于部署项目的WSGI配置。
    • asgi.py:用于部署项目的ASGI配置。

创建应用

Django项目由多个应用(apps)组成。每个应用都是一个独立的模块,负责处理特定的功能。我们可以使用manage.py来创建一个新的应用。

假设我们要创建一个名为blog的应用,可以运行以下命令:

python manage.py startapp blog

这将创建一个名为blog的目录,其中包含应用的基本结构。

注册应用

创建应用后,我们需要将其添加到项目的INSTALLED_APPS设置中。打开myproject/settings.py文件,找到INSTALLED_APPS列表,并添加blog应用:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blog',  # 添加blog应用
]

Django的MVT架构

Django遵循MVT(Model-View-Template)架构模式,这与传统的MVC(Model-View-Controller)模式类似。MVT架构将应用程序分为三个主要部分:

  • Model:负责处理与数据库的交互,定义数据结构。
  • View:负责处理业务逻辑,接收请求并返回响应。
  • Template:负责处理用户界面的呈现,生成HTML页面。

MVT工作流程

  1. 请求到达:用户通过浏览器发送请求到Django应用。
  2. URL路由:Django根据URL路由配置将请求分发到相应的视图。
  3. 视图处理:视图处理请求,可能会与模型交互以获取数据。
  4. 模板渲染:视图将数据传递给模板,模板生成HTML页面。
  5. 响应返回:Django将生成的HTML页面作为响应返回给用户。

模型(Model)

模型是Django中与数据库交互的核心部分。每个模型类对应数据库中的一张表,模型类的属性对应表中的字段。

创建模型

假设我们要创建一个简单的博客应用,其中包含Post模型来表示博客文章。打开blog/models.py文件,并添加以下代码:

from django.db import modelsclass Post(models.Model):title = models.CharField(max_length=200)content = models.TextField()pub_date = models.DateTimeField(auto_now_add=True)def __str__(self):return self.title

在这个例子中,我们定义了一个Post模型,它有三个字段:

  • title:文章的标题,类型为CharField,最大长度为200个字符。
  • content:文章的内容,类型为TextField,可以存储大量文本。
  • pub_date:文章的发布日期,类型为DateTimeFieldauto_now_add=True表示在创建对象时自动设置为当前时间。

迁移数据库

在定义模型后,我们需要将其应用到数据库中。Django使用迁移(migration)来管理数据库模式的变化。运行以下命令来创建并应用迁移:

python manage.py makemigrations
python manage.py migrate

makemigrations命令会生成迁移文件,migrate命令会将迁移应用到数据库中。

使用Django Shell操作模型

Django提供了一个交互式的Python shell,可以方便地操作模型。运行以下命令启动Django shell:

python manage.py shell

在shell中,你可以创建、查询、更新和删除模型对象。例如:

from blog.models import Post# 创建一篇新文章
post = Post(title="我的第一篇博客", content="这是博客的内容。")
post.save()# 查询所有文章
posts = Post.objects.all()
for post in posts:print(post.title, post.pub_date)# 更新文章
post.title = "更新后的标题"
post.save()# 删除文章
post.delete()

视图(View)

视图是Django中处理业务逻辑的部分。它接收HTTP请求并返回HTTP响应。视图可以是函数或类。

函数视图

最简单的视图是函数视图。打开blog/views.py文件,并添加以下代码:

from django.shortcuts import render
from django.http import HttpResponse
from .models import Postdef index(request):posts = Post.objects.all()return render(request, 'blog/index.html', {'posts': posts})def post_detail(request, post_id):post = Post.objects.get(id=post_id)return render(request, 'blog/post_detail.html', {'post': post})

在这个例子中,我们定义了两个视图函数:

  • index:显示所有博客文章的列表。
  • post_detail:显示单篇博客文章的详细信息。

类视图

Django还提供了基于类的视图(Class-Based Views,CBV),它们比函数视图更灵活和强大。例如,我们可以使用ListViewDetailView来简化视图的编写:

from django.views.generic import ListView, DetailView
from .models import Postclass PostListView(ListView):model = Posttemplate_name = 'blog/index.html'context_object_name = 'posts'class PostDetailView(DetailView):model = Posttemplate_name = 'blog/post_detail.html'context_object_name = 'post'

URL路由

为了让视图能够处理请求,我们需要将其映射到URL。打开blog/urls.py文件(如果不存在,请创建它),并添加以下代码:

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('post/<int:post_id>/', views.post_detail, name='post_detail'),
]

然后,将blog应用的URL配置包含到项目的urls.py中:

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('blog/', include('blog.urls')),
]

现在,你可以通过以下URL访问博客应用:

  • http://127.0.0.1:8000/blog/:显示所有博客文章的列表。
  • http://127.0.0.1:8000/blog/post/1/:显示ID为1的博客文章的详细信息。

模板(Template)

模板是Django中用于生成HTML页面的部分。Django使用自己的模板语言(DTL)来动态生成内容。

创建模板

blog应用目录下创建一个名为templates/blog/的目录,并在其中创建两个模板文件:index.htmlpost_detail.html

index.html

<!DOCTYPE html>
<html>
<head><title>博客首页</title>
</head>
<body><h1>博客文章列表</h1><ul>{% for post in posts %}<li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>{% endfor %}</ul>
</body>
</html>

post_detail.html

<!DOCTYPE html>
<html>
<head><title>{{ post.title }}</title>
</head>
<body><h1>{{ post.title }}</h1><p>{{ post.content }}</p><p>发布日期:{{ post.pub_date }}</p>
</body>
</html>

模板继承

Django的模板系统支持模板继承,允许你创建一个基础模板,并在其他模板中扩展它。例如,我们可以创建一个基础模板base.html

<!DOCTYPE html>
<html>
<head><title>{% block title %}我的博客{% endblock %}</title>
</head>
<body><header><h1>我的博客</h1></header><main>{% block content %}{% endblock %}</main><footer><p>&copy; 2023 我的博客</p></footer>
</body>
</html>

然后,在index.htmlpost_detail.html中扩展基础模板:

index.html

{% extends 'blog/base.html' %}{% block title %}博客首页{% endblock %}{% block content %}<h1>博客文章列表</h1><ul>{% for post in posts %}<li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>{% endfor %}</ul>
{% endblock %}

post_detail.html

{% extends 'blog/base.html' %}{% block title %}{{ post.title }}{% endblock %}{% block content %}<h1>{{ post.title }}</h1><p>{{ post.content }}</p><p>发布日期:{{ post.pub_date }}</p>
{% endblock %}

表单处理

Django提供了强大的表单处理功能,可以轻松地创建和处理HTML表单。

创建表单

假设我们要创建一个表单,允许用户提交新的博客文章。首先,在blog/forms.py文件中定义一个表单类:

from django import forms
from .models import Postclass PostForm(forms.ModelForm):class Meta:model = Postfields = ['title', 'content']

处理表单提交

接下来,我们需要在视图中处理表单的提交。打开blog/views.py文件,并添加以下代码:

from django.shortcuts import render, redirect
from .forms import PostFormdef create_post(request):if request.method == 'POST':form = PostForm(request.POST)if form.is_valid():form.save()return redirect('index')else:form = PostForm()return render(request, 'blog/create_post.html', {'form': form})

创建模板

templates/blog/目录下创建一个名为create_post.html的模板文件:

{% extends 'blog/base.html' %}{% block title %}创建新文章{% endblock %}{% block content %}<h1>创建新文章</h1><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">提交</button></form>
{% endblock %}

URL路由

最后,将create_post视图映射到URL。打开blog/urls.py文件,并添加以下代码:

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('post/<int:post_id>/', views.post_detail, name='post_detail'),path('create/', views.create_post, name='create_post'),
]

现在,你可以通过http://127.0.0.1:8000/blog/create/访问创建新文章的页面。

用户认证与权限

Django内置了用户认证系统,可以轻松地处理用户注册、登录、注销等功能。

用户注册

要允许用户注册,我们可以使用Django的UserCreationForm。打开blog/views.py文件,并添加以下代码:

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import logindef register(request):if request.method == 'POST':form = UserCreationForm(request.POST)if form.is_valid():user = form.save()login(request, user)return redirect('index')else:form = UserCreationForm()return render(request, 'blog/register.html', {'form': form})

用户登录

Django提供了LoginView来处理用户登录。打开blog/urls.py文件,并添加以下代码:

from django.contrib.auth import views as auth_viewsurlpatterns = [path('', views.index, name='index'),path('post/<int:post_id>/', views.post_detail, name='post_detail'),path('create/', views.create_post, name='create_post'),path('register/', views.register, name='register'),path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

用户权限

Django还提供了权限系统,允许你控制用户对特定资源的访问。例如,我们可以限制只有登录用户才能创建新文章:

from django.contrib.auth.decorators import login_required@login_required
def create_post(request):if request.method == 'POST':form = PostForm(request.POST)if form.is_valid():form.save()return redirect('index')else:form = PostForm()return render(request, 'blog/create_post.html', {'form': form})

Django Admin

Django自带了一个强大的管理界面,允许你轻松地管理数据库中的数据。

注册模型

要使用Django Admin管理Post模型,我们需要将其注册到Admin中。打开blog/admin.py文件,并添加以下代码:

from django.contrib import admin
from .models import Postadmin.site.register(Post)

访问Admin界面

启动开发服务器并访问http://127.0.0.1:8000/admin/,你将看到Django Admin的登录页面。使用超级用户账户登录后,你可以管理Post模型的数据。

自定义Admin界面

你可以通过自定义ModelAdmin类来定制Admin界面的显示和行为。例如:

from django.contrib import admin
from .models import Postclass PostAdmin(admin.ModelAdmin):list_display = ('title', 'pub_date')list_filter = ('pub_date',)search_fields = ('title', 'content')admin.site.register(Post, PostAdmin)

高级主题

中间件

Django的中间件是一个轻量级的插件系统,允许你在请求和响应的处理过程中插入自定义逻辑。你可以通过编写中间件类来实现全局的请求处理、响应处理、异常处理等功能。

信号

Django的信号系统允许你在某些事件发生时执行特定的操作。例如,你可以在保存模型对象时发送信号,并在信号处理函数中执行额外的逻辑。

缓存

Django提供了多种缓存后端,包括内存缓存、文件缓存、数据库缓存等。你可以通过配置缓存来提高应用的性能。

国际化

Django支持多语言应用,允许你轻松地将应用翻译成多种语言。你可以通过配置语言文件和使用翻译函数来实现国际化。

测试

Django内置了测试框架,允许你编写单元测试、集成测试和功能测试。你可以使用TestCase类来编写测试用例,并使用Client类来模拟HTTP请求。

总结

Django是一个功能强大且灵活的Web框架,适用于各种类型的项目。通过本文的介绍,你应该已经掌握了Django的基础知识,并能够开始构建自己的Web应用。随着你对Django的深入了解,你将发现它提供了许多高级功能和工具,可以帮助你更高效地开发和维护应用。

希望本文对你有所帮助,祝你在Django的学习和开发过程中取得成功!

相关文章:

Django框架的全面指南:从入门到高级

Django框架的全面指南&#xff1a;从入门到高级 目录 引言Django简介安装与配置创建第一个Django项目Django的MVT架构模型&#xff08;Model&#xff09;视图&#xff08;View&#xff09;模板&#xff08;Template&#xff09;URL路由表单处理用户认证与权限Django Admin高级…...

c++继承

继承的概念和定义 继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 程序设计的…...

【Linux系统】分页式存储管理

分页式存储管理 1、虚拟地址和页表的由来 思考一下&#xff0c;如果在没有虚拟内存和分页机制的情况下&#xff0c;每一个用户程序在物理内存上所对应的空间必须是连续的&#xff0c;如下图&#xff1a; 因为每一个程序的代码、数据长度都是不一样的&#xff0c;按照这样的映射…...

cmd执行mysql命令

安装mysql之后如果想使用cmd执行mysql命令&#xff0c;需要怎么操作呢&#xff0c;下面一起看一下。 安装mysql之后&#xff0c;如果直接去cmd窗口执行MySQL命令&#xff0c;窗口可能会提示mysql不是可执行命令。 需要配置系统的环境变量&#xff0c;将mysql的安装路径配置系…...

第一天:Linux内核架构、文件系统和进程管理

目录 Linux核心概念学习笔记一、Linux内核架构(一)内核的任务(二)实现策略(三)内核的组成部分(四)内核源文件目录结构二、Linux文件系统(一)文件系统架构(二)虚拟文件系统的数据结构三、Linux进程管理(一)进程相关概念(二)进程的层次结构(三)新进程创建机制(…...

QT:信号和槽

目录 1.概念 2.信号和槽的使用 2.1代码的方式使用 2.1.1.使用connect关联 2.2图形化界面的方式使用 2.2.1使用流程 2.2.2使用名字关联槽函数 3.自定义信号和槽函数 3.1自定义槽函数 3.2自定义信号 4.总结 1.概念 信号和槽是QT特有的一种机制&#xff0c;信号和槽都是…...

【Linux系统】线程:认识线程、线程与进程统一理解

一、更新认知 之前的认知 进程&#xff1a;一个执行起来的程序。进程 内核数据结构 代码和数据线程&#xff1a;执行流&#xff0c;执行粒度比进程要更细。是进程内部的一个执行分值 更新认识&#xff1a; a. 进程是承担分配系统资源的基本实体b. 线程是OS调度的基本单位 …...

蓝桥杯字串简写(二分)

输入 4 abababdb a b 输出 6 思路&#xff1a; 如果暴力&#xff0c;o(n**2)&#xff0c;超时&#xff0c;想到可以先与处理一下&#xff0c;记录c1出现的位置&#xff0c;再根据c2的位置用二分法看前面有多少个符合条件的c1。 why二分&#xff1a; 代码&#xff1a;一些…...

【C语言】指针详细解读3

1. 数组名的理解 我们使用指针一般访问数组内容时&#xff0c;我们可能会这样写&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;⽽…...

Python爬虫-如何正确解决起点中文网的无限debugger

前言 本文是该专栏的第45篇,后面会持续分享python爬虫干货知识,记得关注。 本文以起点中文网为例子,针对起点中文网使用控制台调试出现无限debugger的情况,要如何解决? 针对该问题,笔者在正文将介绍详细而又轻松的解决方法。废话不多说,下面跟着笔者直接往下看正文详细…...

畅游Diffusion数字人(15):详细解读字节跳动最新论文——音频+姿态控制人类视频生成OmniHuman-1

Diffusion models代码解读:入门与实战 前言:昨晚字节跳动刚发布了一篇音频+姿态控制人类视频生成OmniHuman-1的论文,效果非常炸裂,并且是基于最新的MM-DiT架构,今天博主详细解读一下这一技术。 目录 贡献概述 方法详解 音频条件注入 Pose条件注入 参考图片条件注入 …...

Windows图形界面(GUI)-QT-C/C++ - QT Dock Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 工具栏 2. 侧边栏 3. 调试窗口 三、常见样式 1. 停靠位置 2. 浮动窗口 3. 可关闭 4. 可移动 四、属性设置 1. 设置内容 2. 获取内容 3. 设置标题 …...

MIT AppInventor v2.74更新的内容

MIT v2.74更新的内容如下&#xff1a; 新的 UI 选择器提示 向菜单、调色板和设计视图添加键盘导航 更新至 Google Blockly 版本 10 按住 Shift 并拖动以选择多个块 当值被拖近并且没有空闲插槽时&#xff0c;文本等块会自动合并并展开列表 将块拖到边缘时工作区会自动滚动 新的…...

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用逐渐成为技术热点&#xff0c;而 DeepSeek 作为国产开…...

Hackmyvm whitedoor

简介 难度&#xff1a;简单 靶机地址&#xff1a; 环境 kali&#xff1a;192.168.194.9 靶机&#xff1a;192.168.194.24 扫描 nmap -sT -sV -A -T4 192.168.194.24 -p- -Pn 三个服务&#xff0c;ftp匿名登录、ssh连接以及web服务 ftp里面只有一个没用的README文件 访问…...

02/06 软件设计模式

目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…...

Java的Integer缓存池

Java的Integer缓冲池&#xff1f; Integer 缓存池主要为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围&#xff0c;因此缓存这些对象可以减少内存分配和垃圾回收的负担&#xff0c;提升性能。 在-128到 127范围内的 Integer 对象会被缓存和复用…...

[特殊字符] ChatGPT-4与4o大比拼

&#x1f50d; ChatGPT-4与ChatGPT-4o之间有何不同&#xff1f;让我们一探究竟&#xff01; &#x1f680; 性能与速度方面&#xff0c;GPT-4-turbo以其优化设计&#xff0c;提供了更快的响应速度和处理性能&#xff0c;非常适合需要即时反馈的应用场景。相比之下&#xff0c;G…...

2024年12月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化&#xff08;二级&#xff09;真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题&#xff0c;共50分) 第 1 题 小猫初始位置和方向如下图所示&#xff0c;下面哪个选项能让小猫吃到老鼠&#xff1f;&#xff08; &#xff09; A. B. …...

【2025】camunda API接口介绍以及REST接口使用(3)

前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用&#xff0c;以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 &#x1f345;【2024】Camunda常用功能基本详细介绍和使用-下&#xff08;1&…...

35.Word:公积金管理中心文员小谢【37】

目录 Word1.docx ​ Word2.docx Word2.docx ​ 注意本套题还是与上一套存在不同之处 Word1.docx 布局样式的应用设计页眉页脚位置在水平/垂直方向上均相对于外边距居中排列&#xff1a;格式→大小对话框→位置→水平/垂直 按下表所列要求将原文中的手动纯文本编号分别替换…...

关于使用numpy进行数据解析性能优化的几点认识

前言&#xff1a;数据解析的性能严重影响用户体验&#xff0c;针对需要批量处理的数据&#xff0c;考虑使用numpy自定义矢量化计算函数提升数据解析的性能。下面的表述都是网上查找的资料&#xff0c;仅供大家参考&#xff0c;具体情况还是需要具体分析的。 1. 使用numpy自定义…...

扣子平台的选择器节点:让智能体开发更简单,扣子免费系列教程(17)

欢迎来到涛涛聊AI。今天&#xff0c;我们来聊聊一个非常实用的工具——扣子平台的选择器节点。即使你不是计算机专业人员&#xff0c;但对计算机操作比较熟悉&#xff0c;这篇文章也能帮你快速上手。我们会从基础知识讲起&#xff0c;一步步带你了解选择器节点的使用方法和应用…...

java s7接收Byte字节,接收word转16位二进制

1图&#xff1a; 2.图&#xff1a; try {List list getNameList();//接收base64S7Connector s7Connector S7ConnectorFactory.buildTCPConnector().withHost("192.168.46.52").withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(3).build()…...

学习日记250205

一.论文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 二、计划&#xff1a; 理一下微调相关的文章 三. &#xff09;——&#xff08; 明天认真学习了&#xff0c;不能再打这么久的星露谷了&#xff01;&#xff01;&#xff0…...

位置-速度双闭环PID控制详解与C语言实现

目录 概述 1 控制架构解析 1.1 级联控制结构 1.2 性能对比 2 数学模型 2.1 位置环(外环) 2.2 速度环(内环) 3 C语言完整实现 3.1 控制结构体定义 3.2 初始化函数 3.3 双环计算函数 4 参数整定指南 4.1 整定步骤 4.2 典型参数范围 5 关键优化技术 5.1 速度前馈 …...

21.2.1 基本操作

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 Excel的基本操作步骤&#xff1a; 1、打开Excel&#xff1a;定义了一个Application对象&#xff1a; Microsoft.Office.Interop.E…...

Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具

前言&#xff1a;在抖音&#xff0c;快手等社交平台上&#xff0c;我们常常见到各种各样的GIF动画。在各大评论区里面&#xff0c;GIF图片以其短小精悍、生动有趣的特点&#xff0c;被广泛用于分享各种有趣的场景、搞笑的瞬间、精彩的动作等&#xff0c;能够快速吸引我们的注意…...

c++ stl 遍历算法和查找算法

概述&#xff1a; 算法主要由头文件<algorithm> <functional> <numeric> 提供 <algorithm> 是所有 STL 头文件中最大的一个&#xff0c;提供了超过 90 个支持各种各样算法的函数&#xff0c;包括排序、合并、搜索、去重、分解、遍历、数值交换、拷贝和…...

Java学习进阶路线

Java基础 Java Web 前端HTML/css/js&#xff0c;J2EE&#xff08;Servlet/jsp&#xff09;&#xff0c;数据库&#xff08;Mysql/oracle&#xff09; Java开发框架 Spring MVC/Mybatis/Herbernate/maven 《Java编程思想》 深入了解java基础 Java设计模式 《Effective j…...

探寻系统响应的奥秘:为何常用以 e 为底的指数组合表示

一、引言 在工程与科学领域的系统分析中&#xff0c;常常会发现系统响应多以 e e e 为底的指数组合来表示。从电路系统里的电流电压变化&#xff0c;到机械系统的振动情况&#xff0c;再到控制系统的动态特性&#xff0c;这种表示方法无处不在。那么&#xff0c;究竟是什么原…...

java 进阶教程_Java进阶教程 第2版

第2版前言 第1版前言 语言基础篇 第1章 Java语言概述 1.1 Java语言简介 1.1.1 Java语言的发展历程 1.1.2 Java的版本历史 1.1.3 Java语言与C&#xff0f;C 1.1.4 Java的特点 1.2 JDK和Java开发环境及工作原理 1.2.1 JDK 1.2.2 Java开发环境 1.2.3 Java工作原理 1.…...

Ext文件系统

文件内容属性 被打开的文件在内存中&#xff0c;没有被打开的文件在磁盘里文件系统的工作就是根据路径帮我们找到在磁盘上的文件 磁盘&#xff08;硬件&#xff09; 磁盘的存储结构 磁头在传动臂的运动下共同进退&#xff0c;向磁盘写入的时候是向柱面批量写入的 OS文件系统访…...

C++滑动窗口技术深度解析:核心原理、高效实现与高阶应用实践

目录 一、滑动窗口的核心原理 二、滑动窗口的两种类型 1. 固定大小的窗口 2. 可变大小的窗口 三、实现细节与关键点 1. 窗口的初始化 2. 窗口的移动策略 3. 结果的更新时机 四、经典问题与代码示例 示例 1&#xff1a;和 ≥ target 的最短子数组&#xff08;可变窗口…...

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)

目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…...

【加餐】使⽤指针实现链表

【加餐】使⽤指针实现链表 ​ 面向过程方式和面向对象方式&#xff08;把面向过程的封装一下就行了&#xff09;是两种不同的编程方法论...

用 Python 绘制爱心形状的简单教程

1. 引言 在本教程中&#xff0c;我们将学习如何使用 Python 和 Matplotlib 库来绘制一个简单的爱心形状。这是一个有趣且简单的项目&#xff0c;适合初学者练习图形绘制和数据可视化。 2. 环境准备 首先&#xff0c;确保您的系统上安装了 Python 和 Matplotlib 库。如果还未…...

DeepSeek安装

安装运行环境 https://ollama.com/ 安装验证 cmd指令 ollama -v 安装运行模型 https://ollama.com/library/deepseek-r1:14b-qwen-distill-q4_K_M 例如&#xff1a; ollama run deepseek-r1:1.5b-qwen-distill-q4_K_M 结果 再次使用时&#xff0c;直接cmd运行上一步的ru…...

Git--使用教程

Git的框架讲解 Git 是一个分布式版本控制系统&#xff0c;其架构设计旨在高效地管理代码版本&#xff0c;支持分布式协作&#xff0c;并确保数据的完整性和安全性。 Git 的核心组件&#xff1a; 工作区&#xff08;Working Directory&#xff09;&#xff1a; - 作区是你在本…...

【HTML性能优化】提升网站加载速度:GZIP、懒加载与资源合并

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…...

C#从XmlDocument提取完整字符串

方法1&#xff1a;通过XmlDocument的OuterXml属性&#xff0c;见XmlDocument类 该方法获得的xml字符串是不带格式的&#xff0c;可读性差 方法2&#xff1a;利用XmlWriterSettings控制格式等一系列参数&#xff0c;见XmlWriterSettings类 例子&#xff1a; using System.IO; …...

wordpress每隔24小时 随机推荐一个指定分类下的置顶内容。

在WordPress中实现每隔24小时随机推荐一个指定分类下的置顶内容&#xff0c;可以通过以下步骤实现&#xff1a; 1. 创建自定义函数 在主题的functions.php文件中添加以下代码&#xff0c;用于创建一个定时任务&#xff0c;每隔24小时随机选择一个置顶文章并存储到选项中&…...

《chatwise:DeepSeek的界面部署》

ChatWise&#xff1a;DeepSeek的界面部署 摘要 本文详细描述了DeepSeek公司针对其核心业务系统进行的界面部署工作。从需求分析到技术实现&#xff0c;再到测试与优化&#xff0c;全面阐述了整个部署过程中的关键步骤和解决方案。通过本文&#xff0c;读者可以深入了解DeepSee…...

HTTP请求响应周期步骤

一个典型的 HTTP 请求/响应周期 从建立连接开始,经过客户端向服务器发送请求、服务器处理请求并返回响应,最终关闭连接。这个过程可以分为多个阶段,以下是详细的步骤: 一、建立连接(TCP连接) 客户端发起连接请求:在HTTP通信中,客户端通常是浏览器,首先通过 DNS 查询…...

synchronized, volatile 在 DCL 的作用

背景 最近在看设计模式&#xff0c;在单例模式的 Double Check Lock&#xff08;DCL&#xff09;中&#xff0c;存在两个关键字&#xff1a;volatile & synchronized。 之前都知道 DCL 怎么写&#xff0c;直接套娃。但是这两关键字在单例里面的作用还没深究过&#xff0c…...

Java进阶笔记(中级)

-----接Java进阶笔记&#xff08;初级&#xff09;----- 目录 集合多线程 集合 ArrayList 可以通过List来接收ArrayList对象&#xff08;因为ArrayList实现了List接口&#xff09; 方法&#xff1a;接口名 柄名 new 实现了接口的类(); PS: List list new ArrayList();遍历…...

人生总有终点,不必好高骛远

夕阳西下&#xff0c;我漫步在河堤上。河水缓缓流淌&#xff0c;倒映着天边最后一抹晚霞。岸边垂柳依依&#xff0c;枝条轻拂水面&#xff0c;荡起一圈圈涟漪。这涟漪由近及远&#xff0c;渐渐消散在暮色中&#xff0c;如同我们每个人在时间长河中泛起的微澜。 记得年少时&…...

C#中堆和栈的区别

C#中的堆&#xff08;Heap&#xff09;和栈&#xff08;Stack&#xff09;详解 基本概念 栈&#xff08;Stack&#xff09; 栈是一个后进先出&#xff08;LIFO&#xff09;的内存结构由系统自动分配和释放存储空间连续&#xff0c;大小固定主要用于存储值类型和对象引用 堆…...

如何利用i18n实现国际化

1.首先新建i18.js文件 // i18n配置 import { createI18n } from vue-i18n // import ElementPlus from element-plus import zhCn from element-plus/es/locale/lang/zh-cn import zh from ./zh-cn import en from ./en import ru from ./ru const messages {en_US: {...en,//…...

SpringMVC响应

第一章&#xff1a;数据处理及跳转 1. 结果跳转方式 ①.ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . <bean id"templateResolver" class"org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolv…...