主頁 > 後端開發 > 開始你的第一個Django應用【Python web實戰】

開始你的第一個Django應用【Python web實戰】

2020-10-19 06:52:10 後端開發

在這篇教程中,我們將設定你的資料庫,創建你的第一個模型,并快速介紹Django的自動生成的管理站點,

ps注意很多人學Python程序中會遇到各種煩惱問題,沒有人幫答疑容易放棄,為此小編建了個Python全堆疊免費答疑.裙 :七衣衣九起起巴而五(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!

資料庫配置

現在打開mysite/settings.py這是一個普通的python模塊,模塊變數表示Django的設定,

默認情況下,Django配置使用SQLite資料庫,如果你是資料庫初學者,或者只是感興趣想隨便試試Django,這是最簡單的選擇,SQLite包含在Python內,因此你不需要安裝任何其他東西來支持你的資料庫,所以當你開始你的第一個真實專案時,你會想要使用一個更具擴展性的資料庫,比如PostgreSQL,以避免資料庫切換引發的麻煩,

如果你希望使用其他資料庫,安裝合適的資料庫系結并且在DATABASES'default'專案中修改keys以匹配資料庫連接設定:

  • ENGINE
    比如 'django.db.backends.sqlite3', 'django.db.backends.postgresql', 'django.db.backends.mysql', or 'django.db.backends.oracle',還有很多其他后端也有提供,詳情請見

  • NAME
    你資料庫的名字,如果你使用SQLite,資料庫將是你計算機上的一個檔案,這種情況下,NAME應該是這個檔案的完整絕對路徑,包括檔案名,默認值os.path.join(BASE_DIR, 'db.sqlite3')將檔案春處在專案目錄中,

如果你不使用SQLite作為你的資料庫,請務必添加USER, PASSWORD, 以及HOST,更多詳情

寫給其他用戶的使用者
如果你在使用SQLite之外的資料庫,請確保你使用前已經創建了資料庫,請在你的資料庫里使用CREATE DATABASE database_name;

同時確保mysite/settings.py擁有創建資料庫的權限,這樣就可以自動創建一個在后面的教程中需要的測驗資料庫,

如果你正在使用SQLite,你不需要提前創建任何東西,資料庫檔案會在必要的時候自動創建,

當你開始編輯你的mysite/settings.py,設定你的TIME_ZONE為你的時區,

另外,注意INSTALLED_APPS放在檔案最上面,它承載著這個Django實體中所有活動的Django應用的名字,應用可以被使用于多個專案中,你可以打包分發他們讓別人在別的專案中使用,

默認情況下,INSTALLED_APPS隨Django包含著幾個應用,

  • django.contrib.admin管理站點,你能立即使用上,
    -django.contrib.auth認證系統,
    -django.contrib.contenttypes內容型別的框架
    -django.contrib.sessions session框架
    -django.contrib.messages messaging框架
    -django.contrib.staticfiles 靜態檔案管理

這些應用默認包括在內以方便開發者使用,

其中一些應用程式,需要至少一個資料庫表才能使用,因此我們需要在資料庫中創建表,然后才能使用,請使用以下的命令:

python manage.py migrate

migrate命令查看INSTALLED_APPS的設定,并根據mysite/settings.py檔案中的資料庫設定創建需要的資料庫表,如果你感興趣的話,打開資料庫命令列,輸入以下命令來看看Django幫你創建了什么,

  • \dt(PostgreSQL),
  • SHOW TABLES;(MySQL),
  • .schema(SQLite),
  • SELECT TABLE_NAME FROM USER_TABLES;(Oracle)

寫給極簡主義者
正如我們上面所說,我們包含了默認應用為了涵蓋常規使用,但并不是每個人都需要它們,如果你不需要,請在運行migrate之前,從INSTALLED_APPS中隨意把注釋掉或者刪掉對應的代碼,migrate命令只會運行INSTALLED_APPS中的應用,


創建模型

現在,我們使用額外的元資料來定義你的模型(本質上就是你的資料庫布局),

模型的哲學
一個模型是關于您的資料的唯一的確定的來源,它包含著您正在存盤的資料的基本欄位和行為,Django遵從DRY原則,我們的目標是在一個地方定義您的資料模型然后自動地從中獲取資料,這就包括了遷移在里面,舉個例子,不像Ruby on Rails,Django的遷移完全源自您的資料模型,并且本質上只是Django可以通過更新資料庫模式來匹配當前模型的歷史,

在我們這個簡單的投票應用中,我們會創建兩個模型:問題(question)和選擇(choice),一個問題有一個問題內容和一個發布時間,一個選擇有選擇的文本和投票計數器,每個選擇都會和一個問題關聯,

這些概念通過簡單的python類就可以表現出來,按照以下代碼,編輯你的polls/models.py檔案,

polls/models.py
from django.db import models

class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published')

class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)

這些代碼非常明確,每個模型通過一個繼承自django.db.models.Model的類來表示,每個模型都有一些類變數,每個變數都表示模型中的資料庫欄位,

每個欄位通過實體中的一個欄位類表示,比如CharField是字符欄位,DateTimeField是時間欄位,這會告訴Django每個欄位保存著什么型別的資料,

每個欄位實體的名字(比如question_textpub_date)是欄位的對機器友好的格式的名字,你以后可以在你的Python代碼中使用這個值,你的資料庫也會用它作為列名稱,

你可以使用(可選的)第一個位置引數作為指定的可讀的名稱,他可以用于Django的幾個introspective(內省)部分,同時作為檔案,如果沒有提供,則Django將使用機器可讀的名稱作為名字,在這個例子中,我們只對Question.pub_date定義了一個名字,對于其他所有的欄位都會默認使用自己的機器名作為名字,

有些欄位類有一些必須的引數要填,舉例,CharField要求你給出最大長度max_length,這不僅會用在資料庫中,也會在驗證中使用,后面我們會講到,

一個欄位也可以擁有很多可選的引數,比如我們可以看到,我們班votes的默認值設成了0,

最后一點,注意關系是由外鍵定義的,這告訴Django,每一個Choice都和只和一個問題相關,Django支持所有常見的資料庫關系:多對一,多對多,一對一,


激活模型(activating models)

這個簡單的模型告訴了Django很多資訊,通過它,Django可以做到:

  • 為這個APP創建一個資料庫物件集合
  • 創建一個Python資料庫訪問API來訪問問題和選項的物件,

但是首先,我們應該告訴我們的專案,polls應用已經被安裝了,

Django哲學小課堂
Django的應用是可插拔的,您可以在多個專案中使用某個應用程式,你可以分發應用程式,因為他們并不是和給定的Django安裝系結的,

為了把對應的應用包括進我們的專案中,我們需要在INSTALLED_APPS設定中添加對其配置類的參考,PollsConfig類在polls/app.py檔案中,路徑是polls.apps.PollsConfig,編輯mysite/settings.py檔案,添加路徑到INSTALLED_APPS設定中,

mysite/settings.py
INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]

現在Django已經知道要把polls應用囊括在內了,下面運行另一條命令:

python manage.py makemigrations polls

你會看到類似下面的結果:

Migrations for 'polls': polls/migrations/0001_initial.py: -Creat model Choice -Create model Question -Add field question to choice

通過運行makemigrations,你可以告訴Django你已經對你的model做出了一些改變,并且你希望這些改變可以作為migration存盤起來,(在現在的例子里是創建了一個新的model)

Django通過Migration來存盤你的模型(也即是資料庫物件)的變化,他們只是硬碟上的一些檔案,如果你想,你可以為你的新模型讀取一個Migration(遷移);也就是polls/migrations/0001_initial.py檔案,不用擔心,你并不需要每次Django作出改變都要讀取它們,但是如果你想手動調整Django如何改變內容,那么它們是被設計為可以人為編輯的,

有一個命令可以幫你運行migration并且自動管理你的資料庫物件,也就是我們稍后會介紹的migrate(遷移),但是首先讓我們看看migration會運行什么樣的SQL,sqlmigrate命令接受遷移名稱,并且回傳其SQL:

python manage.py sqlmigrate polls 0001

你應該會看到類似下面的結果

BEGIN;
--
-- *Create model Choice*
--
CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL );
--
-- *Create model Question*
--
CREATE TABLE "polls_question" ( "id" serial NOT NULL PRIMARY KEY, "question_text" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL );
--
--*Add field question to choice*
--
ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;
ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;
CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
ALTER TABLE "polls_choice" ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id" FOREIGN KEY ("question_id") REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED;
COMMIT;

注意:

  • 具體的輸出會根據你如何使用的資料庫而變化,上面的例子是根據PostgreSQL寫的,
  • 表的名字會根據應用的名字以及模型的小寫名自動生成(你可以覆寫這個行為)
  • 主鍵會自動生成(你可以覆寫這個)
  • 按照慣例,django將"_id"附加到外鍵欄位名稱,
  • 它根據你使用的資料庫量身打造,因此資料庫特定的欄位型別比如auto_increment(MySQL), serial(PostgreSQL)或是integer primary key autoincrement (SQLite) 都會自動幫你處理,欄位名的參考也同樣如此,
  • sqlmigrate命令并不會真的讓你的資料庫遷移,只是列印到螢屏上,讓你可以看到Django需要什么SQL,這對于檢查Django在干什么或者有需要SQL腳本更改的資料庫管理員非常有用,

如果你感興趣,你還可以運行python manage.py check,這會不進行任何遷移,不接觸資料庫來檢查你的專案有沒有什么問題,

現在,再次運行migrate創建你的模型吧,

`$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions

Running migrations:
Rendering model states... DONE
Applying polls.0001_initial... OK`

migrate 命令接收所有未應用的遷移(Django通過一個叫做django_migrations的特殊表聊跟蹤哪些遷移被應用了)并根據資料庫運行他們,本質上是將你對模型的更改與資料庫物件進行同步,

遷移非常強大,他可以讓你一邊建設你的專案,一邊慢慢地改變你的資料庫,而且不用洗掉你的資料庫或者表,或者創建一個新的,它專門用于實時升級資料庫,而不會丟失資料,我們將在本教程的后續部分中更深入地介紹它們,但是現在,請記住進行模型更改的三步指南:

  • 更改你的模型(在 models.py 中),
  • 運行 python manage.py makemigrations 來創建這些更改的遷移
  • 運行 python manage.py migrate 將這些更改應用于資料庫,

Django有單獨的命令來制作和應用遷移的原因是因為您可以提交遷移到版本控制系統并將其發送到您的應用程式; 它們不僅可以使您的開發更容易,而且還可以被其他開發人員和生產中使用,

請閱讀 django-admin檔案,了解有關 manage.py 可以執行的操作的完整資訊,


玩轉API

現在,我們一起進入互動式的Python shell,并使用Django提供的免費API,要呼叫Python shell,請使用一下命令:

python manage.py shell

我們沒有簡單的輸入python而是使用這個命令,因為manage.py設定了DJANGO_SETTINGS_MODULE環境變數,這給了Django提供了你的mysite/settings.py檔案的Python匯入路徑,

繞過manage.py
如果你不想用manage.py也沒問題, 只要將DJANGO_SETTINGS_MODULE
環境變數設定給mysite.settings,打開一個普通的python shell,然后設定Django:
>>>import django
>>>django.setup()

如果這引發了一個AttributeError,你也許用的Django版本不是1.11,請更換不同版本的教程或者升級你的Django,

你必須在manage.py所在的目錄下運行Python,或者保證目錄在Python路徑上,import mysite才能正常作業,

更多相關資訊,請參考django-admin documentation,

進入了shell后,我們來看看database API:

>>> from polls.models import Question, Choice # Import the model classes we just wrote.

# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>

# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.
>>> q.save()

# Now it has an ID. Note that this might say "1L" instead of "1", depending
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
>>> q.id
1

# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object>]>

等一下!<>完全是一個沒有任何幫助的表達,讓我們編輯問題模型(在polls/models.py檔案中)來解決這個問題,然后添加__str__()方法到Question和Choice,

polls/models.py
from django.db import models
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible # only if you need to support Python 2
class Question(models.Model): def __str__(self): return self.question_text

@python_2_unicode_compatible # only if you need to support Python 2
class Choice(models.Model): def __str__(self): return self.choice_text

__str__()方法的添加是很重要的,不光是為了你自己處理互動提示的方便,也是因為物件的展示是通過Django的自動生成admin的,

注意這些都是普通Python方法,現在我們添加一個自定義方法,為了演示使用,

polls/models.py
import datetime

from django.db import models
from django.utils import timezone

class Question(models.Model): def was_published_recently(self): return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

請注意,添加import datetime和django.utils import timezone可以分別在django.utils.timezone中參考Python的標準datetime模塊和Django的時區相關實用程式,如果您不熟悉Python中的時區處理,您可以在時區檔案.中了解更多資訊,

保存這些更改并通過再次運行python manage.py shell啟動一個新的Python shell:

>>> from polls.models import Question, Choice

# Make sure our __str__() addition worked.
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>

# Get the question that was published this year.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>

# Request an ID that doesn't exist, this will raise an exception.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.

# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
>>> Question.objects.get(pk=1)
<Question: What's up?>

# Make sure our custom method worked.
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True

# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
>>> q = Question.objects.get(pk=1)

# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
<QuerySet []>

# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice objects have API access to their related Question objects.
>>> c.question
<Question: What's up?>

# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3

# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

# Let's delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()

有關模型關系的更多資訊,請參閱訪問 相關檔案. 有關如何使用雙下劃線通過API執行欄位查找的更多資訊,請參閱 Field lookups. 有關資料庫API的完整詳細資訊,請參閱我們的 Database API reference.


Django Admin介紹

"Django的哲學"小課堂
Django管理站點是為你的員工或者客戶的簡單的添加,更改,洗掉這些繁瑣作業而設計的,Django管理站點會完全自動生成模型的管理站,

Django當年創建于新聞編輯室,為內容管理而生的,“內容發布者”和“公共”網站之間的界限非常明確,網站管理人員使用該系統添加新聞故事,事件,體育比分等,該內容顯示在公共站點上, Django解決了為站點管理員創建統一界面來編輯內容的問題,

這個管理站點不打算由網站訪問者使用,這是網站經理,

創建一個管理員用戶

首先,我們需要創建一個用戶來登錄管理站點,使用下面的命令:
python manage.py createsuperuser
輸入你想要的用戶名
Username: admin
輸入郵箱地址
Email address: [email protected]
最后輸入你的密碼兩次,
Password: **********
Password (again): *********
Superuser created successfully.

開啟你的開發服務器

django管理站點會自動啟動,我們只要啟動開發服務器就可以來一起探索它了,
使用python manage.py runserver開啟服務器,
現在打開一個瀏覽器,并且去/admin/-例如http://127.0.0.1:8000/admin/你應該會看到Django administration的登錄界面,

進入admin管理站點,
總結:很多人學Python程序中會遇到各種煩惱問題,沒有人幫答疑容易放棄,為此小編建了個Python全堆疊免費答疑.裙 :七衣衣九起起巴而五(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!

本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,

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

標籤:Python

上一篇:python框架Django實戰商城專案之工程搭建

下一篇:請解釋python面向物件中的繼承

標籤雲
其他(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