《Python星球日记》第31天:Django 框架入门
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
专栏:《Python星球日记》,限时特价订阅中ing
目录
- 一、Django 简介
- 1. Django 的特点与应用场景
- 2. 创建 Django 项目与应用
- 二、模型与数据库
- 1. 定义模型:`models.Model`
- 2. 迁移命令:`makemigrations`、`migrate`
- 三、视图与模板
- 1. 视图函数:`HttpResponse`、`render()`
- 2. URL配置
- 3. 模板渲染:Django 模板语言
- 四、练习:创建一个简单的任务管理系统
- 1. 创建项目和应用
- 2. 配置设置
- 3. 定义模型
- 4. 数据库迁移
- 5. 创建管理界面
- 6. 创建视图
- 7. 配置URL
- 8. 创建模板
- 9. 运行服务器
- 五、总结与进阶方向
👋 专栏介绍: Python星球日记专栏介绍(持续更新ing)
✅ 上一篇: 《Python星球日记》第30天:Flask数据库集成
欢迎来到Python星球日记第31天🪐!
今天我们将探索Python世界中最流行的Web框架之一——Django。经过前面对Flask的学习,今天我们将接触一个更加全面和强大的框架,它能够帮助我们构建复杂的Web应用。
一、Django 简介
Django是一个高级的Python Web框架,它遵循"DRY"(Don’t Repeat Yourself)原则和MVT(Model-View-Template)架构模式,旨在让开发者能够快速构建安全、可维护的Web应用。
图片:Django MVT架构图
1. Django 的特点与应用场景
Django的主要特点:
- 开箱即用:Django提供了完整的解决方案,包含ORM、模板引擎、表单处理、认证系统等组件
- 安全性高:内置防御常见Web攻击,如SQL注入、跨站脚本(XSS)、CSRF等
- 可扩展性:提供插件系统,可以方便地扩展功能
- 大型社区:庞大的生态系统和活跃的社区支持
- Admin后台:自动生成的管理界面,无需额外编码
图片:Django核心组件
适用场景:
- 内容管理系统(CMS)
- 社交网络平台
- 电子商务网站
- 数据分析与科学计算平台
- 金融科技应用
2. 创建 Django 项目与应用
在开始使用Django之前,我们需要先安装它:
pip install django
创建Django项目:
# 创建名为myproject的Django项目
django-admin startproject myproject# 进入项目目录
cd myproject
这将创建以下目录结构:
myproject/
├── manage.py # 项目管理脚本
└── myproject/ # 项目包├── __init__.py # 空文件,使目录成为包├── settings.py # 项目设置├── urls.py # URL声明├── asgi.py # ASGI兼容的Web服务器入口└── wsgi.py # WSGI兼容的Web服务器入口
创建Django应用:
在Django中,一个项目可以包含多个应用(app),每个应用负责不同的功能:
# 创建名为tasks的应用
python manage.py startapp tasks
这将创建一个新的应用目录:
tasks/
├── __init__.py # 空文件,使目录成为包
├── admin.py # 管理界面配置
├── apps.py # 应用配置
├── migrations/ # 数据库迁移文件
│ └── __init__.py
├── models.py # 数据模型定义
├── tests.py # 测试代码
└── views.py # 视图函数
创建应用后,需要在settings.py
的INSTALLED_APPS
列表中注册该应用:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth',# ...其他默认应用'tasks', # 添加我们的应用
]
二、模型与数据库
Django的ORM(对象关系映射)系统允许我们通过Python类来定义数据库模型,无需直接编写SQL语句。
图片:Django模型与数据库关系
1. 定义模型:models.Model
在tasks/models.py
文件中,我们可以定义数据模型:
from django.db import modelsclass Task(models.Model):# 定义字段title = models.CharField(max_length=200)description = models.TextField(blank=True)created_date = models.DateTimeField(auto_now_add=True)due_date = models.DateTimeField(null=True, blank=True)completed = models.BooleanField(default=False)# 定义字符串表示方法def __str__(self):return self.title# 定义元数据class Meta:ordering = ['-created_date'] # 按创建日期降序排列
常用的字段类型:
CharField
: 字符串字段,需要指定max_length
TextField
: 长文本字段IntegerField
: 整数字段FloatField
: 浮点数字段BooleanField
: 布尔字段DateTimeField
: 日期时间字段ForeignKey
: 外键关系ManyToManyField
: 多对多关系
2. 迁移命令:makemigrations
、migrate
定义好模型后,需要将这些模型转换为数据库表结构:
# 创建迁移文件
python manage.py makemigrations# 应用迁移到数据库
python manage.py migrate
迁移过程:
makemigrations
命令根据模型变化创建迁移文件- 迁移文件(如
migrations/0001_initial.py
)包含数据库更改的指令 migrate
命令将这些变更应用到数据库中
图片:Django数据库迁移流程
检查迁移SQL:
如果想查看迁移将执行的SQL语句,可以使用:
python manage.py sqlmigrate tasks 0001
这会显示Django将执行的SQL语句,而不实际执行它们。
三、视图与模板
在Django中:
- 视图(Views)处理Web请求并返回Web响应
- 模板(Templates)则定义如何展示数据。
图片:Django请求处理流程图
1. 视图函数:HttpResponse
、render()
在tasks/views.py
文件中,我们可以定义视图函数:
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Task# 简单HttpResponse示例
def index(request):return HttpResponse("欢迎来到任务管理系统!")# 使用render函数渲染模板
def task_list(request):tasks = Task.objects.all() # 获取所有任务return render(request, 'tasks/task_list.html', {'tasks': tasks})# 创建新任务
def create_task(request):if request.method == 'POST':title = request.POST.get('title')description = request.POST.get('description')Task.objects.create(title=title, description=description)return redirect('task_list')return render(request, 'tasks/create_task.html')
2. URL配置
创建好视图后,需要在URL配置中将URL映射到视图函数。首先,在应用目录中创建urls.py
文件:
tasks/urls.py:
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('tasks/', views.task_list, name='task_list'),path('tasks/create/', views.create_task, name='create_task'),
]
然后,在项目的主urls.py
文件中包含这个应用的URL配置:
myproject/urls.py:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('tasks.urls')),
]
3. 模板渲染:Django 模板语言
Django使用自己的模板语言来渲染HTML页面。首先,在应用目录中创建模板目录结构:
tasks/
├── templates/
│ └── tasks/
│ ├── base.html
│ ├── task_list.html
│ └── create_task.html
base.html(基础模板):
<!DOCTYPE html>
<html>
<head><title>{% block title %}任务管理系统{% endblock %}</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 20px; }.container { max-width: 800px; margin: 0 auto; }.task { border: 1px solid #ddd; padding: 10px; margin-bottom: 10px; }.completed { background-color: #f8f8f8; }</style>
</head>
<body><div class="container"><h1>任务管理系统</h1><nav><a href="{% url 'index' %}">首页</a> |<a href="{% url 'task_list' %}">任务列表</a> |<a href="{% url 'create_task' %}">创建任务</a></nav><hr>{% block content %}{% endblock %}</div>
</body>
</html>
task_list.html(任务列表):
{% extends 'tasks/base.html' %}{% block title %}任务列表{% endblock %}{% block content %}<h2>任务列表</h2>{% if tasks %}{% for task in tasks %}<div class="task {% if task.completed %}completed{% endif %}"><h3>{{ task.title }}</h3><p>{{ task.description }}</p><p>创建时间: {{ task.created_date }}</p>{% if task.completed %}<p>状态: 已完成</p>{% else %}<p>状态: 未完成</p>{% endif %}</div>{% endfor %}{% else %}<p>没有任务。</p>{% endif %}<a href="{% url 'create_task' %}">创建新任务</a>
{% endblock %}
create_task.html(创建任务):
{% extends 'tasks/base.html' %}{% block title %}创建任务{% endblock %}{% block content %}<h2>创建新任务</h2><form method="post">{% csrf_token %}<div><label for="title">标题:</label><input type="text" id="title" name="title" required></div><div><label for="description">描述:</label><textarea id="description" name="description" rows="4"></textarea></div><button type="submit">保存</button></form>
{% endblock %}
图片:Django模板继承关系
Django模板语言的主要特性:
- 变量:使用
{{ variable }}
显示变量值 - 标签:使用
{% tag %}
执行操作,如循环、条件判断等 - 过滤器:使用
{{ variable|filter }}
修改变量值的显示方式 - 注释:使用
{# comment #}
添加注释 - 模板继承:使用
{% extends 'base.html' %}
和{% block name %}{% endblock %}
实现模板继承
图片:Django模板语言与继承结构
四、练习:创建一个简单的任务管理系统
让我们整合前面所学的知识,创建一个简单的任务管理系统。
项目结构如下:
taskmanager/ # 项目根目录
├── manage.py # Django项目管理脚本
├── taskmanager/ # 项目配置包
│ ├── __init__.py # 空文件,使目录成为Python包
│ ├── settings.py # 项目设置
│ ├── urls.py # 项目URL配置
│ ├── asgi.py # ASGI应用配置(异步服务器)
│ └── wsgi.py # WSGI应用配置(传统服务器)
└── tasks/ # 任务应用├── __init__.py # 空文件,使目录成为Python包├── admin.py # 管理界面配置├── apps.py # 应用配置├── migrations/ # 数据库迁移文件│ ├── __init__.py│ └── 0001_initial.py # 初始迁移文件(运行迁移后生成)├── models.py # 数据模型定义├── tests.py # 测试代码├── urls.py # 应用URL配置(需要创建)├── views.py # 视图函数└── templates/ # 模板目录(需要创建)└── tasks/ # 应用模板目录├── base.html # 基础模板├── task_list.html # 任务列表模板├── task_detail.html # 任务详情模板└── task_form.html # 任务表单模板
关键文件说明:
- manage.py:Django的命令行工具,用于执行各种管理任务
- taskmanager/settings.py:包含项目的所有配置参数
- taskmanager/urls.py:定义项目级URL路由
- tasks/models.py:定义数据模型(Task模型)
- tasks/views.py:包含处理Web请求的视图函数
- tasks/urls.py:定义应用级URL路由
- tasks/admin.py:注册模型到管理界面
- tasks/templates/:存放HTML模板文件
1. 创建项目和应用
# 创建项目
django-admin startproject taskmanager
cd taskmanager# 创建应用
python manage.py startapp tasks
2. 配置设置
在taskmanager/settings.py
中注册应用:
INSTALLED_APPS = ['django.contrib.admin',# ...其他默认应用'tasks',
]
3. 定义模型
在tasks/models.py
中定义任务模型:
from django.db import modelsclass Task(models.Model):PRIORITY_CHOICES = [('low', '低'),('medium', '中'),('high', '高'),]title = models.CharField(max_length=200, verbose_name='标题')description = models.TextField(blank=True, verbose_name='描述')created_date = models.DateTimeField(auto_now_add=True, verbose_name='创建日期')due_date = models.DateTimeField(null=True, blank=True, verbose_name='截止日期')priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='medium', verbose_name='优先级')completed = models.BooleanField(default=False, verbose_name='已完成')def __str__(self):return self.titleclass Meta:ordering = ['-created_date']verbose_name = '任务'verbose_name_plural = '任务列表'
4. 数据库迁移
python manage.py makemigrations
python manage.py migrate
5. 创建管理界面
在tasks/admin.py
中注册模型:
from django.contrib import admin
from .models import Task@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):list_display = ('title', 'priority', 'created_date', 'due_date', 'completed')list_filter = ('priority', 'completed')search_fields = ('title', 'description')
6. 创建视图
在tasks/views.py
中定义视图函数:
from django.shortcuts import render, redirect, get_object_or_404
from .models import Task
from django.utils import timezonedef task_list(request):tasks = Task.objects.all()return render(request, 'tasks/task_list.html', {'tasks': tasks})def task_detail(request, pk):task = get_object_or_404(Task, pk=pk)return render(request, 'tasks/task_detail.html', {'task': task})def task_create(request):if request.method == 'POST':title = request.POST.get('title')description = request.POST.get('description')priority = request.POST.get('priority')due_date_str = request.POST.get('due_date')task = Task(title=title,description=description,priority=priority)if due_date_str:task.due_date = due_date_strtask.save()return redirect('task_list')return render(request, 'tasks/task_form.html')def task_complete(request, pk):task = get_object_or_404(Task, pk=pk)task.completed = Truetask.save()return redirect('task_list')
7. 配置URL
在tasks/urls.py
中配置URL:
from django.urls import path
from . import viewsurlpatterns = [path('', views.task_list, name='task_list'),path('task/<int:pk>/', views.task_detail, name='task_detail'),path('task/new/', views.task_create, name='task_create'),path('task/<int:pk>/complete/', views.task_complete, name='task_complete'),
]
在taskmanager/urls.py
中包含应用URL:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('tasks.urls')),
]
8. 创建模板
创建基础模板tasks/templates/tasks/base.html
:
<!DOCTYPE html>
<html>
<head><title>{% block title %}任务管理系统{% endblock %}</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; margin: 0; padding: 0; background-color: #f8f9fa; }.container { max-width: 1000px; margin: 0 auto; padding: 20px; }.header { background-color: #343a40; color: white; padding: 20px 0; margin-bottom: 20px; }.header h1 { margin: 0; padding: 0 20px; }.nav { background-color: #212529; padding: 10px 20px; }.nav a { color: white; text-decoration: none; margin-right: 15px; }.nav a:hover { text-decoration: underline; }.task-card { background-color: white; border-radius: 5px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); padding: 20px; margin-bottom: 20px; }.task-card.completed { background-color: #e9ecef; }.priority-high { border-left: 5px solid #dc3545; }.priority-medium { border-left: 5px solid #ffc107; }.priority-low { border-left: 5px solid #28a745; }.btn { display: inline-block; padding: 8px 16px; background-color: #007bff; color: white; text-decoration: none; border-radius: 4px; border: none; cursor: pointer; }.btn:hover { background-color: #0069d9; }.btn-success { background-color: #28a745; }.btn-success:hover { background-color: #218838; }.form-group { margin-bottom: 15px; }.form-group label { display: block; margin-bottom: 5px; }.form-control { width: 100%; padding: 8px; border: 1px solid #ced4da; border-radius: 4px; }</style>
</head>
<body><div class="header"><h1>任务管理系统</h1><div class="nav"><a href="{% url 'task_list' %}">任务列表</a><a href="{% url 'task_create' %}">创建任务</a><a href="/admin/">管理后台</a></div></div><div class="container">{% block content %}{% endblock %}</div>
</body>
</html>
任务列表模板tasks/templates/tasks/task_list.html
:
{% extends 'tasks/base.html' %}{% block title %}任务列表{% endblock %}{% block content %}<h2>我的任务</h2>{% if tasks %}{% for task in tasks %}<div class="task-card {% if task.completed %}completed{% endif %} priority-{{ task.priority }}"><h3>{{ task.title }}</h3><p>{{ task.description|truncatewords:30 }}</p><p><strong>优先级:</strong> {% if task.priority == 'high' %}高{% elif task.priority == 'medium' %}中{% else %}低{% endif %}</p><p><strong>创建时间:</strong> {{ task.created_date|date:"Y-m-d H:i" }}</p>{% if task.due_date %}<p><strong>截止时间:</strong> {{ task.due_date|date:"Y-m-d H:i" }}</p>{% endif %}{% if task.completed %}<p><span class="btn btn-success" style="cursor: default;">已完成</span></p>{% else %}<a href="{% url 'task_complete' task.id %}" class="btn btn-success">标记为已完成</a>{% endif %}<a href="{% url 'task_detail' task.id %}" class="btn">查看详情</a></div>{% endfor %}{% else %}<p>暂无任务。创建一个新任务吧!</p>{% endif %}<a href="{% url 'task_create' %}" class="btn">创建新任务</a>
{% endblock %}
任务详情模板tasks/templates/tasks/task_detail.html
:
{% extends 'tasks/base.html' %}{% block title %}{{ task.title }}{% endblock %}{% block content %}<div class="task-card {% if task.completed %}completed{% endif %} priority-{{ task.priority }}"><h2>{{ task.title }}</h2><p>{{ task.description }}</p><p><strong>优先级:</strong> {% if task.priority == 'high' %}高{% elif task.priority == 'medium' %}中{% else %}低{% endif %}</p><p><strong>创建时间:</strong> {{ task.created_date|date:"Y-m-d H:i" }}</p>{% if task.due_date %}<p><strong>截止时间:</strong> {{ task.due_date|date:"Y-m-d H:i" }}</p>{% endif %}<p><strong>状态:</strong> {% if task.completed %}已完成{% else %}未完成{% endif %}</p>{% if not task.completed %}<a href="{% url 'task_complete' task.id %}" class="btn btn-success">标记为已完成</a>{% endif %}<a href="{% url 'task_list' %}" class="btn">返回列表</a></div>
{% endblock %}
任务创建表单模板tasks/templates/tasks/task_form.html
:
{% extends 'tasks/base.html' %}{% block title %}创建任务{% endblock %}{% block content %}<h2>创建新任务</h2><form method="post">{% csrf_token %}<div class="form-group"><label for="title">标题:</label><input type="text" id="title" name="title" class="form-control" required></div><div class="form-group"><label for="description">描述:</label><textarea id="description" name="description" class="form-control" rows="4"></textarea></div><div class="form-group"><label for="priority">优先级:</label><select id="priority" name="priority" class="form-control"><option value="low">低</option><option value="medium" selected>中</option><option value="high">高</option></select></div><div class="form-group"><label for="due_date">截止日期 (可选):</label><input type="datetime-local" id="due_date" name="due_date" class="form-control"></div><button type="submit" class="btn">保存任务</button><a href="{% url 'task_list' %}" class="btn" style="background-color: #6c757d;">取消</a></form>
{% endblock %}
9. 运行服务器
python manage.py createsuperuser # 创建管理员用户
python manage.py runserver
现在,你可以访问以下URL:
- http://127.0.0.1:8000/ - 任务列表
- http://127.0.0.1:8000/task/new/ - 创建新任务
- http://127.0.0.1:8000/admin/ - 管理后台
图片:任务管理系统-任务列表页面
图片:任务管理系统-任务详情页面
图片:任务管理系统-创建任务页面
图片:任务管理系统- Django管理后台
五、总结与进阶方向
今天,我们学习了Django框架的基础知识,包括:
- Django的MVT架构及特点
- 如何创建Django项目和应用
- 定义数据模型并进行数据库迁移
- 使用视图函数处理Web请求
- 使用Django模板语言渲染HTML页面
- 实践创建了一个简单的任务管理系统
Django功能强大,我们今天只是触及了表面。未来可以探索的进阶方向包括:
- Django表单:使用
forms.py
创建和验证表单 - 基于类的视图:使用更面向对象的方式编写视图
- 用户认证:实现用户注册、登录和权限管理
- RESTful API:使用Django REST Framework构建API
- 测试:编写单元测试和集成测试
- 部署:将Django应用部署到生产环境
希望今天的内容对你理解Django框架有所帮助。明天我们将继续探索Django的更多高级特性,敬请期待!
参考资源:
- Django官方文档:https://docs.djangoproject.com/
- Django Girls教程:https://tutorial.djangogirls.org/
- MDN Django教程:https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Django
欢迎在评论区分享你的Django学习经验和问题!
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果你对今天的内容有任何问题,或者想分享你的学习心得,欢迎在评论区留言讨论!
相关文章:
《Python星球日记》第31天:Django 框架入门
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、Django…...
读《人生道路的选择》有感
读完戴维坎贝尔的《人生道路的选择》,深有感触,虽然只有短短的108也,但作者强调了在复杂的生活环境之中“选择”的重要性。这也是我想要探讨的话题,选择到底会对我们人生产生怎样的影响。 在我们人生当中,确实有许多的…...
opencv+opencv_contrib+cuda和VS2022编译
本文介绍使用OpenCV和OpenCV_Contrib源码及Cuda进行编译的过程,编译过程中会用到OpenCV、OpenCV_Contrib、Toolkit、Cmake、VS2022等工具,最终编译OpenCV的Cuda版本。 一、OpenCV下载地址 OpenCV官网下载地址:https://opencv.org/releases/#࿰…...
STC单片机与淘晶驰串口屏通讯例程之01【新建HDMI工程】
大家好,我是『芯知识学堂』的SingleYork,今天笔者给大家一起学习这款“SYK-0806-A2S1”控制板与淘晶驰串口屏通讯的例程,本例使用的是淘晶驰的4.3寸电阻触摸屏TJC4827T143_011R_I_P20,分辨率为480272,详细参数大家可以查看这个屏的手册。 先来看下本例程整体的效果: 那么…...
PE文件结构(导出表)
导出表 什么是导出表? 导出表是PE文件中记录动态链接库(DLL)对外提供的函数或数据的列表,包含函数名称、序号和内存地址等信息,供其他程序调用 我们写一个dll来查看一下导出函数 int exportFunc1(int a, int b) {ret…...
网络安全自动化:精准把握自动化边界,筑牢企业安全防
在当今数字化时代,网络攻击的威胁日益严峻,企业网络安全的重要性不言而喻。随着海量资产与复杂架构的出现,网络安全自动化成为了众多企业关注的焦点。网络安全维护看似简单的修补系统、删除旧账户、更新软件,在大型企业中却极易变…...
实战设计模式之中介者模式
概述 中介者模式是一种强大且灵活的设计模式,适用于需要优化对象间通信的场景。中介者模式通过引入一个中介对象,来封装一系列对象之间的交互。在没有中介者的情况下,这些对象之间可能会直接相互引用,导致系统中的类紧密耦合&…...
价格识别策略思路
该策略是一种基于价格形态和市场条件的交易算法,旨在通过识别特定的价格模式来生成买入和卖出信号。 价格形态识别 策略的核心在于识别价格的高点和低点形态。通过比较当前周期及其前几个周期的最高价和最低价, 策略定义了一系列条件来判断价格是否形成了…...
Kotlin带接收者的Lambda介绍和应用(封装DialogFragment)
先来看一个具体应用:假设我们有一个App,App中有一个退出应用的按钮,点击该按钮后并不是立即退出,而是先弹出一个对话框,询问用户是否确定要退出,用户点了确定再退出,点取消则不退出,…...
【NLP】32. Transformers (HuggingFace Pipelines 实战)
🤖 Transformers (HuggingFace Pipelines 实战) 本教程基于 Hugging Face 的 transformers 库,展示如何使用预训练模型完成以下任务: 情感分析(Sentiment Analysis)文本生成(Text …...
[ 设计模式 ] | 单例模式
单例模式是什么?哪两种模式? 单例模式就是一个类型的对象,只有一个,比如说搜索引擎中的索引部分,360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式:饿汉模式是线程安全的,懒汉模式不是线程安全的…...
用网页显示工控仪表
一.起因 现在工控也越来越多的使用web页面来显示电压,电流,温度,转速等物理量.本例使用js控制网页显示速度仪表. 二.代码 <html> <head><script type"text/javascript">var ctx;var px0;var movePoint{x0:0,x1:0};function init(){drawFace();m…...
Spring项目改造Solon版,使用体验,对比
概述 对于Solon有些人可能并不了解,在官方概述中,称其是新一代Java企业级应用开发框架,从零开始构建,有自主的标准规范与开放生态。近16万行代码。 并有更快、更小、更简单的特点 什么样的Java项目用Solon好? 按正常…...
2.CFD 计算过程概述:Fluent在散热计算中的优势
1.主流散热软件 2.电子产品热设计的基本要求 3.失效率与温度之间的关系 4.电子产品热设计的基本要求 5.电子产品必须要做散热设计 6.主动散热与被动散热 7.高效山热方案 8.热交换模型 9.Fluent中传热模型...
【Java ee初阶】多线程(6)
一、阻塞队列 队列的原则:“先进先出”,队列分为普通队列,优先级队列等等。在数据结构中,堆是特殊的完全二叉树,一定不要把堆和二叉搜索树混淆。 阻塞队列是一种特殊的队列,也遵循“先进先出”的原则。 …...
Unity:Surface Effector 2D(表面效应器 2D)
目录 什么是表面效应器 2D? 🎯 它是做什么的? 🧪 从第一性原理解释它是怎么工作的 📦 重要参数解释 为什么不直接用 Rigidbody(刚体)来控制运动 ? 所以什么时候该用哪个&#…...
Spring 框架的底层原理
Spring 框架的底层原理主要包括以下几个方面: 核心容器(IoC 容器) IoC(控制反转)原理 : 依赖注入(DI) :这是 IoC 的实现方式之一。在传统的程序开发中,程序组…...
【Unity】AssetBundle热更新
1.新建两个预制体: Cube1:GameObject Material1:Material Cube1使用了Material1材质 之后设置打包配置 Cube1的打包配置为custom.ab Material1的打包配置为mat.ab 2.在Asset文件夹下创建Editor文件夹,并在Editor下创建BuildBundle…...
【算法笔记】动态规划基础(二):背包dp
目录 01背包例题状态表示状态计算初始化AC代码 完全背包例题状态表示状态计算初始化TLE代码 多重背包例题状态表示状态计算初始化AC代码 分组背包例题状态表示状态计算初始化AC代码 二维费用背包例题状态表示状态计算初始化AC代码 混合背包问题例题状态表示状态计算初始化TLE代…...
IP属地是我的定位吗?——解析两者区别
在互联网时代,我们经常看到社交媒体、论坛或APP上显示用户的“IP属地”,许多人会疑惑:IP属地是不是我的精确定位?它会不会暴露我的隐私? 本文将详细解析IP属地和定位的区别,并解答常见的相关问题&#…...
力扣每日一题1128等价多米诺骨牌对的数量
1128. 等价多米诺骨牌对的数量 题目: 给你一组多米诺骨牌 dominoes 。 形式上,dominoes[i] [a, b] 与 dominoes[j] [c, d] 等价 当且仅当 (a c 且 b d) 或者 (a d 且 b c) 。即一张骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌。 在 0 &l…...
SpringBoot集成CXF框架,实现WebService
SpringBoot官网地址:https://spring.io/projects/spring-ws 1、WebService服务端搭建 Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.17&…...
android-ndk开发(2): macOS 安装 ndk
android-ndk开发(2): macOS 安装 ndk 2025/05/05 1. 概要 对于 android-ndk 在 r23 之前的版本,官方提供了 .zip 文件, 解压即安装。 对于 android-ndk 在 r23 以及之后的版本, 官方只提供了 .dmg 文件, 不能简单的解压完成安…...
科创大赛——知识点复习【c++】——第一篇
目录 输入 一、cin 二、scanf 三、gets 四、getchar 五、fgets 输出 一、cout 二、printf 基本数据类型 一,数据类型有哪些? 二,整型(Integer Types) 1,修饰符 2,整型数据的数据范…...
硬件工程师面试常见问题(14)
第六十六问:运放--输入偏置电流和输入失调电流 输入偏置电流lb:是由于运放两个输入极都有漏电流的存在。实际的运放,会有电流流入运放的输入端的。那么输入偏置电流就定义这两个电流的平均值。 输入失调电流 Ios:定义为两个差分输入端偏置电…...
Flink流水线任务在线演示
Flink流水线在线演示 1. 登录系统 访问系统登录页面,输入账号密码完成身份验证。 2. 创建任务 入口:通过顶部菜单栏选择 任务开发,或通过快捷入口 快速创建任务。 任务类型:选择 FlinkPipeline。 3. 配置任务 进入配置界面…...
C++笔记之接口`Interface`
C++笔记之接口Interface code review! 一个简洁简短的 C++ 接口实现示例: #include <iostream>// 1. 定义接口(抽象类) class Shape {public:...
css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
文章目录 1. 前言2. 用法2.1 基本语法2.2. 与max-width、max-height等属性结合使用2.3. 动态计算比例 3. 应用场景4. 兼容性和替代方案5. 总结 1. 前言 在网页制作过程中,有时候我们只知道宽度,或者只知道高度,这时候需要制作一个4:3和9:16这…...
深入探索 Apache Spark:从初识到集群运行原理
深入探索 Apache Spark:从初识到集群运行原理 在当今大数据时代,数据如同奔涌的河流,蕴藏着巨大的价值。如何高效地处理和分析这些海量数据,成为各行各业关注的焦点。Apache Spark 正是为此而生的强大引擎,它以其卓越…...
0903Redux改造项目_用户信息_状态管理-react-仿低代码平台项目
文章目录 1 Redux管理用户信息1.1 定义store和reducer1.2 使用useSeletor 2 自定义Hook统一加载用户信息存储Redux3 根据用户登录状态动态跳转页面结语 1 Redux管理用户信息 1.1 定义store和reducer src/store/userReducer.ts代码如下所示: import { createSlice…...
PyTorch_构建线性回归
使用 PyTorch 的 API 来手动构建一个线性回归的假设函数,数据加载器,损失函数,优化方法,绘制训练过程中的损失变化。 数据构建 import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt i…...
领略算法真谛: 多源bfs
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
Linux的web服务器的部署及优化
实验环境的配置 我们依然是要配置本地软件仓库,之前已有详细介绍,然后再次基础上还有如下操作,首先是进入到以下文件进行编辑 编辑内容为下,并且注意自身的网关有没有写错 然后给予权限 再进行下列操作后,就配置完成了…...
ASP.NET Core 请求限速的ActionFilter
文章目录 前言一、实现步骤1)创建自定义Action Filter示例1:示例2: 2)注册服务3)使用 二、实现说明总结 前言 以下是一个基于内存缓存实现的自定义限流Action Filter。 一、实现步骤 1)创建自定义Action…...
本地化语音转换工具推荐与使用
软件介绍 Buzz是一款基于OpenAI Whisper技术开发的开源语音转文字工具,支持离线运行和实时语音转换,能够高效完成会议记录、音频转文字等任务。 安装注意事项 在使用Buzz之前需要注意软件的安装设置,由于程序自带较大的模型文件&…...
【心海资源】telegram换U地址完整源码
【心海资源】telegram换U地址完整源码 未测,需要的下载完整的 下载地址:下载地址.txt - 蓝奏云...
神经网络开发实战:从零基础到企业级应用(含CNN、RNN、BP网络代码详解)
简介 神经网络作为深度学习的核心,正在成为现代AI应用的基石。从基础的感知机到复杂的Transformer架构,从图像识别到自然语言处理,神经网络技术的演进推动了人工智能的快速发展。本文将系统介绍神经网络的核心概念、主流模型及其实现原理,并通过三个企业级实战案例(医学图…...
C# WPF 布局
C# 0、WPF 布局 1、ON/OFF按钮 2、textBox 3、ComboBox 4、TabControl 5、Button <Window x:Class"WpfApp5.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…...
【PaaS与AI融合】MLOps平台的架构设计
PaaS与AI融合:MLOps平台的架构设计 一、技术背景与发展趋势二、技术架构核心特征1. 全生命周期管理闭环2. 混合编排引擎3. 智能资源调度三、关键技术实现细节1. 持续集成流水线2. 异构资源管理3. 安全治理体系四、行业实践与未来演进典型案例分析发展趋势展望五、架构设计建议…...
硬件工程师面试常见问题(15)
第七十一问:运放增益带宽积解读(有待改进) 增益带宽积顾名思义:增益(就是开环增益)与带宽的乘积; 第七十二问:运放输出摆幅 定义:输出摆幅是指输出信号在最大值和最小值…...
SpringMVC——第6章:RESTFul编程风格
一、RESTFul编程风格 1.RESTFul是什么 RESTFul是WEB服务接口的一种设计风格。 RESTFul定义了一组约束条件和规范,可以让WEB服务接口更加简洁、易于理解、易于扩展、安全可靠。 RESTFul对一个WEB服务接口都规定了哪些东西? 对请求的URL格式有约束和规范…...
深度解析:从 GPT-4o“谄媚”到 Deepseek“物理腔”,透视大模型行为模式的底层逻辑与挑战
深度解析:从 GPT-4o“谄媚”到 AI“物理腔”,透视大模型行为模式的底层逻辑与挑战 标签:人工智能, GPT-4o, 大语言模型, AI伦理, 人机交互, 技术思考 大家好!最近AI圈最火的“瓜”之一,莫过于OpenAI的GPT-4o模型在一…...
2025 年最新树莓派 Pico 连接 OLED 显示字模汉字详细教程
OLED 概述 OLED(Organic Light-Emitting Diode,有机发光二极管)是一种基于有机材料的发光技术,通过电流驱动有机薄膜发光,具有自发光、高对比度、柔性可弯曲等特点。 4 针脚 OLED 硬件电路如图所示,GND 接…...
【Ubuntu 安装Docker CE-Jenkins】
安装Docker CE(Ubuntu) Install | Docker Docs官网 使用apt仓库安装 DNS配置(可选) #手动替换 sudo vim /etc/systemd/resolved.conf #典型配置如下 [Resolve] DNS8.8.8.8 DNS114.114.114.114 FallbackDNS1.1.1.1 # 备用 DNS#sed替换 sudo sed -i /^#DNS/ {s/#DNS/DNS8.8.8…...
知识图谱 + 大语言模型:打造更聪明、更可靠的AI大脑 —— 探索 GraphRAG 中文优化与可视化实践
大语言模型(LLMs)无疑是近年来人工智能领域最耀眼的明星。它们强大的自然语言理解和生成能力,在文本创作、代码生成、对话交互等众多领域展现了惊人的潜力。然而,当前的 LLMs 并非完美无缺,它们常常面临着“幻觉”&…...
三、【LLaMA-Factory实战】模型微调进阶:从LoRA到MoE的技术突破与工程实践
一、引言 在大模型微调领域,选择合适的训练策略直接决定了效率与效果的平衡。LLaMA-Factory深度整合了参数高效微调(PEFT)、全量微调、混合专家模型(MoE)等12种训练策略,支持从消费级GPU到多卡集群的全场景…...
Photo-SLAM论文理解、环境搭建、代码理解与实测效果
前言:第一个解耦式Photo-SLAM,亮点和效果。 参考:https://zhuanlan.zhihu.com/p/715311759 全网最细PhotoSLAM的conda环境配置教程,拒绝环境污染!!-CSDN博客 1. 环境搭建 硬件:RTX 4090D wi…...
解决pycharm检测不到已经装好的conda的pytorch环境
问题 1.找装anaconda的位置(我装到了py-anacon下) 2.找到下图中的conda.bat 3.pycharm社区版右下角,添加新解释器 4.选conda环境,选择2.中conda.bat的位置,加载环境,使用现有环境,可以看到有选…...
【计算机视觉】3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南
3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南 一、项目概述与技术背景1.1 3DDFA_V2核心价值1.2 技术演进路线1.3 核心技术指标 二、环境配置与模型部署2.1 硬件要求2.2 软件安装基础环境搭建关键组件安装 2.3 模型下载 三、核心算法原理…...
谈判模拟器 - Gemini 2.5 商业优化版
核心目标: 基于深厚的理论知识、丰富的实战经验和前沿的技术洞察,结合麦肯锡领先的谈判策略框架,为用户提供全面、深入、可操作的商业谈判策略指导和建议,助力其在复杂商业环境中达成最优谈判结果,并实现商业价值最大化…...