主頁 > 後端開發 > django制作一個小小的教務系統并且成功部署到騰訊云(實作:增刪改查和選課的功能)

django制作一個小小的教務系統并且成功部署到騰訊云(實作:增刪改查和選課的功能)

2021-06-09 22:12:40 後端開發

我的django學習記錄

  • 涉及到的環境
    • 前言
    • 正文
    • 開始了,django專案的創建
      • model代碼
      • views代碼
        • 最新更新(上方可不看)
  • 以Ubuntu為例
  • Step 1: 移除之前docker版本并更新更新 apt 包索引
  • Step 2: 安裝 apt 依賴包,用于通過HTTPS來獲取倉庫
  • Step 3: 添加 Docker 的官方 GPG 密鑰
  • Step 4: 設定docker穩定版倉庫,這里使用了阿里云倉庫
  • Step 5: 安裝免費的docker Community版本docker-ce
  • sudo apt-get install -y docker-ce= #該命令可以選擇docker-ce版本
  • Step 6: 查看docker版本及運行狀態
  • Step 7:本步非必需,使用阿里云設定Docker鏡像加速,注意下面鏈接請使用阿里云給自己的URL
  • 建立 python3.7 環境
  • 鏡像作者大江狗
  • 設定 python 環境變數
  • 設定pip源為國內源
  • 在容器內/var/www/html/下創建 mysite1檔案夾
  • 設定容器內作業目錄
  • 將當前目錄檔案加入到容器作業目錄中(. 表示當前宿主機目錄)
  • 利用 pip 安裝依賴
  • 根據Dockerfile創建名為django_docker_img的鏡像,版本v1,.代表當前目錄
  • 查看鏡像是否創建成功, 后面-a可以查看所有本地的鏡像
  • 如成功,根據鏡像創建mysite1容器并運行,宿主機80:容器8000,-d表示后臺運行,
  • 查看容器狀態,后面加-a可以查看所有容器串列,包括停止運行的容器
  • 進入容器,如果復制命令的話,結尾千萬不能有空格,
  • 建立 python3.7 環境
  • 鏡像作者大江狗
  • 設定 python 環境變數
  • 設定pypi源頭為國內源
  • 在容器內/var/www/html/下創建 mysite2 檔案夾
  • 設定容器內作業目錄
  • 將當前目錄檔案拷貝一份到作業目錄中(. 表示當前目錄)
  • 利用 pip 安裝依賴
  • Windows環境下撰寫的start.sh每行命令結尾有多余的\r字符,需移除,
  • 設定start.sh檔案可執行權限
  • 從第一行到最后一行分別表示:
  • 1. 生成資料庫遷移檔案
  • 2. 根據資料庫遷移檔案來修改資料庫
  • 3. 用 uwsgi啟動 django 服務, 不再使用python manage.py runserver
  • python manage.py runserver 0.0.0.0:8000
  • 啟動并運行mysite2的容器
  • 進入容器,如果復制命令的話,結尾千萬不能有空格,
  • 執行腳本命令
        • 成品效果

涉及到的環境

系統:win10
Python版本:3.9
Pycharm版本:PyCharm 2020.3.3 x64
Django版本:3.1.7
Mysql版本:8.0
Navicat 15 for MySQL

前言

好久沒更新博客,一直在看博客,因為最近要學習的東西實在是有點多,我也沒有精力去寫博客,但是每次我上CSDN上再也沒有小紅點了,我知道,我該更新更新博客,記錄下自己的學習了,
在這里插入圖片描述
現在是4月1日的22:36分,我開始了這篇博客的撰寫,
先分享了最近學了些什么,前端HTML,CSS,但也是僅僅了解了一下標簽什么的,應用的都很少
跟著教程走還有JS和JQery,但是我沒學/(ㄒoㄒ)/~~本著一個往后端發展的想法,我有我的小倔強,但是經歷過web繼續的學習后,我發現我錯了,前端的東西還是要學的,連一個DIV P A 各種標簽都看不懂的話,根本沒辦法進行前后端的互動,并且到時候學習爬蟲分析網頁,都整不明白,所以被現實教育之后的我,現在放下所謂的倔強,潛下心來去學前端代碼,

正文

web學習的深入,我學習到了django框架,哎,太煩躁了,我學的教程中的django版本1.x 但是現在的django都已經3.1了,有一些東西發生了不小的變化,我在CSDN上找了好多關于Django的教程,但無一例外,都是畢竟老的版本django教程,最新的才是2,x,就算是有django3.x的教程,也是非常淺顯的教你創建專案,還不如官方檔案呢!
所以我由我撰寫的專案作為切入點,記錄自己學習最新的django3.x
其實,我學習就好了,看看官方檔案就可以了,為什么要做專案?
在這里插入圖片描述
感謝老師,長達60s的語音,聽的我心yu花ba怒bu放neng,
就是我們學校要參加一個全國大學生設計大賽,我想本著以賽督學的想法,利用django搭建一個學生管理系統,大一知識儲備匱缺,所以參加了解一下流程,專案質量略次,最重要是一個鍛煉自己的機會!

開始了,django專案的創建

Django的學習,一定要看這個,如果不明白可以給我留言私信,但因為技術有限,僅限下圖
在這里插入圖片描述

Django的創建,哎,這個東西,我真的不想寫出來,像一些博主一樣湊字數,我真的是吐了
我就把代碼寫出來,況且都已經學習到了框架,該有些看到報錯自行解決問題的能力了,真的想學的人會自己嘗試(試一試又不會懷孕)
因為我的專案做了一些了,本著惰性本能,我就不重新開始了,直接截圖也可以明白!
到后面我會博客緊跟專案,**專案做什么,博客就更新什么,**所以說,按照我前面的環境配置好,跟著博客,你也可以可以完成這個專案(我為了學習Django去GitHub上找原始碼,總是因為作者沒寫清楚依賴,所以原始碼從來沒有跑成過),我能一步步寫,真的非常適合新手的學習!!!!

創建Django專案和應用
以下都在cmd視窗中運行

django-admin startproject name 創建工程,name換成你要起的名字

python manager.py startapp name 創建子應用,name換成你要起的名字

因為pycharm可以直接創建Django所以,其實只需要執行下面的代碼,創建應用即可
在這里插入圖片描述
在這里插入圖片描述
工程創建好了,我們就可以輸入這指令,使你的Django運行起來

python manage.py runserver

這樣你的Django就跑起來了,但是作為一個漢語為第一語言的人,你怎能忍受住英語的折磨,所以你去setting里面修改一下語言
在這里插入圖片描述
修改成功后,在進行一個

python manage.py runserver

這樣你看到這個畫面,你就是成功了, 祝賀你!!!
在這里插入圖片描述
ps:現在已經弄好了不好展示出這個界面了,所以偷個懶,把當初第一次安裝好DJango記錄自己的照片拿過來

還有一步很重要,修改你的配置資料庫
Django本身自帶一個輕量級資料庫sqllite
我們把它換成mysql,
首先去工程目錄里面找到__init__檔案,添加下面的代碼,并且形成一種慣性思維,修改資料庫,就要宣告它!
代碼在這里

import pymysql
pymysql.install_as_MySQLdb()

在這里插入圖片描述

然后去你的工程目錄里面的setting里面找到這個,修改成我這個樣子,就可以了
在這里插入圖片描述
記得在運行前,一定要在mysql里面已經創建好對應的庫

當你建立好子應用名字之后,一定要去setting檔案里面去注冊,告訴Django你創建了一個應用程式
在這里插入圖片描述

始終牢記MVT的流程
M:model(模型模塊)
V:views(視圖模塊)
T:templates(模板模塊)
也就是說建立好了工程以后,首先去model里面去創建模型(可以暫時理解為資料,類就是表名,類里面是欄位),記得是在你的app里面
接下來我把我的model檔案寫出來

model代碼

from django.db import models

# Create your models here.
from django.db import models

# Create your models here.
'''
學生資訊: 學號int 姓名char 性別char 年齡int 入學年份data 所在專業char 班級char 導員姓名char
考試成績:考試科目 考試成績
課程資訊:課程名 課程老師 上課教室
'''


# 學生資訊
class StdentInformation(models.Model):
    student_id = models.CharField(max_length=30, verbose_name='學號')
    student_age = models.IntegerField(verbose_name='年齡')
    student_name = models.CharField(max_length=100, verbose_name='姓名')
    student_sex = models.CharField(max_length=5, verbose_name='性別')
    start_year = models.CharField(max_length=10, verbose_name='入學年份')
    specialty = models.CharField(max_length=20, verbose_name='所在專業')
    student_class = models.CharField(max_length=10, verbose_name='班級')
    teacher_name = models.CharField(max_length=20, verbose_name='導員姓名')

    def __str__(self):
        return self.student_name

# 考試成績
class StudentScore(models.Model):
    student_id = models.CharField(max_length=30, verbose_name='學號')
    sub_ject = models.CharField(max_length=10, verbose_name='科目')
    score = models.CharField(max_length=10, verbose_name='成績')


# 課程資訊
class StudentCourse(models.Model):
    student_id = models.CharField(max_length=30, verbose_name='學號')
    sub_name = models.CharField(max_length=10, verbose_name='課程名')
    sub_tcacher = models.CharField(max_length=10, verbose_name='課程老師')
    sub_class = models.CharField(max_length=10, verbose_name='上課教師')


views代碼

M弄完了,就該弄V了,views
views就是視圖的意思,就是撰寫你的函式,在這個里面實作你后端代碼邏輯!

from django.shortcuts import render
from django.http import HttpResponse
from querysys.models import StdentInformation


# Create your views here.
def index(request):
    return HttpResponse('hello')


def searchstudent(request):
    
    return render(request, 'test.html')


def lookfor(request):
    student_id = request.POST.get('student_id')
    objects_all = StdentInformation.objects.all()
    try:
        student = objects_all.get(student_id=student_id)
    except Exception as e:
        return HttpResponse('找不到學生資訊', e)
    student_name = student.student_name
    context = {
        'student_name': student_name
    }
    return render(request, 'test2.html', context)

可能現在看不懂代碼,不過沒關系,靜下心來分析代碼,其實邏輯還是很簡單的,看愿不愿意看下去
接下來就是設定路由了 url
你得讓對應的瀏覽器請求找到對應的視圖
先去你的工程里面找url
在這里插入圖片描述
重點已經用紅色標注了

urlpatterns = [
    path('admin/', admin.site.urls),
    path('querysys/', include('querysys.url')),

]

include引導進了子應用的url, 因為你創建的子應用沒有url檔案,所以我們自己創建一個檔案
在這里插入圖片描述
里面的代碼是

from django.urls import path
from querysys.views import index, searchstudent, lookfor

urlpatterns = [
    path('', index),
    path('searstudent/', searchstudent),
    path('lookfor/', lookfor),
]

先寫到這里,還會繼續更新,緊跟我的專案,
到4月3日21:52分,我已經開始嘗試使用前端模板,先給大家展示個樣子
在這里插入圖片描述
在這里插入圖片描述

好了,還會繼續更新下去,如果覺得我寫的還可以,給我點贊,評論,關注吧!我會認真回復每一條評論!!!

最新更新(上方可不看)

之前因為我卡在了部署外鏈,直到現在才整明白一些,要想真正的部署到生產環境上,要解決很多問題,高并發,靜態動態檔案的獲取,
因為隔得時間有點久,所以從下面開始,我要開始 重新開始屢屢思路,重寫這篇文章

為了部署到服務器上,我不得不暫時舍棄了mysql資料庫,先用的django自帶的sqllite,正好也適合新手

部署服務器外鏈的教程源于公眾號:大江狗 Python Web與Django開發
Docker的安裝
學習本教程前首先我們要安裝Docker,菜鳥教程上總結了Docker在各個平臺和系統上的安裝,大家可以參考,這里總結了下Docker在阿里云Ubuntu系統上的安裝程序,步驟看似很多且復雜,但大家只需要一步一步copy和paste命令就行了,整個安裝程序很流暢,

以Ubuntu為例

Step 1: 移除之前docker版本并更新更新 apt 包索引

sudo apt-get remove docker docker-engine docker.io
sudo apt-get update

Step 2: 安裝 apt 依賴包,用于通過HTTPS來獲取倉庫

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

Step 3: 添加 Docker 的官方 GPG 密鑰

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

Step 4: 設定docker穩定版倉庫,這里使用了阿里云倉庫

sudo add-apt-repository “deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable”
sudo apt-get update

Step 5: 安裝免費的docker Community版本docker-ce

sudo apt-get -y install docker-ce

sudo apt-get install -y docker-ce= #該命令可以選擇docker-ce版本

Step 6: 查看docker版本及運行狀態

sudo docker -v
sudo systemctl status docker

Step 7:本步非必需,使用阿里云設定Docker鏡像加速,注意下面鏈接請使用阿里云給自己的URL

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{ “registry-mirrors”: [“https://ua3456xxx.mirror.aliyuncs.com”] }
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
部署一個最簡單的Django專案
現在我們要在服務器上利用Docker部署下面一個最簡單的Django專案,我們不使用uwsgi和nginx,資料庫也使用默認的sqlite3,只把django放在一個容器里,整個專案結構如下所示,目前該專案放在宿主機(服務器)上,

mysite1
├── db.sqlite3
├── Dockerfile # 用于生產docker鏡像的Dockerfile
├── manage.py
├── mysite1
│ ├── asgi.py
│ ├── init.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── pip.conf # 非必需,pypi源設定成國內,加速pip安裝
└── requirements.txt # 專案只依賴Django,所以里面只有django==3.0.5一條
注意:Django默認ALLOWED_HOSTS = []為空,在正式部署前你需要修改settings.py, 把它設定為服務器實際對外IP地址,否則后面部署會出現錯誤,這個與docker無關,即使你不用docker部署,ALLOWED_HOSTS也要設定好的,

第一步:撰寫Dockerfile,內容如下:

建立 python3.7 環境

FROM python:3.7

鏡像作者大江狗

MAINTAINER DJG

設定 python 環境變數

ENV PYTHONUNBUFFERED 1

設定pip源為國內源

COPY pip.conf /root/.pip/pip.conf

在容器內/var/www/html/下創建 mysite1檔案夾

RUN mkdir -p /var/www/html/mysite1

設定容器內作業目錄

WORKDIR /var/www/html/mysite1

將當前目錄檔案加入到容器作業目錄中(. 表示當前宿主機目錄)

ADD . /var/www/html/mysite1

利用 pip 安裝依賴

RUN pip install -r requirements.txt
我們還將pip源設定成了阿里云鏡像,pip.conf檔案內容如下所示:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
第二步:使用當前目錄的 Dockerfile 創建鏡像,標簽為 django_docker_img:v1,

進入Dockerfile所在目錄,輸入如下命令:

根據Dockerfile創建名為django_docker_img的鏡像,版本v1,.代表當前目錄

sudo docker build -t django_docker_img:v1 .

查看鏡像是否創建成功, 后面-a可以查看所有本地的鏡像

sudo docker images
這是你應該可以看到有一個名為django_docker_img的docker鏡像創建成功了,版本v1,

圖片
第三步:根據鏡像生成容器并運行,容器名為mysite1, 并將宿主機的80埠映射到容器的8000埠,

如成功,根據鏡像創建mysite1容器并運行,宿主機80:容器8000,-d表示后臺運行,

sudo docker run -it -d --name mysite1 -p 80:8000 django_docker_img:v1

查看容器狀態,后面加-a可以查看所有容器串列,包括停止運行的容器

sudo docker ps

進入容器,如果復制命令的話,結尾千萬不能有空格,

sudo docker exec -it mysite1 /bin/bash
這時你應該可以看到mysite1容器開始運行了,使用sudo docker exec -it mysite1 /bin/bash即可進入容器內部,

圖片
第四步:進入容器內部后,執行如下命令

python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py runserver 0.0.0.0:8000
這時你打開Chrome瀏覽器輸入http://your_server_ip,你就可以看到你的Django網站已經上線了,恭喜你!

從客戶端到Docker容器內部到底發生了什么
前面我們已經提到如果不指定容器網路,Docker創建運行每個容器時會為每個容器分配一個IP地址,我們可以通過如下命令查看,

sudo docker inspect mysite1 | grep “IPAddress”
圖片
用戶訪問的是宿主機服務器地址,并不是我們容器的IP地址,那么用戶是如何獲取容器內部內容的呢?答案就是埠映射,因為我們將宿主機的80埠(HTTP協議)隱射到了容器的8000埠,所以當用戶訪問服務器IP地址80埠時自動轉發到了容器的8000埠,

注意:容器的IP地址很重要,以后要經常用到,同一宿主機上的不同容器之間可以通過容器的IP地址直接通信,一般容器的IP地址與容器名進行系結,只要容器名不變,容器IP地址不變,

把UWSGI加入Django容器中的準備作業
在前面例子中我們使用了Django了自帶的runserver命令啟動了測驗服務器,但實際生成環境中你應該需要使用支持高并發的uwsgi服務器來啟動Django服務,盡管本節標題是把uwsgi加入到Django容器中,但本身這句話就是錯的,因為我們Django的容器是根據django_docker_img:v1這個鏡像生成的,我們的鏡像里并沒有包含uwsgi相關內容,只是把uwsgi.ini組態檔拷入到Django容器是不會作業的,

所以這里我們需要構建新的Dockerfile并構建新的鏡像和容器,為了方便演示,我們創建了一個名為mysite2的專案,專案結構如下所示:

mysite2
├── db.sqlite3
├── Dockerfile # 構建docker鏡像所用到的檔案
├── manage.py
├── mysite2
│ ├── asgi.py
│ ├── init.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── pip.conf
├── requirements.txt # 兩個依賴:django3.0.5 uwsgi2.0.18
├── start.sh # 進入容器后需要執行的命令,后面會用到
└── uwsgi.ini # uwsgi組態檔
新的Dockerfile內容如下所示:

建立 python3.7 環境

FROM python:3.7

鏡像作者大江狗

MAINTAINER DJG

設定 python 環境變數

ENV PYTHONUNBUFFERED 1

設定pypi源頭為國內源

COPY pip.conf /root/.pip/pip.conf

在容器內/var/www/html/下創建 mysite2 檔案夾

RUN mkdir -p /var/www/html/mysite2

設定容器內作業目錄

WORKDIR /var/www/html/mysite2

將當前目錄檔案拷貝一份到作業目錄中(. 表示當前目錄)

ADD . /var/www/html/mysite2

利用 pip 安裝依賴

RUN pip install -r requirements.txt

Windows環境下撰寫的start.sh每行命令結尾有多余的\r字符,需移除,

RUN sed -i ‘s/\r//’ ./start.sh

設定start.sh檔案可執行權限

RUN chmod +x ./start.sh
start.sh腳本檔案內容如下所示,最重要的是最后一句,使用uwsgi.ini組態檔啟動Django服務,

#!/bin/bash

從第一行到最后一行分別表示:

1. 生成資料庫遷移檔案

2. 根據資料庫遷移檔案來修改資料庫

3. 用 uwsgi啟動 django 服務, 不再使用python manage.py runserver

python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --ini /var/www/html/mysite2/uwsgi.ini

python manage.py runserver 0.0.0.0:8000

uwsgi.ni組態檔內容如下所示,

[uwsgi]
project=mysite2
uid=www-data
gid=www-data
base=/var/www/html

chdir=%(base)/%(project)
module=%(project).wsgi:application
master=True
processes=2

http=0.0.0.0:8000 #這里直接使用uwsgi做web服務器,使用http,如果使用nginx,需要使用socket溝通,
buffer-size=65536

pidfile=/tmp/%(project)-master.pid
vacuum=True
max-requests=5000
daemonize=/tmp/%(project)-uwsgi.log

#設定一個請求的超時時間(秒),如果一個請求超過了這個時間,則請求被丟棄
harakiri=60
#當一個請求被harakiri殺掉會,會輸出一條日志
harakiri-verbose=true
單容器部署 Django + UWSGI
第一步:生成名為django_uwsgi_img:v1的鏡像

sudo docker build -t django_uwsgi_img:v1 .
第二步:啟動并運行mysite2的容器

啟動并運行mysite2的容器

sudo docker run -it -d --name mysite2 -p 80:8000 django_uwsgi_img:v1
第三步:進入mysite2的容器內部,并運行腳本命令start.sh

進入容器,如果復制命令的話,結尾千萬不能有空格,

sudo docker exec -it mysite2 /bin/bash

執行腳本命令

sh start.sh
以上兩句命令也可以合并成一條命令

sudo docker exec -it mysite2 /bin/bash start.sh
執行后效果如下所示,當你看到最后一句[uWSGI]時,說明uwsgi配置并啟動完成,

這時你打開瀏覽器輸入http://your_server_ip,你就可以看到你的Django網站已經上線了,恭喜你!這次是uwsgi啟動的服務哦,因為你根本沒輸入python manage.py runserver命令,

故障排查:此時如果你沒有看到網站上線,主要有兩個可能原因:

uwsgi組態檔錯誤,尤其http服務IP地址為0.0.0.0:8000,不應是服務器的ip:8000,因為我們uwsgi在容器里,并不在服務器上,

瀏覽器設定了http(埠80)到https(埠443)自動跳轉,,因為容器8000埠映射的是宿主機80埠,如果請求來自宿主機的443埠,容器將接收不到外部請求,解決方案清空瀏覽器設定快取或換個瀏覽器,

注意:你會留意到網站雖然上線了,但有些圖片和網頁樣式顯示不對,這是因為uwsgi是處理動態請求的服務器,靜態檔案請求需要交給更專業的服務器比如Nginx處理,下篇文章中我們將介紹Docker雙容器部署Django+Uwsgi+Nginx,歡迎關注,

這里是源檔案:
鏈接:https://pan.baidu.com/s/1Zz0t2x9HJIVrwsJbBtIC6Q
提取碼:4i04
復制這段內容后打開百度網盤手機App,操作更方便哦

成品效果

這是我部署的鏈接:
http://82.156.199.91/(服務器快要到期了)
http://82.156.57.249/(最新部署的鏈接)
我把后臺賬號密碼公布出來,你可以自行發揮啊,哈哈哈哈哈,搞點破壞???
賬號:admin
密碼:admin

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/286310.html

標籤:python

上一篇:最強Python/R/D3.js可視化資料(代碼全部免費送)

下一篇:爬蟲學習 ----- 第二章 爬取靜態網站 ---------- 01 . re 模塊學習 ---- python的re庫

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more