從零開始搭建Django博客②--Django的服務器內容搭建

本文主要在Ubuntu環境上搭建,為便于研究理解,采用SSH連接在虛擬機里的ubuntu-24.04.2-desktop系統搭建,當涉及一些文件操作部分便于通過桌面化進行理解,通過Nginx代理綁定域名,對外發布。

此為從零開始搭建Django博客系列的第二篇,計劃用一周時間完成一個博客搭建并全程記錄,便于學習和跟著操作。

從零開始搭建Django博客①–正式開始前的準備工作
從零開始搭建Django博客②–Django的服務器內容搭建

框架理解

我們已經建立了一個基本的名為myblog的Django項目,他的框架如下:

# 項目文件夾結構
├── manage.py  # Django 項目的管理文件
└── myblog  # 項目實際存放目錄├── asgi.py  # 運行在 ASGI 兼容的 Web 服務器上的入口├── __init__.py  # 證明該目錄此為Python 包。├── settings.py  # Django 項目的配置文件├── urls.py  # Django 項目的 URL 聲明,就像你網站的“目錄”。└── wsgi.py  # 運行在 WSGI 兼容的Web服務器上的入口

網站構建

在Web應用中,通常有一些業務功能模塊是在不同的項目中都可以復用的,故在開發中通常將工程項目拆分為不同的子功能模塊,各功能模塊間可以保持相對的獨立,在其他工程項目中需要用到某個特定功能模塊時,可以將該模塊代碼整體復制過去,達到復用。因此我們每個WEB應用都是有很多不同的子應用組成,在Django中,通過APP來創建子應用。
為了實現一個博客,我們需要以下三種功能:
![[Pasted image 20250422111023.png]]

創建APP

在根目錄下通過以下代碼創建三個app子應用

# 創建文章功能
python manage.py startapp article
# 創建用戶功能
python manage.py startapp user
# 創建評論功能
python manage.py startapp comment

此時項目文件夾結構如下,可以發現其中除了我們建立的三個文件夾,又生成了一個db.sqlit3,這是因為在我們未設置數據庫信息時,Djangosettings.py 里默認連接的是項目目錄里的該數據庫。

![[Pasted image 20250422111427.png]]

連接數據庫

為了下一步的數據可視化,我們首先配置數據庫信息,打開myblog文件夾目錄下的settings.py配置數據庫信息:
![[Pasted image 20250422114305.png]]
安裝pymysql包(用于連接數據庫)和cryptography包(用于處理密碼)
settings.py同目錄下的__init__.py中導入mysql包相關功能

import pymysql 
pymysql.install_as_MySQLdb()

![[Pasted image 20250422114611.png]]
重新啟動Djangond服務器,無報錯說明配置無誤。

注冊APP

同樣在 myblog文件夾目錄下的settings.py 中,找到INSTALLED_APPS配置項,將新創建的3個app添加到項目的app列表,如下

在這里插入圖片描述

創建模型

在此之前,我們先理解DjangoMVT模式

在這里插入圖片描述

  • M全拼為Model,負責和數據庫交互,進行數據處理。
  • V全拼為View,接收請求,進行業務處理,返回應答。
  • T全拼為Template,負責封裝構造要返回的html。

文章模型

數據需求分析

首先分析文章功能需要哪些數據

數據名標題作者創建時間更新時間正文瀏覽量
idtitleauthorcreatedupdatedbodyviews
類型字符串時間時間大量文本數字
備注外鍵約束
構建代碼
# 文件:article/modle.py
from django.db import models
# 導入django內建的User模型(后面會提)
from django.contrib.auth.models import User
# timezone 用于處理時間相關事務。
from django.utils import timezone
# 用于反向解析,動態生成鏈接
from django.urls import reverse# 博客文章數據模型
class ArticlePost(models.Model):# 文章標題。models.CharField 為字符串字段,用于保存較短的字符串,比如標題title = models.CharField(max_length=100)# 文章作者。外鍵約束,參數 on_delete 用于指定數據刪除的方式,鏈接到(User),只要作者(User)被刪除,所有該作者的文章數據都會被刪除。author = models.ForeignKey(User, on_delete=models.CASCADE)# 文章創建時間。參數 default=timezone.now 指定其在創建數據時將默認寫入當前的時間created = models.DateTimeField(default=timezone.now)# 文章更新時間。參數 auto_now=True 指定每次數據更新時自動寫入當前時間updated = models.DateTimeField(auto_now=True)# 文章正文。保存大量文本使用 TextFieldbody = models.TextField()# 文章瀏覽量total_views = models.PositiveIntegerField(default=0)# 內部類 class Meta 用于給 model 定義元數據(Django內部類)class Meta:# ordering 指定模型返回的數據的排列順序# '-created' 表明數據應該以倒序排列ordering = ('-created',)# 魔術方法 __str__ 定義當調用對象的 str() 方法時的返回值內容。def __str__(self):# return self.title 將文章標題返回return self.title# 獲取文章地址,按照數據庫id解析為url:/article/iddef get_absolute_url(self):return reverse('article:article_detail', args=[self.id])

評論模型

數據需求分析

首先分析文章功能需要哪些數據

數據名評論文章評論作者評論時間正文
idtitleauthorcreatedbody
類型字符串時間大量文本
備注外鍵約束
構建代碼
from django.db import models
from django.contrib.auth.models import User
from article.models import ArticlePost# 博文的評論
class Comment(models.Model):
# related_name表示可以反向查詢文章和用戶的評論article = models.ForeignKey(ArticlePost,on_delete=models.CASCADE,related_name='comments')user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='comments')body = models.TextField()created = models.DateTimeField(auto_now_add=True)# 按照創建時間排序class Meta:ordering = ('created',)def __str__(self):return self.body[:20]

數據遷移

編寫好了Model后,接下來就需要進行數據遷移。遷移是Django對模型所做的更改傳遞到數據庫中的方式。

注意,每當對數據庫進行了更改(添加、修改、刪除等)操作,都需要進行數據遷移。

Django的遷移代碼是由模型文件自動生成的,它本質上只是個歷史記錄,Django可以用它來進行數據庫的滾動更新,通過這種方式使其能夠和當前的模型匹配。

在命令行中輸入命令讓 Django知道我們自定義模型有一些變更,并根據我們自定義app的模型生成創建數據表的腳本:

python manage.py makemigrations

在這里插入圖片描述

python manage.py migrate

在這里插入圖片描述

數據查看

可以通過查看數據庫檢查數據遷移效果

mysql -u 數據庫用戶名 -p

輸入密碼后進入數據庫

# 切換到數據庫
USE 數據庫名;
# 顯示數據表
SHOW TABLES;

在這里插入圖片描述

可以看到數據庫中已經有了Django自帶的用戶數據表和我們創建的文章、評論數據表

創建視圖

再看下MVT圖:在這里插入圖片描述

我們已經構建起Model與數據庫之間的聯系,下面需要構建模型(Model)與視圖(View)之間的關系。
Django 中視圖的概念是「一類具有相同功能和模板的網頁的集合」。
每一個視圖表現為一個簡單的Python函數,它需要要做的只有兩件事:返回一個包含被請求頁面內容的 HttpResponse對象,或者拋出一個異常,比如 Http404
視圖函數中的request與網頁發來的請求有關,里面包含get或post的內容、用戶瀏覽器、系統等信息。簡單來說,視圖就是實現將用戶的想法通過WEB傳遞到模型。
根據系統設計過程中需要的功能,我們分別在不同的app 中創建對應的View視圖。

文章視圖

對于文章,我們需要有以下功能:

  • 文章創建(article_create)
    • 實現文章的創建和提交功能。
  • 文章內容顯示(article_detail)
    • 展示文章的標題和內容詳情,同時在此視圖中取出評論,并展示所有評論列表。
  • 文章刪除(article_delete)
    • 實現文章刪除功能。
  • 文章修改(article_update)
    • 實現文章的修改功能。
  • 文章排序(article_list)
    • 實現默認按發布日期排序。
    • 實現可按瀏覽量(熱度)排序。
    • 利用Django 的paginator組件實現分頁功能。
# 導入Django內部的登錄裝飾器,可以確保只有登錄才能訪問相應視圖。
from django.contrib.auth.decorators import login_required
# 導入http功能
from django.http import HttpResponse
# 導入render功能和redirect功能
from django.shortcuts import render,redirect
# 導入數據模型ArticlePost
from comment.models import Comment
# 從本目錄導入模型
from . import models
# 從本目錄的模型中導入文章功能
from .models import ArticlePost
# 引入內置User模型
from django.contrib.auth.models import User
# 引入內置的分頁模塊
from django.core.paginator import Paginator# 定義文章創建函數
def article_create(request):# 如果用戶提交數據,則把相應數據填入變量中if request.method == 'POST':new_article_title = request.POST.get('title')new_article_body = request.POST.get('body')# 默認第一個用戶作者new_article_author = User.objects.get(id=1)# 生成一個文章對象,即創建模型。models.ArticlePost.objects.create(title=new_article_title, body=new_article_body,author=new_article_author)return redirect("article:article_list")# 如果用戶請求獲取數據,則給用戶提供一個寫文章的界面else:return render(request, 'article/create.html')# 一般都是先請求獲取數據--生成寫文章界面--寫完后再提交數據# 文章詳情
def article_detail(request, id):# 取出相應的文章article = ArticlePost.objects.get(id=id)# 瀏覽量 +1article.total_views += 1# 把新的瀏覽量字段保存數據庫article.save(update_fields=['total_views'])# 取出文章評論comments = Comment.objects.filter(article=id)# 需要傳遞給模板的對象# context = { 'article': article }context = { 'article': article, 'comments': comments }# 載入模板,并返回context對象return render(request, 'article/detail.html', context)# 刪文章
def article_delete(request, id):# 根據 id 獲取需要刪除的文章article = ArticlePost.objects.get(id=id)# 調用.delete()方法刪除文章article.delete()# 完成刪除后返回文章列表return redirect("article:article_list")# 更新文章
# 提醒用戶登錄
@login_required(login_url='/userprofile/login/')
def article_update(request, id):# # 獲取需要修改的具體文章對象article = ArticlePost.objects.get(id=id)# 過濾非作者的用戶if request.user != article.author:return HttpResponse("抱歉,你無權修改這篇文章。")# 判斷用戶是否為 POST 提交表單數據if request.method == "POST":new_article_title = request.POST.get('title')new_article_body = request.POST.get('body')article.title = new_article_titlearticle.body = new_article_bodyarticle.save()# 完成后返回到修改后的文章中。需傳入文章的 id 值return redirect("article:article_detail", id=id)else:# 賦值上下文,將 article 文章對象也傳遞進去,以便提取舊的內容context = {'article': article}return render(request, 'article/update.html', context)def article_list(request):# 根據GET請求中查詢條件# 如果選擇按瀏覽量排序返回數組if request.GET.get('order') == 'total_views':article_list = ArticlePost.objects.all().order_by('-total_views')order = 'total_views'# 否則按照默認排序返回數組else:article_list = ArticlePost.objects.all()order = 'normal'# 分頁,每頁4項paginator = Paginator(article_list, 4)# 如果選擇了頁面page = request.GET.get('page')# 查看該頁的文章articles = paginator.get_page(page)# 返回這些文章模型,并按排序返回context = { 'articles': articles, 'order': order }return render(request, 'article/list.html', context)

評論視圖

在文件comment/views.py文件中創建如下視圖函數,評論比較簡單,暫時只創建一個添加評論的就可以了:

# 導入相關模塊
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from article.models import ArticlePost
from . import models# 文章評論
@login_required(login_url='/user/login/')
def post_comment(request, article_id):article = get_object_or_404(ArticlePost, id=article_id)if request.method == 'POST':new_comment_body = request.POST.get('body')new_article_user = request.usermodels.Comment.objects.create(article=article, body=new_comment_body,user=new_article_user)return redirect(article)else:return HttpResponse("發表評論僅接受POST請求。")

用戶視圖

之所以沒創建用戶模型是因為Django內置了用戶模型,我們在開發一些用戶權限控制不復雜的網站或者系統時,可以直接采用Django自帶的用戶認證模塊功能,通過視圖調用即可。

用戶注冊登錄

用戶注冊、登錄一般都會用到表單,Django中也內置了一個表單組件,首先我們利用該組件構建表單,在user的app中新建forms.py

# 引入表單類
from django import forms
# 引入 User 模型
from django.contrib.auth.models import User# 登錄表單,繼承了 forms.Form 類
class UserLoginForm(forms.Form):username = forms.CharField()password = forms.CharField()# 注冊用戶表單
class UserRegisterForm(forms.ModelForm):# 復寫 User 的密碼password = forms.CharField()password2 = forms.CharField()class Meta:model = Userfields = ('username', 'email')# 對兩次輸入的密碼是否一致進行檢查def clean_password2(self):data = self.cleaned_dataif data.get('password') == data.get('password2'):return data.get('password')else:raise forms.ValidationError("密碼輸入不一致,請重試。")

以上是一個簡單的登錄、注冊表單實現

視圖建設

用戶視圖需要三個功能,登錄(驗證賬號密碼)、退出、注冊(新建一條用戶數據),代碼如下:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login,logout
from django.http import HttpResponse
from .forms import UserLoginForm,UserRegisterForm# Create your views here.
def user_login(request):if request.method == 'POST':user_login_form = UserLoginForm(data=request.POST)if user_login_form.is_valid():# .cleaned_data 清洗出合法數據data = user_login_form.cleaned_data# 檢驗賬號、密碼是否正確匹配數據庫中的某個用戶# 如果均匹配則返回這個 user 對象user = authenticate(username=data['username'], password=data['password'])if user:# 將用戶數據保存在 session 中,即實現了登錄動作login(request, user)return redirect("article:article_list")else:return HttpResponse("賬號或密碼輸入有誤。請重新輸入~")else:return HttpResponse("賬號或密碼輸入不合法")elif request.method == 'GET':user_login_form = UserLoginForm()context = { 'form': user_login_form }return render(request, 'userprofile/login.html', context)else:return HttpResponse("請使用GET或POST請求數據")def user_logout(request):logout(request)return redirect("article:article_list")# 用戶注冊
def user_register(request):if request.method == 'POST':user_register_form = UserRegisterForm(data=request.POST)if user_register_form.is_valid():new_user = user_register_form.save(commit=False)# 設置密碼new_user.set_password(user_register_form.cleaned_data['password'])new_user.save()# 保存好數據后立即登錄并返回博客列表頁面login(request, new_user)return redirect("article:article_list")else:return HttpResponse("注冊表單輸入有誤。請重新輸入~")elif request.method == 'GET':user_register_form = UserRegisterForm()context = { 'form': user_register_form }return render(request, 'userprofile/register.html', context)else:return HttpResponse("請使用GET或POST請求數據")

配置路由

定義完視圖后,我們需要通過路由訪問這些視圖:
查找視圖的過程 :

  • 1.請求者在瀏覽器地址欄中輸入URL, 請求到網站.
  • 2.網站獲取URL信息.
  • 3.然后與編寫好的URLconf逐條匹配.
  • 4.如果匹配成功則調用對應的視圖.
  • 5.如果所有的URLconf都沒有匹配成功.則返回404錯誤.

在這里插入圖片描述

我們有3個app,Django可以對URL進行分級管理,我們在每個app文件夾內的urls.py分別定義各自app相關的URL,然后在根目錄DjangoBlog的urls.py中通過include指令來包含各個app中的URL。

  • 需要兩步完成URLconf配置
    • 1.在項目中定義URLconf(到應用)
    • 2.在應用中定義URLconf(應用內)

項目中定義路由(根目錄的urls.py)

# 引入用戶管理后臺
from django.contrib import admin
# 記得引入include
from django.urls import path, include
# 需要使用文章視圖顯示文章列表作為首頁
from article import viewsurlpatterns = [path('admin/', admin.site.urls),path('', views.article_list, name='home'),path('article/', include('article.urls', namespace='article')),path('user/', include('user.urls', namespace='user')),path('comment/', include('comment.urls', namespace='comment')),
]

應用中定義路由

文章APP(urls.py)

# 引入path
from django.urls import path
# 引入views.py
from . import views# 正在部署的應用的名稱
app_name = 'article'urlpatterns = [path('', views.article_list),# path函數將url映射到視圖path('article-list/', views.article_list, name='article_list'),# 文章詳情path('article-detail/<int:id>/', views.article_detail, name='article_detail'),# 寫文章path('article-create/', views.article_create, name='article_create'),# 刪除文章path('article-delete/<int:id>/', views.article_delete, name='article_delete'),# 更新文章path('article-update/<int:id>/', views.article_update, name='article_update'),
]

評論APP(urls.py)

# 引入path
from django.urls import path
# 引入views.py
from . import views# 正在部署的應用的名稱
app_name = 'comment'urlpatterns = [# # path函數將url映射到視圖# 發表評論path('post-comment/<int:article_id>/', views.post_comment, name='post_comment'),
]

用戶APP(urls.py)

from django.urls import path
from . import viewsapp_name = 'user'urlpatterns = [# 用戶登錄path('login/', views.user_login, name='login'),# 用戶退出path('logout/', views.user_logout, name='logout'),# 用戶注冊path('register/', views.user_register, name='register'),]

至此,所有后端工作準備完畢,下面我們建一個前端模板用于顯示相關信息:

創建模板

在根目錄新建一個templates文件夾,用于存放模板文件。
配置主要目錄下的setting.py中的TEMPLATES,綁定當前創建的templates文件夾地址。
在這里插入圖片描述

前期我們已經在視圖中設置了視圖傳入數據的目標地址,以文章視圖為例
我們有如下路由和創建文章功能
在這里插入圖片描述

在這里插入圖片描述

當得到GET請求頁面127.0.0.1:8000/article/article-create/時,會調取article_create函數返回 article/create.html 頁面.
我們直接用html語言簡單建立該頁面測試一下:

<!DOCTYPE html>
<html>
<head>
<title>只是測試</title>
</head>
<body>
<div class="container"><div class="row"><div class="col-12"><br><!-- 提交文章的表單 --><form method="post" action="."><!-- Django中需要POST數據的地方都必須有csrf_token -->{% csrf_token %}<!-- 文章標題 --><div class="form-group"><!-- 標簽 --><label for="title">文章標題</label><!-- 文本框 --><input type="text" class="form-control" id="title" name="title"></div><!-- 文章正文 --><div class="form-group"><label for="body">文章正文</label><!-- 文本區域 --><textarea type="text" class="form-control" id="body" name="body" rows="12"></textarea></div><!-- 提交按鈕,表單提交會直接POST --><button type="submit" class="btn btn-primary">完成</button></form></div></div>
</div>
</body>
</html>

訪問127.0.0.1:8000/article/article-create/,得到如下頁面:

在這里插入圖片描述

到此,我們已經完成了所有應用模型、視圖的搭建,并初步構建了一個文件創建的頁面進行驗證,下一步我們將針對每一個視圖建設模板,完成視圖與模板之間的連接。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77886.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77886.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77886.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZLMediaKit支持JT1078實時音視頻

ZLMediaKit 對 JT1078 實時音視頻協議的支持主要通過其擴展版本或與其他中間件結合實現。以下是基于搜索結果的綜合分析&#xff1a; 一、ZLMediaKit 原生支持能力 開源版本的基礎支持 ZLMediaKit 開源版本本身未直接集成 JT1078 協議解析模塊&#xff0c;但可通過 RTP 推流功能…

Java隊列(Queue)核心操作與最佳實踐:深入解析與面試指南

文章目錄 概述一、Java隊列核心實現類對比1. LinkedList2. ArrayDeque3. PriorityQueue 二、核心操作API與時間復雜度三、經典使用場景與最佳實踐場景1&#xff1a;BFS層序遍歷&#xff08;樹/圖&#xff09;場景2&#xff1a;滑動窗口最大值&#xff08;單調隊列&#xff09; …

MetaGPT智能體框架深度解析:記憶模塊設計與應用實踐

在AI智能體技術從單點突破邁向系統工程的關鍵階段&#xff0c;MetaGPT憑借其創新的記憶架構重新定義了多智能體協作范式。本文深度解構其革命性的三級記憶系統&#xff0c;揭秘支撐10倍效能提升的知識蒸餾算法與動態上下文控制策略&#xff0c;通過企業級應用案例與性能基準測試…

集結號海螺捕魚服務器調度與房間分配機制詳解:六

本篇圍繞服務器調度核心邏輯進行剖析&#xff0c;重點講解用戶連接過程、房間分配機制、服務端并發策略及常見性能瓶頸優化。適用于具備中高級 C 后端開發經驗的讀者&#xff0c;覆蓋網絡會話池、邏輯服調度器與房間生命周期管理等關鍵模塊。 一、服務器結構概覽 整體系統采用…

【電子通識】熱敏打印機是怎么形成(打印)圖像和文字的?

在我們身邊&#xff0c;熱敏打印方式常見用于裝飾貼紙、便利店的小票。此外&#xff0c;物流及食品條碼標簽、身份證件、機票?火車票、X光片、食品日期印刷等&#xff0c;很多打印都用到了熱敏打印頭。 熱敏打印頭的蓄熱層(涂釉層)上分布著一排加熱元件&#xff08;發熱線&…

SQL注入漏洞中會使用到的函數

目錄 一、信息獲取函數 1. 通用函數 2. 元數據查詢&#xff08;INFORMATION_SCHEMA&#xff09; 二、字符串操作函數 1. 字符串連接 2. 字符串截取 3. 編碼/解碼 三、報錯注入專用函數 1. MySQL 2. SQL Server 3. PostgreSQL 四、時間盲注函數 1. 通用延遲 2. 計…

車載信息安全架構 --- 汽車網絡安全

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

Linux423 刪除用戶

查找 上面已查過&#xff1a;無法使用sudo 新開個終端試試 之前開了一個終端&#xff0c;按照deepseek排查 計劃再開一個進程 開一個終端 后強制刪除時顯示&#xff1a;此事將被報告

《從卷積核到數字解碼:CNN 手寫數字識別實戰解析》

文章目錄 一、手寫數字識別的本質與挑戰二、使用步驟1.導入torch庫以及與視覺相關的torchvision庫2.下載datasets自帶的手寫數字的數據集到本地 三、完整代碼展示 一、手寫數字識別的本質與挑戰 手寫數字識別的核心是&#xff1a;從二維像素矩陣中提取具有判別性的特征&#x…

UniOcc:自動駕駛占用預測和預報的統一基準

25年3月來自 UC Riverside、U Wisconsin 和 TAMU 的論文"UniOcc: A Unified Benchmark for Occupancy Forecasting and Prediction in Autonomous Driving"。 UniOcc 是一個全面統一的占用預測基準&#xff08;即基于歷史信息預測未來占用&#xff09;和基于攝像頭圖…

模型量化核心技術解析:從算法原理到工業級實踐

一、模型量化為何成為大模型落地剛需&#xff1f; 算力困境&#xff1a;175B參數模型FP32推理需0.5TB內存&#xff0c;超出主流顯卡容量 速度瓶頸&#xff1a;FP16推理延遲難以滿足實時對話需求&#xff08;如客服場景<200ms&#xff09; 能效挑戰&#xff1a;邊緣設備運行…

AD9253鏈路訓練

傳統方式 參考Xilinx官方文檔xapp524。對于AD9253器件 - 125M采樣率 - DDR模式&#xff0c;ADC器件的DCO采樣時鐘(500M Hz)和FCO幀時鐘是中心對齊的&#xff0c;適合直接采樣。但是DCO時鐘不能直接被FPGA內部邏輯使用&#xff0c;需要經過BUFIO和BUFR緩沖后&#xff0c;得到s_b…

解決方案:遠程shell連不上Ubuntu服務器

服務器是可以通過VNC登錄&#xff0c;排除了是服務器本身故障 檢查服務是否在全網卡監聽 sudo ss -tlnp | grep sshd確保有一行類似 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid...,fd3))返回無結果&#xff0c;表明系統里并沒有任…

關于大數據的基礎知識(四)——大數據的意義與趨勢

成長路上不孤單&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///計算機愛好者&#x1f60a;///持續分享所學&#x1f60a;///如有需要歡迎收藏轉發///&#x1f60a;】 今日分享關于大數據的基礎知識&#xff08;四&a…

智能指針(weak_ptr )之三

1. std::weak_ptr 1.1 定義與用法 std::weak_ptr 是一種不擁有對象所有權的智能指針&#xff0c;用于觀察但不影響對象的生命周期。主要用于解決 shared_ptr 之間的循環引用問題。 主要特性&#xff1a; 非擁有所有權&#xff1a;不增加引用計數。可從 shared_ptr 生成&…

學習海康VisionMaster之卡尺工具

一&#xff1a;進一步學習了 今天學習下VisionMaster中的卡尺工具&#xff1a;主要用于測量物體的寬度、邊緣的特征的位置以及圖像中邊緣對的位置和間距 二&#xff1a;開始學習 1&#xff1a;什么是卡尺工具&#xff1f; 如果我需要檢測芯片的每一個PIN的寬度和坐標&#xff…

Java面試實戰:從Spring Boot到微服務的深入探討

Java面試實戰&#xff1a;從Spring Boot到微服務的深入探討 場景&#xff1a;電商場景的面試之旅 在某互聯網大廠的面試間&#xff0c;面試官李老師正襟危坐&#xff0c;而對面坐著的是傳說中的“水貨程序員”趙大寶。 第一輪&#xff1a;核心Java與構建工具 面試官&#x…

深入理解 Spring @Configuration 注解

在 Spring 框架中,@Configuration 注解是一個非常重要的工具,它用于定義配置類,這些類可以包含 Bean 定義方法。通過使用 @Configuration 和 @Bean 注解,開發者能夠以編程方式創建和管理應用程序上下文中的 Bean。本文將詳細介紹 @Configuration 注解的作用、如何使用它以及…

密碼學中的鹽值是什么?

目錄 1. 鹽值的基本概念 2. 鹽值的作用 (1) 防止彩虹表攻擊 (2) 防止相同的密碼生成相同的哈希值 (3) 增加暴力破解的難度 3. 如何使用鹽值&#xff1f; (1) 生成鹽值 (2) 將鹽值附加到密碼 (3) 存儲鹽值和哈希值 (4) 驗證密碼 4. 鹽值如何增加暴力破解的難度 在線暴…

基于瑞芯微RK3576國產ARM八核2.2GHz A72 工業評估板——Docker容器部署方法說明

前 言 本文適用開發環境: Windows開發環境:Windows 7 64bit、Windows 10 64bit Linux開發環境:VMware16.2.5、Ubuntu22.04.5 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-6.1.115 LinuxSDK:LinuxSDK-[版本號](基于rk3576_linux6.1_release_v1.1.0) Docker是一個開…