Python后端 -- 万字长文全面解析Django框架
自从2005年诞生以来,Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目,还是大型的企业应用,Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django,从基础知识到高级特性,让你在项目开发中得心应手。
目录
Django简介与安装
1. Django是什么?
Django适合的场景
2. Django的特点
3. 环境搭建
步骤一:检查或安装Python
步骤二:创建虚拟环境
步骤三:安装Django
4. 创建第一个Django项目
创建一个新项目
启动开发服务器
Django项目结构解析
1. 项目与应用的区别
类比示例:
2. Django项目目录结构
manage.py
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
3. Django应用的基本构造
admin.py
apps.py
models.py
tests.py
views.py
migrations/
4. 注册应用
5. Django中的重要文件总结
Django模型层(Models)
1. ORM概述
优点
2. 模型的定义
基本模型定义
字段类型
字段选项
3. 模型的关系
一对一关系
一对多关系
多对多关系
4. 迁移与数据库操作
创建迁移文件
应用迁移
5. 数据库操作
6. 模型管理器(Manager)
Django视图层(Views)
1. 视图的基本概念
视图的职责
2. 函数视图(Function-Based Views, FBV)
示例:简单的函数视图
视图绑定URL
视图中的逻辑处理
3. 类视图(Class-Based Views, CBV)
基本类视图
通用类视图(Generic Views)
DetailView: 显示单个对象的详细信息。
4. 视图中的请求与响应
HttpRequest对象
HttpResponse对象
5. 视图与模板结合
使用render渲染模板
在模板中使用上下文数据
6. 处理错误和异常
自定义404页面 是的404!
7. 中间件与视图
Django模板层(Templates)
1. 模板语言语法
1.1 变量
2. 模板的使用
3. 模板继承与模块化
3.1 定义父模板
3.2 定义子模板
3.3 使用模板继承的页面渲染
4. 模板中的静态文件
配置静态文件
5. 模板的自定义标签和过滤器
Django URL解析
1. URL配置的基础
2. 动态URL
3. 命名空间与反向解析
4. 命名空间
5. 正则表达式URL
6. URL优化
Django简介与安装
1. Django是什么?
Django是一款开源的Web框架,基于Python语言开发,旨在帮助开发者快速构建高质量的Web应用程序。它采用了MVT(Model-View-Template)设计模式,与经典的MVC模式类似但更加灵活。Django的宗旨是“Don't Repeat Yourself”(别重复造轮子),通过封装常见的Web开发任务,减少开发者的工作量。
Django适合的场景
- 内容管理系统(CMS)
- 电商网站
- REST API后端
- 数据驱动的动态网站
2. Django的特点
- 快速开发: 提供大量开箱即用的功能模块,如用户认证、管理后台、ORM等。
- 安全性高: 内置常见的安全机制,防止SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)。
- 可扩展性强: 丰富的插件生态系统,支持自定义开发。
- 强大的社区支持: 丰富的文档和活跃的开发者社区。
3. 环境搭建
在开始学习Django之前,需要准备开发环境,包括Python解释器和Django框架本身。
步骤一:检查或安装Python
# 检查是否已安装Pythonpython --version
如果未安装,前往Python官网下载最新版本并安装。
步骤二:创建虚拟环境
为避免依赖冲突,推荐在虚拟环境中安装Django:
python -m venv myenv
source myenv/bin/activate # macOS/Linux
myenv\Scripts\activate # Windows
步骤三:安装Django
使用pip
安装Django:
pip install django#检查
django-admin --version
4. 创建第一个Django项目
创建一个新项目
django-admin startproject myproject
cd myproject
项目目录结构如下:
myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.py
启动开发服务器
python manage.py runserver#打开浏览器访问http://127.0.0.1:8000/,可以看到默认的欢迎页面。
Django项目结构解析
在上一部分,我们成功安装了Django,并创建了第一个Django项目。接下来,我们将深入了解Django项目的结构,搞清楚每个文件和目录的作用,从而为后续的开发工作奠定扎实的基础。
1. 项目与应用的区别
Django中的“项目”和“应用”是两个核心概念,理解它们的区别对项目组织非常重要。
- 项目(Project): 一个Django项目是一个整体的Web服务或网站,包含一系列设置和配置文件,用于定义网站的全局行为。
- 应用(App): 应用是项目中的一个子模块,负责实现某一特定功能,例如博客、论坛、用户管理等。一个项目可以包含多个应用。
类比示例:
将项目比作一本书,书中每一章就是一个应用。项目定义了书的标题、封面和大纲,而应用则实现了具体的内容。
2. Django项目目录结构
创建项目时生成的默认目录结构如下:
myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.py
manage.py
一个命令行工具,用于与Django项目进行交互。例如启动服务器、执行数据库迁移等。
python manage.py runserver # 启动开发服务器
python manage.py makemigrations # 创建数据库迁移文件
python manage.py migrate # 应用数据库迁移
python manage.py createsuperuser # 创建管理员账号
__init__.py
一个空文件,表明该目录是一个Python包。
settings.py
全局配置文件,包括数据库设置、已安装的应用、静态文件路径等。
INSTALLED_APPS = [ # 已安装的应用'django.contrib.admin','django.contrib.auth',...
]DATABASES = { # 数据库配置'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
urls.py
全局URL配置文件,用于定义项目的路由规则。
from django.contrib import admin
from django.urls import pathurlpatterns = [path('admin/', admin.site.urls),
]
asgi.py
异步服务器网关接口配置,用于支持异步请求处理。
wsgi.py
Web服务器网关接口配置,用于生产环境部署。
3. Django应用的基本构造
在Django中,应用是实现具体功能的基本单位。我们可以通过以下命令创建一个应用:
python manage.py startapp myapp
生成的应用目录结构如下:
myapp/admin.pyapps.pymodels.pytests.pyviews.pymigrations/__init__.py
admin.py
配置Django管理后台中的数据展示。
from django.contrib import admin
from .models import MyModeladmin.site.register(MyModel)
apps.py
配置应用的元信息。
models.py
定义数据库模型。
tests.py
用于编写单元测试。
views.py
定义视图逻辑,用于处理用户请求并返回响应。
migrations/
用于存储数据库迁移文件。
4. 注册应用
在创建应用后,需将其注册到项目中,使Django识别该应用。步骤如下:
- 打开
settings.py
文件。 - 在
INSTALLED_APPS
中添加应用名称:
INSTALLED_APPS = [...'myapp',
]
5. Django中的重要文件总结
Django项目和应用中的核心文件共同构成了项目的开发框架:
settings.py
: 全局配置中心。urls.py
: 路由管理。models.py
: 数据库模型设计。views.py
: 处理请求并返回响应。admin.py
: 管理后台配置。
Django模型层(Models)
Django模型(Models)是框架的重要组成部分,用于处理与数据库的交互。通过Django的ORM(Object-Relational Mapping,对象关系映射),开发者可以直接使用Python代码操作数据库,而无需编写繁琐的SQL语句。本部分将从模型的定义、关系设计到数据库操作,带你全面了解Django的模型层。
1. ORM概述
Django的ORM是一种将Python对象与数据库表对应起来的技术。通过ORM,开发者可以:
- 定义数据库表结构。
- 使用Python代码进行增删改查操作。
- 轻松切换数据库(如SQLite、PostgreSQL、MySQL)。
优点
- 简化了数据库操作的复杂度。
- 提高了代码的可读性和可维护性。
- 提供了一致的API接口,支持多种数据库。
2. 模型的定义
在Django中,模型是Python类,每个类对应一个数据库表,类中的属性对应表中的字段。
基本模型定义
创建一个名为models.py
的文件,并定义模型:
from django.db import modelsclass Author(models.Model):name = models.CharField(max_length=100) # 字符串字段email = models.EmailField() # 邮箱字段bio = models.TextField(blank=True, null=True) # 可选字段def __str__(self):return self.name
字段类型
Django提供了多种字段类型,常用字段包括:
- CharField: 用于存储短文本,需指定
max_length
。 - TextField: 用于存储长文本。
- IntegerField: 存储整数。
- FloatField: 存储浮点数。
- DateField/DateTimeField: 存储日期或日期时间。
- BooleanField: 存储布尔值。
- EmailField: 用于存储并验证邮箱格式。
- FileField/ImageField: 用于存储文件或图片。
字段选项
字段支持多个选项,用于控制数据库行为:
null=True
: 数据库中该字段可以为空。blank=True
: 表单中该字段可以为空。default=value
: 设置字段的默认值。choices=
: 定义字段的枚举值。
class Book(models.Model):GENRE_CHOICES = [('FIC', 'Fiction'),('NF', 'Non-Fiction'),('SF', 'Science Fiction'),]title = models.CharField(max_length=200)genre = models.CharField(max_length=3, choices=GENRE_CHOICES)published_date = models.DateField()
3. 模型的关系
Django支持一对一、一对多和多对多关系。
一对一关系
使用OneToOneField
定义一对一关系:
class Profile(models.Model):user = models.OneToOneField('auth.User', on_delete=models.CASCADE)bio = models.TextField()
一对多关系
使用ForeignKey
定义一对多关系:
class Article(models.Model):title = models.CharField(max_length=100)author = models.ForeignKey(Author, on_delete=models.CASCADE)
多对多关系
使用ManyToManyField
定义多对多关系:
class Student(models.Model):name = models.CharField(max_length=100)class Course(models.Model):name = models.CharField(max_length=100)students = models.ManyToManyField(Student)
4. 迁移与数据库操作
定义模型后,需要将其同步到数据库中。Django提供了迁移工具来完成这一任务。
创建迁移文件
运行以下命令生成迁移文件:
python manage.py makemigrations
生成的迁移文件描述了数据库的变更。
应用迁移
运行以下命令将迁移应用到数据库:
python manage.py migrate
5. 数据库操作
Django提供了对模型的增删改查操作的API。
创建记录
author = Author(name="John Doe", email="john@example.com")
author.save()查询所有记录
Author.objects.all()
条件查询:
Author.objects.filter(name="John Doe")
获取单个对象:
Author.objects.get(id=1)更新记录
author = Author.objects.get(id=1)
author.email = "new_email@example.com"
author.save()删除记录
author = Author.objects.get(id=1)
author.delete()排序:
Author.objects.order_by('name')分页:
Author.objects.all()[:10]
6. 模型管理器(Manager)
Django的objects
是模型的默认管理器,可以通过自定义管理器扩展其功能:
class AuthorManager(models.Manager):def active_authors(self):return self.filter(is_active=True)class Author(models.Model):name = models.CharField(max_length=100)is_active = models.BooleanField(default=True)objects = AuthorManager()#调用自定义方法
active_authors = Author.objects.active_authors()
Django视图层(Views)
在Django中,视图(Views)是处理用户请求并返回响应的核心部分。通过视图,我们可以定义应用的业务逻辑,将模型数据传递给模板,最终生成动态的网页内容。本部分将详细讲解视图的基本概念、类型及其在项目中的实际应用。
1. 视图的基本概念
Django视图是一个Python函数或类,接收HTTP请求对象(HttpRequest
),处理逻辑后返回HTTP响应对象(HttpResponse
)。
视图的职责
- 处理用户请求。
- 执行业务逻辑(如查询数据库)。
- 渲染模板并返回响应。
2. 函数视图(Function-Based Views, FBV)
Django的函数视图是最基本的视图形式,定义为普通的Python函数。
示例:简单的函数视图
from django.http import HttpResponsedef hello_world(request):return HttpResponse("Hello, World!")
视图绑定URL
在urls.py
中绑定视图函数到特定的URL:
from django.urls import path
from . import viewsurlpatterns = [path('hello/', views.hello_world),
]
访问http://127.0.0.1:8000/hello/
时,将返回Hello, World!
。
视图中的逻辑处理
视图可以包含复杂的逻辑,例如查询数据库并动态生成响应:
from django.shortcuts import render
from .models import Articledef article_list(request):articles = Article.objects.all()return render(request, 'articles.html', {'articles': articles})
render
:用于渲染模板。'articles.html'
:模板文件的名称。{'articles': articles}
:上下文数据传递给模板。
3. 类视图(Class-Based Views, CBV)
Django提供了类视图,便于处理复杂的逻辑。类视图将请求处理拆分为多个方法,增强了代码的可复用性。
基本类视图
定义一个简单的类视图:
from django.http import HttpResponse
from django.views import Viewclass HelloWorldView(View):def get(self, request):return HttpResponse("Hello, World from Class-Based View!")
绑定URL
from django.urls import path
from .views import HelloWorldViewurlpatterns = [path('hello/', HelloWorldView.as_view()),
]
通用类视图(Generic Views)
Django内置了一些通用类视图,用于处理常见任务,如显示列表或详细信息。
- ListView: 显示对象列表。
-
DetailView: 显示单个对象的详细信息。
from django.views.generic import ListView
from .models import Articleclass ArticleListView(ListView):model = Articletemplate_name = 'articles.html'context_object_name = 'articles'
绑定URL
urlpatterns = [path('articles/', ArticleListView.as_view(), name='article_list'),
]
4. 视图中的请求与响应
视图需要处理用户的请求,并生成适当的响应。
HttpRequest对象
request
对象包含了与用户请求相关的所有信息:
request.method
: 请求方法(GET、POST等)。request.GET
: 获取查询参数。request.POST
: 获取表单提交数据。
示例:
def search(request):query = request.GET.get('q')return HttpResponse(f"Search query: {query}")
HttpResponse对象
HttpResponse
用于返回自定义的响应:
HttpResponse(content)
: 返回纯文本内容。HttpResponseRedirect(url)
: 重定向到指定URL。JsonResponse(data)
: 返回JSON数据。
5. 视图与模板结合
通常,视图通过模板引擎生成动态网页。
使用render
渲染模板
render
函数简化了模板渲染的过程:
from django.shortcuts import renderdef home(request):context = {'title': 'Welcome to Django'}return render(request, 'home.html', context)
在模板中使用上下文数据
模板文件home.html
示例:
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>
</head>
<body><h1>{{ title }}</h1>
</body>
</html>
6. 处理错误和异常
Django视图可以通过内置方法处理错误或异常,提供更友好的用户体验。
自定义404页面 是的404!
在views.py
中定义404视图:
from django.http import HttpResponseNotFounddef custom_404_view(request, exception):return HttpResponseNotFound("Page not found!")# 在settings.py中配置:
handler404 = 'myapp.views.custom_404_view'
7. 中间件与视图
中间件可以在请求到达视图之前或响应返回用户之前,处理一些通用任务。例如,认证、日志记录等。
示例:记录请求路径的中间件:
class LogMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):print(f"Request path: {request.path}")return self.get_response(request)
在settings.py
中注册:
MIDDLEWARE = [...,'myapp.middleware.LogMiddleware',
]
Django模板层(Templates)
Django模板层(Templates)负责将动态数据渲染为HTML页面,向用户呈现最终的内容。模板系统采用一种简洁的语法,让开发者专注于页面结构,而将复杂的逻辑留在视图层。本部分将详细介绍Django模板语言的语法、模板继承机制以及静态文件的管理。
1. 模板语言语法
Django模板语言(Django Template Language,DTL)是一种简洁的标记语言,用于动态渲染HTML内容。其语法由变量、标签和过滤器组成。
1.1 变量
模板中的变量使用双花括号包裹:
<p>{{ variable_name }}</p>
标签是控制模板逻辑的核心,使用{% ... %}
表示。常见标签包括:
- **
{% if %}
:条件语句。 - **
{% for %}
:循环语句。 - **
{% include %}
:包含其他模板。
示例:
{% if user_name %}<p>Hello, {{ user_name }}!</p>
{% else %}<p>Hello, Guest!</p>
{% endif %}
过滤器用于格式化变量,语法为{{ variable|filter_name }}
。 常见过滤器:
date
:格式化日期。lower
:将字符串转为小写。length
:获取列表长度。
示例:
<p>{{ current_date|date:"Y-m-d" }}</p>
<p>{{ user_name|lower }}</p>
2. 模板的使用
模板文件通常存放在项目的templates
目录下,需在settings.py
中配置模板路径:
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'], # 自定义模板目录'APP_DIRS': True,...},
]
创建模板文件: 项目目录结构:
myproject/templates/home.html
渲染模板: 在视图中调用render
:
def home(request):return render(request, 'home.html', {'title': 'Welcome to Django'})
模板内容:
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>
</head>
<body><h1>{{ title }}</h1>
</body>
</html>
3. 模板继承与模块化
模板继承机制允许定义通用的页面结构,并通过子模板进行扩展,从而减少重复代码。
3.1 定义父模板
父模板通常定义页面的通用结构:
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head><title>{% block title %}My Site{% endblock %}</title>
</head>
<body><header><h1>My Website Header</h1></header><main>{% block content %}{% endblock %}</main><footer><p>My Website Footer</p></footer>
</body>
</html>
3.2 定义子模板
子模板继承父模板,并重写指定的块内容:
<!-- templates/home.html -->
{% extends 'base.html' %}{% block title %}Home Page{% endblock %}{% block content %}<p>Welcome to the home page!</p>
{% endblock %}
3.3 使用模板继承的页面渲染
视图调用子模板:
def home(request):return render(request, 'home.html')
4. 模板中的静态文件
静态文件(CSS、JavaScript、图片等)用于增强页面的视觉和交互效果。Django提供了一套机制来管理静态文件。
配置静态文件
在settings.py
中配置静态文件路径:
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']# 确保在模板文件中加载静态文件标签:
{% load static %}# 引用静态文件:
<link rel="stylesheet" href="{% static 'css/styles.css' %}">
<img src="{% static 'images/logo.png' %}" alt="Logo">
5. 模板的自定义标签和过滤器
当Django内置的标签和过滤器无法满足需求时,可以自定义。
# 在应用目录下创建一个templatetags目录,添加自定义过滤
# myapp/templatetags/custom_filters.py
from django import templateregister = template.Library()@register.filter
def add_prefix(value, prefix):return f"{prefix}{value}"
# 在模板中加载并使用:{% load custom_filters %}
<p>{{ 'World'|add_prefix:'Hello, ' }}</p>
Django URL解析
在一个Web应用中,URL是用户与应用交互的入口。Django通过URL解析将用户请求与视图关联起来,并根据URL模式决定调用哪个视图处理请求。本部分将深入讲解Django的URL解析机制、动态URL配置以及命名空间和反向解析的使用。
1. URL配置的基础
Django通过urls.py
文件将URL模式映射到视图。
# 项目的urls.py文件
from django.contrib import admin
from django.urls import path
from myapp import views # 引入应用视图# 定义URL模式列表
urlpatterns = [path('admin/', admin.site.urls), # 管理后台path('home/', views.home, name='home'), # 静态路径绑定到视图
]# 示例视图:返回简单的响应
# myapp/views.py
from django.http import HttpResponsedef home(request):return HttpResponse("Welcome to the Home Page!")
访问路径 /home/
将调用 home
视图,返回 "Welcome to the Home Page!"。
2. 动态URL
动态URL允许捕获路径参数并传递到视图中。
# 定义动态URL
urlpatterns = [path('article/<int:article_id>/', views.article_detail, name='article_detail'),
]# 视图函数处理动态参数
def article_detail(request, article_id):return HttpResponse(f"Article ID: {article_id}")
- 访问
/article/42/
,将显示Article ID: 42
。 <int:article_id>
捕获整数类型的路径参数。
支持的动态参数类型:
<str>
:字符串(默认)。<int>
:整数。<slug>
:短字符串。<path>
:带斜杠的字符串。<uuid>
:UUID格式。
3. 命名空间与反向解析
为提高可维护性,可以为URL模式命名,并通过反向解析动态生成URL。
# 定义带名称的URL
urlpatterns = [path('home/', views.home, name='home'), # 给URL模式命名为 'home'
]# 视图中使用反向解析生成URL
from django.urls import reversedef redirect_to_home(request):home_url = reverse('home') # 根据名称动态生成URLreturn HttpResponse(f"The URL for 'home' is: {home_url}")# 模板中反向解析URL
# home.html
<a href="{% url 'home' %}">Go to Home</a>
reverse('home')
返回/home/
。- 模板中的
{% url 'home' %}
动态生成链接。
4. 命名空间
在大型项目中,可以为每个应用的URL配置添加命名空间。
# 应用的urls.py文件
from django.urls import pathapp_name = 'myapp' # 定义命名空间urlpatterns = [path('home/', views.home, name='home'), # 定义命名URL
]# 主urls.py文件
from django.urls import includeurlpatterns = [path('myapp/', include('myapp.urls')), # 引入应用URL
]# 模板中使用命名空间的反向解析
<a href="{% url 'myapp:home' %}">Go to MyApp Home</a>
使用 myapp:home
指定命名空间和URL名称,避免冲突。
5. 正则表达式URL
对于复杂的路径需求,可以使用re_path
结合正则表达式定义URL。
from django.urls import re_path# 定义正则表达式URL模式
urlpatterns = [re_path(r'^article/(?P<year>\d{4})/$', views.article_by_year, name='article_by_year'),
]# 视图中接收正则表达式参数
def article_by_year(request, year):return HttpResponse(f"Articles from year: {year}")
- URL
/article/2024/
将返回Articles from year: 2024
。 (?P<year>\d{4})
捕获名为year
的四位数字参数。
6. URL优化
Django提供了工具和技巧优化URL设计:
-
使用
include
组织URL: 将每个应用的URL配置拆分到独立文件中。
# 主urls.py
from django.urls import include
urlpatterns = [path('blog/', include('blog.urls')), # 引入博客应用URL配置
]
- 规范设计URL: 避免嵌套过深的路径,遵循RESTful设计原则,例如:
/users/
:用户列表。/users/<id>/
:单个用户详情。
从初识Django,到逐步掌握模型、视图、模板,再到URL解析,如果你问我,Django最大的魅力是什么,我会说它的“有条不紊”。从后台逻辑到前端显示,从简单的Hello World到复杂的数据库查询,Django用一种条理清晰的方式让我们既能快速上手,又能应对复杂场景。就像一个好用的工具箱,拿出来就是各种好用的工具,一切都那么顺理成章。
你可能已经开始计划用Django做点什么了。是一个简单的博客,还是一个功能复杂的电商网站?无论如何,Django的学习远不止于此。它还有更多的高级特性等待你去探索,Enjoy coding,and keep building!
相关文章:
Python后端 -- 万字长文全面解析Django框架
自从2005年诞生以来,Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目,还是大型的企业应用,Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django,从基础知识到高…...
“指标管理系统”是什么?企业如何搭建指标管理系统?
在当今数字化时代,数据已成为企业决策的重要依据。然而,海量数据中如何筛选出关键指标,并对其进行有效管理,成为了众多企业面临的难题。为此,指标管理系统应运而生,它旨在帮助企业规范化定义、统一管理和高…...
Node.js简单接口实现教程
Node.js简单接口实现教程 1. 准备工作 确保您的计算机已安装: Node.js (建议版本16.x以上)npm (Node包管理器) 2. 项目初始化 # 创建项目目录 mkdir nodejs-api-tutorial cd nodejs-api-tutorial# 初始化npm项目 npm init -y# 安装必要依赖 npm install expres…...
交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比
在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…...
服务器上的常见Linux命令教程
在管理服务器(如香港服务器)时,掌握常见的 Linux 命令 是非常重要的,它们可以帮助你高效地完成服务器管理任务,如文件操作、进程管理、用户管理、网络配置等。 以下是一个系统化的 Linux 常见命令教程,分为…...
聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程
聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程 系统采用FastAdmin框架独立全新开发,安全稳定,系统支持代理、商户、码商等业务逻辑。 针对最近一些JD,TB等业务定制,子账号业务逻辑API 非常详细,方便内置…...
【MySQL】使用 JDBC 连接数据库
文章目录 前言1. 认识 JDBC 1.1 概念1.2 好处 2. 使用 JDBC 2.1 安装数据驱动包2.2 把 jar 包导入到项目中2.3 代码编写2.4 测试结果 3. 代码优化4. 源码展示结语 前言 在 MySQL 系列中,我们介绍了很多内容,包括但不限于建库建表,增删查改等…...
深入浅出:PHP会话管理(Session 和 Cookie)
深入浅出:PHP会话管理(Session 和 Cookie) 前言 在Web开发中,会话管理是确保用户状态持续性和数据安全的关键。通过会话管理,我们可以在多个页面请求之间保持用户的登录状态、购物车信息等。PHP提供了两种主要的会话…...
Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)
Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计) 逻辑回归(Logistic Regression,LR)逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…...
【开源】A063—基于Spring Boot的农产品直卖平台的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
单链表---合并两个链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 struct ListNode {int val;struct ListNode* next; }; w 方法一---不使用哨兵位 我们创建一个新链表用于合并两个升序链表, 将两个链表中最小的结点依次尾插到…...
draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理
最近在写后台管理系统的时候,遇到一个需求,就是关于拖动排序的功能。 我之前是写过一个关于拖动表格的功能,此功能可以实现表格中的每一行数据上下拖动实现排序的效果。 vue——实现表格的拖拽排序功能——技能提升 但是目前我这边的需求是…...
vite+vue3 配置ip和端口以及自动打开浏览器
编辑文件vite.config.ts 修改前vite.config.ts文件内容 import { defineConfig } from vite import vue from vitejs/plugin-vue// https://vite.dev/config/ export default defineConfig({plugins: [vue()], })修改vite.config.ts后文件内容 新增server内容 server:{host…...
Netty面试内容整理-Netty 概述
Netty 是一个基于 Java 的异步事件驱动网络应用框架,常用于构建高性能、高并发的网络服务。Netty 封装了 Java NIO 的复杂细节,使得开发者可以方便地构建高效的网络应用。以下是 Netty 的概述: Netty 的特点 ● 异步和事件驱动:Netty 采用异步非阻塞的 I/O 模型,基于事件驱…...
Docker搭建达梦数据库--基于 X86 架构
1、部署环境 X86_64 架构的服务器 1 台,安装好docker 拉取镜像 官方最新非授权版本有些函数方法无法使用 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64查看镜像 docker images | grep dm8运行容器 docker run…...
4. 设计模式分类
4.1 创建型模式 这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用性。 序 号 类 型 业务场景 实现要点 1 工 厂 方 法 多种类型商品不同接口,统一发奖服 务搭建场景 定义一个创建对象的接口,让其子类自 己决定实例化哪一个工厂类,工厂模式 使其创建过程延迟…...
【SKFramework框架核心模块】3-12、网络请求模块
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…...
MacOS安装软件后无法启动报错:“已损坏,无法打开,你应该将它移到废纸篓“
目录 报错截图 解决方法 知识科普 报错截图 解决方法 1. 打开系统设置->安全性与隐私->选择任何来源 2. 如果打开没有看到"任何来源",如果不开启“任何来源”的选项,会直接影响到无法运行的第三方应用。开启“任何来源”的方法如下&a…...
每日速记10道java面试题14-MySQL篇
其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…...
结构型-组合模式(Composite Pattern)
什么是组合模式 又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 结构 抽象根节点(Co…...
Netty面试内容整理-高级特性
Netty 提供了一些高级特性,使得它成为一个功能强大、灵活且适用于高并发、高性能场景的网络框架。以下是 Netty 的一些高级特性及其详细介绍: 零拷贝技术 ● 概念:零拷贝(Zero-Copy)是一种避免将数据从内核缓冲区复制到用户缓冲区的技术,从而减少内存拷贝,提高性能。 ●…...
【自动化】十款开源测试开发工具推荐自动化、性能、造数据、流量复制等
目录 一、AutoMeter-API 自动化测试平台二、QA Wolf 浏览器自动化测试工具三、Mimesis 用于 Python 的高性能虚假数据生成器四、Ddosify 高性能负载测试工具五、AutoCannon HTTP/1.1 基准测试工具六、Sharingan 流量录制回放工具七、randdata 随机测试数据生成工具八、Drission…...
【网络篇】HTTP知识
键入网址到网页显示,期间发生了什么? 浏览器第一步是解析URL,这样就得到了服务器名称和文件的路径名,然后根据这些信息生成http请求,通过DNS查询得到我们要请求的服务器地址,然后添加TCP头、IP头以及MAC头&…...
【飞牛云 fnos】 安装部署 Music Tag Web
在上一篇文章中,我们探讨了如何使用 Docker 和 Docker Compose 来部署 Music Tag Web。今天,我们将详细介绍如何在流行的 NAS 系统——飞牛云 FNOs 中安装 Music Tag Web,以便您能够轻松管理并丰富您的音乐库。 音乐刮削:让您的音…...
springmvc的简介
SpringMVC的介绍与第一个程序的开发步骤 1. 介绍 SpringMVC是一个实现了MVC架构模式的Web框架,底层基于Servlet实现。 SpringMVC已经将MVC架构模式实现了,因此只要我们是基于SpringMVC框架写代码,编写的程序就是符合MVC架构模式的。&#x…...
WordPress阅读文章显示太慢的处理
有两种方式, 1. 完全静态化。 尝试了几个插件,都未成功。算了放弃了。因为感觉到实际使用也不方便。 2. cache缓存 用了WP Super Cache测试了一下,打开过一次后,文章秒开,也算达到了要求。...
如何学习游戏外挂编程
学习游戏外挂编程需要掌握一定的编程基础和相关知识。以下是一些学习游戏外挂编程的步骤和建议: 学习编程基础:首先,你需要学习一种编程语言,比如C或者Python。了解基本的编程概念,如变量、函数、循环和条件语句等。这…...
AI大模型驱动数据分析:利用自然语言实现数据查询与可视化(1)
在当今AI驱动的时代,数据分析已成为各行各业不可或缺的能力。然而,传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能,这对非技术背景的业务人员来说是一个不小的挑战。 想象一下,当数据中心的负责人打开手机时…...
UE----Ios打包笔记
UE 打包 IOS 软件 1.前期准备 1.1. 首先我们需要 一台装有Xcode 的MAC笔记本(知道开机密码 最好是空的笔记本 剩余内存要大 ) 1.2. 一台IOS手机 1.3. 一个申请了开发者账户的 Apple ID (苹果账号) 知晓账号与密码最好 因为很麻烦 1.4. UE 需要 的 兼…...
Python_Flask03
这篇文章主要介绍的是数据库的增删改查操作,无多余好说的。 from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import text from flask_migrate import Migrateapp Flask(__name__)# 本地基础信息的主机名 HOSTNAME "127.0…...
PGSQL:联合唯一索引的创建和删除
创建联合唯一索引 假设有一个表 your_table,它有多个列,你想在其中的几列上创建一个联合唯一索引。以下是创建联合唯一索引的 SQL 语句: CREATE UNIQUE INDEX idx_unique_columns ON your_table(column1, column2, ...);注意: …...
QT5 Creator (Mingw编译器) 调用VS2019 (阿里云 oss C++库) 报错的解决方法
方法就是不要用VS2019编译,要用MINgw32编译。注意要安装高版本的qt,其自带的mingw编译器才能支持,找不到qt5cored.dll,就把qt5core.dll改名为qt5cored.dll。 编译命令如下: cmake -G "MinGW Makefiles" ^-…...
使用缓存提升Web应用性能:从新手到高手的实践指南
引言 在现代Web开发中,性能优化是确保用户体验和系统稳定性的关键。使用缓存是提升网站性能的有效手段之一,可以显著减少数据库访问和计算开销。根据“网站优化第一定律”,缓存可以提升网站的响应速度,减少延迟,从而改…...
详尽的oracle sql函数
1,CHR 输入整数,返回对应字符。 用法:select chr(65),chr(78) from dual; 2,ASCII 输入字符,返回对应ASCII码。 用法:select ascii(A),ascii(B) from dual; 3,CONCAT 输入两个字符串,…...
Unity 设计模式-策略模式(Strategy Pattern)详解
策略模式(Strategy Pattern)是一种行为型设计模式,定义了一系列算法,并将每种算法封装到独立的类中,使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化,客户端通过与这些策略对象进…...
AI Agent重塑微服务治理
导读 随着技术架构的发展,微服务系统的复杂性不断增加,对运维提出了更高的要求。为了应对这一挑战,一种AI驱动的微服务治理方案被提出。该方案采用多智能体架构,将运维专家经验整合,并通过自然语言交互和智能推理&…...
SpringBoot整合knife4j,以及会遇到的一些bug
这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧! 一…...
vue自定义组件双向数据绑定
1、使用v - model指令(推荐方式)2、手动实现双向绑定(不使用v - model语法糖)3、 .sync修饰符4、.sync 与 v - model 的比较 1、使用v - model指令(推荐方式) 在 Vue 中,v - model是一个语法糖…...
【Linux课程学习】:想对Linux说的话
🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一.Linux学习存在的问题: 二.Linu…...
重生之我在异世界学编程之C语言:初识一维和二维数组篇
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文数组的基本类型:一维…...
《Vue 实战:小型项目练手与感悟》
一、Vue 基础与准备 在开始 Vue 项目之前,对 JavaScript、CSS、HTML 基础知识的掌握至关重要。 一、JavaScript 基础知识要求 数组常用方法 filter ():创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。 map ()&a…...
使用uniapp开发小程序场景:在百度地图上调用接口返回的设备相关信息并展示
首先在百度地图开发者平台注册微信小程序开发密钥下载百度地图SDK-bmap-wx.min.js,下载地址在项目入口index.html页面进行引入页面中进行调用,代码示例如下<map id"map" longitude"108.95" latitude"34.34" scale"3" :m…...
计算机毕业设计Python轨道交通客流预测分析可视化 智慧交通 机器学习 深度学习 人工智能 爬虫 交通大数据
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
使用 Wireshark 捕获和分析 IEC 60870-5-104 流量基本步骤
一 .IEC 60870-5-104 是什么? IEC 60870-5-104 是一种用于电力系统中数据传输的通信协议,它结合了 IEC 60870-5-101 的应用服务和 TCP/IP 网络协议。该标准定义了一种通过网络连接进行远动控制(如遥测、遥控等)的方法。 使用 Wireshark 捕…...
WPF+LibVLC开发播放器-音量控制和倍速控制
界面 界面上增加音量的控件和倍速控制控件 音量控制 主要也是一个Slider进度条控件来实现音量调节 我们这里设置默认的最大值为100,默认Value值也为100,默认声音开到最大 这里目前完全由前端控制音量调节,可以直接使用ValueChanged事件实…...
【数据中心建设资料】数据中心安全建设解决方案,数据中心整理解决方案,数据中心如何做到安全保障,数据中台全方案(Word全原件)
第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏系统 1.3.8…...
Apache HTTPD多后缀解析漏洞
进入靶场 上来就是一个文件上传的功能 经过尝试,发现只有jpg,png,gif文件能上传上去,而题目又说了,这个是Apache的中间件,Apache文件解析漏洞涉及到一个Apache解析文件的特性,Apache默认一个文…...
html+css+JavaScript实现轮播图
html+css+JavaScript实现轮播图 实现思路 要实现一个轮播图功能,我们需要HTML来构建结构,CSS来设计样式,以及JavaScript来添加交互功能。下面我将分别分析这三个部分是如何协同工作来实现轮播图的。 HTML - 结构 HTML部分定义了轮播图的基本结构,包括图片列表、指示器和…...
Golang 八股(持续补充...)
目录 进程、线程、协程 Go语言——垃圾回收 GC的触发条件 GC调优 GMP调度和CSP模型 Groutine的切换时机 Goroutine调度原理 Goroutine的抢占式调度 Context结构原理 Context原理 Golang内存分配机制 竞态、内存逃逸 golang内存对齐机制 golang中new和make的区别&a…...
MFC实现全屏功能
之前全屏都是参考: MFC单文档(SDI)全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级,MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类: CFullScreenImpl Class managing full-screen mod…...