主頁 > 後端開發 > python 學習筆記(十二)--Django 基本知識點小結

python 學習筆記(十二)--Django 基本知識點小結

2022-09-13 06:45:41 後端開發

1.Django中的相應物件

建構式格式:

HttpResponse(content=回應體,content_type=回應體資料型別,status=狀態碼)

作用:

向客戶端瀏覽器回傳相應,同時攜帶回應體內容,

引數:

--content:表示回傳的內容,

--status_code:回傳的HTTP回應狀態碼(默認為200),

--content_type:指定回傳資料的MIME型別(默認為“text/html”),瀏覽器會根據這個屬性,來顯示資料,如果是text/html,那么就會決議這個字串,如果是text/plain,那么就會顯示一個純文本,

回應頭中常見的Content-Type:

-- text/html :默認的,html檔案

--text/plain:純文本

--text/css:css檔案

--text/javascript:js檔案

--multipart/form-data:檔案提交

--application/json:json傳輸

--application/xml:xml檔案

2.GET處理

request.GET['引數名']  ##QueryDict

request.GET.get('引數名','默認值')

request.GET.getlist('引數名')

3.模板

(1)模板是可以根據字典資料動態變化的html網頁,

(2)模板可以根據視圖中傳遞的字典資料動態生成相應的HTML網頁,

(3)創建模板檔案夾,一般位于<專案名>/templates

(4)在settings.py中,TEMPLATES的配置項:

"BACKEND":指定模板的引擎,

"DIRS":模板的搜索目錄(可以是一個或者多個)

"APP_DIRS":是否要在應用中的templates檔案夾中搜索模板檔案,

OPTIONS":有關模板的選項,

4.模板的加載

方案1 

通過loader獲取模板,通過HttpResponse進行回應,注意是在視圖函式中實作,

例如

from django.template import loader
#1 通過loader加載模板
t = loader.get_template("模板檔案名")
#2 將t轉換成HTML字串
html = t.render(字典資料)
#3 用回應物件將轉化的字串內容回傳給瀏覽器
return HttpResponse(html)

方案2,也是常用的方法

使用render(()直接加載并相應模板,注意是在視圖函式中實作,

from django.shortcuts import render, get_object_or_404
return render(request, "模板檔案名", 字典資料)

5.視圖層與模板層之間的互動

(1).視圖函式中,可以將Python變數封裝到字典中,然后傳遞大模板,

例如

context = {
        "active_user": active_user,
        "group_list": group_list,
        "enable_backup_switch": 
        config.get("enable_backup_switch"),
    }
return render(request, "XXXX.html", context)

(2).模板中,我們可以用{{ 變數名 }}的語法,呼叫視圖傳進來的變數,

 6.模板的變數

(1)能傳遞到模板中的資料型別

str --字串  int ---整型

list --陣列  tuple --元組

dict--字典  func--方法

obj --類實體化的物件

(2)在模板中使用變數語法

--{{ 變數名 }}

--{{ 變數名.index }}  ---例如傳遞過來的變數是list

--{{ 變數名.key }} ---例如傳遞過來的變數是字典

--{{ 物件.方法 }}

--{{ 函式名 }}

7.模板過濾器

定義:在變數輸出時對變數的值進行處理
作用:可以通過使用 過濾器 來改變變數的輸出顯示
語法:
{{ 變數名 | 過濾器1:可選引數1 | 過濾器2:可選引數2 ... }}

8.模板的繼承

模板繼承可以使父模板的內容重用,子模版直接繼承父模板的全部內容并可以覆寫父模板中相應的塊,

 語法--父模板中:

(1)定義父模板中的塊block標簽;

(2)標識出哪些在子模塊中是允許被修改的;

(3)block標簽:在父模板中定義,可以在子模版中覆寫,

語法--子模版中:

(1)繼承模板extends 標簽(寫在模板檔案的第一行)

例如 {% extends "base.html" %}

(2)子模版 重寫父模板中的內容塊

{% block block_name %}

子模版塊用來覆寫父模板塊中 block_name 塊的內容

{% endblock block_name %}

9.代碼中URL出現的位置

(1)模板【html】中的url

A.<a href='https://www.cnblogs.com/xuliuzai/archive/2022/09/12/url'>超鏈接</a>

點擊后,頁面跳轉至url

B.<from action = 'url' method = 'post'>

from 表單中的資料,用post方法提交至url

(2)視圖函式中--302跳轉,HttpResponseRedirect('url')

將用戶地址欄中的地址跳轉到url,

10.url反向決議

url反向決議是指在視圖或模板中,用path定義的名稱來動態查找或者計算出相應的路由,
path函式的語法
path(route,views,name="別名")
例如:
path('page',views.page_vies,name="page_url")
根據path中的'name='關鍵字傳參給url確定了個唯一確定的名字,在模板
或視圖中,可以通過這個名字反向推斷出此url資訊,
模板中使用,通過url標簽實作地址的方向決議:
{% url '別名'%}
{% url '別名' '引數值1' '引數值2' %}

 在視圖函式中使用,可呼叫django中的reverse方法進行反向決議,

from django.urls import reverse

reverse('別名',args=[],kwargs={})

11.靜態檔案配置

* 靜態檔案配置位于settings.py中,

配置靜態檔案的訪問路徑【配置默認存在】

# Static files (CSS, JavaScript, Images)
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "common/static"),
]
STATICFILES_STORAGE = "common.storage.ForgivingManifestStaticFilesStorage"

說明:(1)指定訪問靜態檔案時是需要通過/static/xxx或http://127.0.0.1:80/static/xxx.

[xxx表示具體的靜態資源位置];

(2)STATICFILES_DIRS ---保存的是靜態檔案在服務器端的存盤位置,

 12.Django中的應用

應用在Django專案中是一個獨立的業務模塊,可以包含自己的路由、視圖、模板、模型,

 (1)創建應用

step 1 用manage.py 中的子命令startapp 創建應用檔案夾

python manage.py startapp XXXX

step 2 在settings.py 的INSTALLED_APPS = ()串列中配置安裝此應用,

13.分布式路由

Django中,主路由組態檔(urls.py)可以不處理用戶具體路由,主路由組態檔可以做請求的分發(分布式請求處理),具體的請求可以由各自的應用來進行處理,

配置分布式路由

step 1 --主路由中呼叫include函式

匯入的模塊

from django.urls import include, path

語法:include('app名字.url 模塊名')

作用:用于將當前路由轉到各個應用的路由組態檔的urlpatterns進行分布式處理,

例如 archery專案中的分布式配置,

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", include(("sql_api.urls", "sql_api"), namespace="sql_api")),
    path("", include(("sql.urls", "sql"), namespace="sql")),
]

14 應用下的模板

應用內部可以配置模板目錄

(1)應用下手動創建templates檔案夾;

(2)settings.py中 開啟 應用模板功能,TEMPLATES 配置項中的"APP_DIRS": True 即可,

應用下templates 和外層templates都存在是,django的查找模板規則:

(1)優先查找外層templates目錄下的模板;

(2)按# Application definition 中 INSTALLED_APPS 配置下的 應用順序,逐層查找,

15 什么是模型

模型是一個Python類,它是由django.db.models.Model派生出的子類,

一個模型類代表資料庫中的一張資料表,

模型類中每一個類屬性都代表資料庫中的一個欄位,

模型是資料互動的介面,是表示和操作資料庫的方法和方式,

16.ORM框架

定義: ORM(Object Relational Mapping)即物件關系映射,它是一種程式技術,它允許你使用類和物件對資料庫進行操作,從而避免通過SQL陳述句操作資料庫,

作用:

(1)建立模型類和表之間的對應關系,允許我們通過面向物件的方式來操作資料庫,

(2)根據設計的模型類生成資料庫中的表,

(3)通過簡單的配置就可以進行資料庫的部署或DB型別的切換,

有點:

(1)只需要面向物件編程,不需要面向資料庫撰寫代碼,

對資料庫的操作都轉化成對類屬性和方法的操作;不用撰寫各種資料庫的SQL陳述句,

(2)實作了資料庫模型與資料庫的解耦,屏蔽了不同資料庫操作上的差異,

不再關注于用的是MySQL、Oracle,,,等資料庫的內部細節;通過簡單的配置就可以輕松更換資料庫,而不需要修改代碼,

 缺點:

對于復雜業務,使用成本較高;

根據物件的操作轉換成SQL陳述句,根據查詢的結果轉換成物件,在映射程序中有性能損失,

17.模型--資料庫遷移

遷移是Django同步您對資料庫所做的更改(添加欄位、洗掉模型等)到您的資料庫模型的方式,

(1)生成遷移檔案,執行  python manage.py makemigrations ,將應用下的models.py檔案生成一個中間檔案,并保存在migrations檔案夾中,

(2)執行遷移腳本程式,--執行 python manage.py migrate ,執行遷移程式實作遷移,將每個應用下的makemigrations目錄中的中間檔案同步回資料庫,

18. 模型---欄位型別

常見欄位型別相關說明補充如下:

欄位型別 編程語言 資料庫語言 備注
BooleanField() 使用True或False來表示值,

tinyint(1)

在資料庫中,使用1或0來表示具體的值,
NullBooleanField()     可以為空的布林值,
CharField(Field)   varchar() 必須提供max_length引數, max_length表示字符長度
DateField() 表示日期 date

引數:

auto_now:每次保存物件時,自動設定該欄位為當前時間(取值:True/False);

auto_now_add:當物件第一次被創建時自動設定當前時間(取值:True/False);

default:設定當前時間(取值:字串格式時間,如:'2019-10-15');

以上三個引數只能多選一,

DateTimeField() 表示日期和時間 datetime(6)

日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],

引數同DateField.

DecimalField() 使用小數表示該列的值

使用小數

decimal(x,y)

 

引數:

max_digits,小數總長度【位數總數】,包括小數點后的位數,該值必須大于等于decimal_places;

decimal_places,小數位長度【小數點后的數字數量】,

FloatField() 浮點型 double 編程語言中和資料庫中都使用小數表示值,
EmailField() 字串型別 varchar

Django Admin以及ModelForm中提供驗證機制,

編程語言和資料庫中使用字串,

IPAddressField() 字串型別   Django Admin以及ModelForm中提供驗證 IPV4 機制
GenericIPAddressField() 字串型別  

Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6,

引數:

protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6";

unpack_ipv4, 如果指定為True,則輸入::ffff:192.0.2.1時候,可決議為192.0.2.1,開啟刺功能,需要protocol="both"

IntegerField() 整數列 int

編程語言和資料庫中使用整數, 整數列(有符號的) -2147483648 ~ 2147483647

SmallIntegerField()     小整數 -32768 ~ 32767
BigIntegerField()     長整型(有符號的) -9223372036854775808 ~ 9223372036854775807
ImageField() 字串 varchar(100)

在資料庫中為了保存圖片的路徑【路徑保存在資料庫中,檔案上傳到指定目錄】,

編程語言和資料庫中使用字串,

引數:

upload_to = "" 上傳檔案的保存路徑;

storage = None  存盤組件,默認django.core.files.storage.FileSystemStorage;

width_field=None,上傳圖片的高度保存的資料庫欄位名(字串);

height_field=None 上傳圖片的寬度保存的資料庫欄位名(字串),

TextField() 文本型別 longtext

表示不定長的字符資料,

19. 模型 --欄位選項

欄位選項時指創建列時指定的額外的資訊,允許出現多個欄位選項,多個選項之間用【,】隔開,

欄位選項 作用描述
primary_key

資料庫中欄位是否為主鍵(primary_key=True),

如果設定為True,表示該列為主鍵,如果指定一個欄位為主鍵,則此表不會再自動創建id欄位,

blank

 Admin中是否允許用戶輸入為空 表單提交時可以為空,

設定為True時,欄位可以為空;設定為False時,欄位則必須填寫,

null 

資料庫中欄位是否可以為空(null=True),

如果設定為True,表示該列值允許為空,默認為False,如果此選項為False,建議加入default選項來設定默認值,

default

資料庫中欄位的默認值,

設定所在列默認值,如果欄位選項null=False,建議添加此項,

db_index 資料庫中欄位是否可以建立索引(db_index=True),如果為True,表示為該列增加索引,
unique

表中欄位是否可以建立唯一索引(unique=True),如果設定為True,表示該欄位對應的資料在表中必須是唯一的(不能重復出現的),

db_column  欄位的列名,指定列的名稱,如果不指定的話則采用屬性名稱作為列名,
verbose_name Admin中顯示的欄位名稱,設定此欄位在admin界面上的顯示名稱,
choices Admin中顯示選擇框的內容,用不變動的資料放在記憶體中從而避免跨表操作,
error_messages 自定義錯誤資訊(字典型別),從而定制想要顯示的錯誤資訊,
validators 自定義錯誤驗證(串列型別),從而定制想要的驗證規則,

20 模型--Meta類

使用內部Meta類來給模型賦予屬性,Meta類下有很多內建的類屬性,可以對模型類做一些控制,

 部分屬性說明如下:

屬性 屬性說明
managed 因為Django會自己主動依據模型類生成映射的資料庫表,假設你不希望Django這么做,能夠把managed的值設定為False,

db_table

db_table是用于指定自己定義資料庫表名的,Django有一套默認的依照一定規則生成資料模型相應的資料庫表名,假設你想使用自己定義的表名,就通過這個屬性指定,
verbose_name 給模型類起一個更可讀的名字,
verbose_name_plural 這個選項是指定,模型的復數形式是什么,

db_tablespace

有些資料庫有資料庫表空間,比方Oracle,通過db_tablespace來指定這個模型相應的資料庫表放在哪個資料庫表空間,
unique_together unique_together這個選項用于:當你須要通過兩個欄位保持唯一性時使用,

abstract

這個屬性是定義當前的模型類是不是一個抽象類,所謂抽象類是不會相應資料庫表的,一般我們用它來歸納一些公共屬性欄位,然后繼承它的子類能夠繼承這些欄位,

permissions

 permissions主要是為了在Django Admin管理模塊下使用的,設定這個屬性能夠讓指定的方法權限描寫敘述更清晰可讀,
ordering  這個欄位是告訴Django模型物件回傳的記錄結果集是依照哪個欄位排序的,

 在此,補充一個model的知識點,與Meta無關,就是__str__(self)方法,可以在模型類中定義__str__方法,自定義QuerySet中的輸出格式,這樣可視化程度更高,方便除錯,

21.ORM--操作

基本操作包括增刪改查操作,即CRUD操作,

CRUD是指在做計算處理時的增加(Create)、讀取查詢(Read)、更新(Update)和洗掉(Delete),

ORM CRUD 核心--> 模型類.管理器物件,

每個繼承自models.Model的模型類,都會有一個objects物件被同樣繼承下來,這個 物件叫管理器物件,

資料庫的增刪改查可以通過模型的管理器實作,

class MyModel(models.Model):
      ....
MyModel.objects.create(...)  ##objects 是管理器物件

創建資料

Django ORM 使用一種直觀的方式把資料庫表中的資料表示成Python物件,

創建資料中每一條記錄就是創建一個資料物件,

方案1

MyModel.objects.create(屬性1=值1,屬性2=值2)

成功:回傳創建好的物體物件;失敗:拋出例外,

 方案2

創建MyModel實體物件,并呼叫save()進行保存,

obj = MyModel(屬性=值,屬性=值)

obj.屬性=值

obj.save()

22.查詢簡介

資料庫的查詢需要使用管理器物件進行,通過MyModel.objects管理方法呼叫查詢方法,

查詢方法 用法 作用 等同于SQL 回傳值 簡單舉例
all() MyModel.objects.all() 查詢MyModel物體中所有所有的資料, select*from table  QuerySet 容器物件[類似陣列],內部存放MyModel實體

books =Book.objects.all()

for book in books:

  print("書名",book.title,'出版社:' book.pub)

 values(’列1‘,’列2‘)  MyModel.objests.values(...)  查詢部分列的資料并回傳  select列1,列2 from table

 QuerySet.回傳查詢結果容器,容器記憶體字典,每個字典代表一條資料,格式為:{’列1‘:值1,’列2‘:值2}

a2=Book.objects.values('title','pub')

for book in a2

  print(book[title])  

 values_list('列1','列2'...)  MyModel.objects.values_list(...)  回傳元組形式的查詢結果  select 列1,列2 from table  QuerySet 容器物件,內部存放’元組‘,會將查詢出來的資料封裝到元組中,再封裝到查詢集合QuerySet中,

a3 = Book.objects.values_list('title','pub') 

for book in a3:

  print(book[0])

 order_by()  MyModel.objects.order_by('-列','列')  與all()方法不同,它會用sql陳述句的order by 子句對查詢結果進行根據指定欄位選擇性的進行排序,    

 默認是按照升序排序,降序排序則需要在列前增加’-‘表示,

可以和其它查詢方法組合使用,

 filter(條件)  MyModel.objects.filter(屬性1=值1,屬性2=值2)  回傳符合此條件的全部的資料集     QuerySet容器物件,內部存放MyModel實體

 當多個屬性在一起時為”與“關系,

books = Book.objects.filter(pub="清華大學出版社")

for book in books:

  print("書名",book.title)

 exclude(條件)  MyMOdel.objects.exclude(條件)  回傳不包含(不符合)此條件的全部的資料集    

 books = models.Book.objects.exclude(pub=”清華大學出版社“,price=50)

for book in books:

  print(book)

 get(條件) MyModel.objects.get(條件)   回傳滿足條件的唯一一條資料    

 該方法只能回傳一條資料,查詢結果多余一條資料則拋出例外--Model.MultipleObjectsReturned例外,查詢結果如果沒有資料則拋出Model.DoesNotExist例外,

23.查詢謂詞

 定義:做更靈活的條件查詢時需要使用查詢謂詞,

說明:每一個查詢謂詞是一個獨立的查詢功能,

查詢謂詞 功能 舉例
__exact 等值匹配

Book.objects.filter(id__exact=1)

##等同于select * from books where id =1

 __contains

 包含指定值.

__startswith:以XXX開始;

__endswith:以XXX結束,

 Author.objects.filter(name__contains='w')

##等同于 select * from author where name like '%w%'

 __gt

 大于指定值;

__gte:大于等于;

__lt:小于

__lte:小于等于

 Author.objects.filter(age__gt=50)

##等同于 select * from author where age>50

 __in  查找資料是否在指定范圍內

 Author.objects.fileter(country__in=['中國','韓國','越南'])

##等同于select * from author where country in ('中國','韓國',越南'')

 __range  查找資料是否在指定的時間范圍內

 Author.objects.filter(age__range=(35,50))

##等同于 select * from author where age between 35 and 50

24 ORM 更新操作

更新單個資料

 修改單個物體的某些欄位的步驟:

step 1. 查

通過get()等到要修改的物體物件;

step 2 改

通過 物件.屬性 的方式 修改資料

step 3 保存

通過物件.save()保存資料

批量更新資料

 直接呼叫QuerySet的update(屬性=值)實作批量修改,

例如

##將id大于3的所有圖書價格定為0元
books =Book.objects.filter(id__gt=3)
books.update(price=0) ##回傳成功執行影響的行數

25.ORM--洗掉操作

單個資料洗掉

步驟

step 1 查找

查詢對應的資料物件

step 2 洗掉

呼叫這個資料物件的delete()方法進行洗掉,

try:
  auth=Author.objects.get(id=1)
  auth.delete()
except:
  print(洗掉失敗)

批量洗掉

step 1 查找

查詢結果集中滿足條件的全部QuerySet查詢集合物件

step 2 呼叫查詢集合物件的delete()方法實作洗掉

##洗掉全部作者中,年齡大于65的全部資訊
auths = Author.objects.filter(age__gt=65)
auths.delete()

26 F物件

定義:一個F物件代表資料庫中某條記錄的欄位的資訊,

作用:通常是對資料庫中的欄位值在不獲取的情況下進行操作,用于類屬性(欄位)之間的比較,

語法:

from django.db.models import F
F('列名')

 示例:

更新Book實體中所有的零售價漲10元,

如果不用F物件,如下:

books = Book.objects.all()
for book in books:
  book.market_price=book.marget_price+10
  book.save()

使用F物件,可以簡化如下:

Book.objects.all().update(market_price=F('market_price')+10)

實體2 

對資料庫中兩個欄位的值進行比較,例如,列出那些書的零售價高于定價?

books = Book.objects.filter(market_price__gt=F('price'))
for book in books:
  print(book.title,'定價:',book.price,'現價:',book.market_price)

 27.Q物件

當在獲取查詢結果集,使用復雜的邏輯或|、邏輯非~等操作時,可以借助于Q物件進行操作,

如,想找出定價低于20元或中國機械出版社的全部書,可以寫成:

Book.objects.filter(Q(price__lt=20)|Q(pub="中國機械出版社"))

Q物件在資料包 django.db.models中,需要先匯入再使用,

 運算子:

& 與操作

| 或操作

~ 非操作

from django.db.models import Q
Q(條件1)|Q(條件2) ##表示需要 條件1成立或者條件2成立;
Q(條件1)&Q(條件2) ##條件1和條件2同時成立;
Q(條件1)&~Q(條件2) ##條件1成立且條件2不成立,

28.聚合查詢

整表聚合

不帶分組的聚合查詢是指將全部的資料進行集中統計查詢,

 聚合函式需要從django.db.models匯入,常用的聚合函式:Sum、Avg、Count、Max、Min ---【注意:首字母大寫】,

 語法:

MyModel.objects.aggregate(自定義的結果變數名=聚合函式(''))

回傳結果:結果變數名和值組成的字典,格式為:{"結果變數名":值}

分組聚合

分組聚合是指通過計算查詢結果中每一個物件所關聯的物件集合,從而得出總計值值(當然也可以是平均值或總和),即為查詢集的每一項生成集合,

語法:

QuerySet.annotate(自定義結果變數名=聚合函式(''))

回傳值:QuerySet,

簡單來講就是先通過MyModel.objects.values()進行查詢,然后通過.annotate分組,

29.原生資料庫操作

Django也支持之間用sql陳述句對資料庫進行查詢操作,

查詢:使用MyModel.objects.raw()進行資料庫查詢操作,

語法:

MyModel.objects.raw(sql陳述句,拼接引數)

回傳值:RawQuerySet集合物件【只支持基礎操作,比如回圈】

示例:

books = models.Book.objects.raw('select * from bookstore_book')
for book in books:
  print(book)

使用原生陳述句時小心SQL注入,即 用戶通過資料上傳,將惡意的SQL陳述句提交給服務器,從而達到攻擊效果,

30.原生資料庫操作--cursor

可以支持查詢、更新、洗掉,

step 1 匯入cursor所在的包

from django.db import connection

step 2 用創建cursor類的建構式創建cursor物件,再使用cursor物件,為保證在出現例外時能釋放cursor資源,通常使用with陳述句進行創建操作,

from django.db import connection
with connection.cursor() as cur:
  cur.execute('執行SQL陳述句','拼接引數')

31. admin管理后臺

注冊自定義模型類

若要自己定義的模型類也能在/admin后臺管理界面中顯示和管理,需要將自己的類注冊到后臺管理界面,
注冊步驟:
step 1.在應用app中的admin.py中匯入注冊要管理的模型models類,如:
from .models import Book
step 2.呼叫admin.site.register方法進行注冊,如
admin.site.register(自定義模型類)

模型管理器類

作用:為后臺管理界面添加便于操作的新功能,
說明:管理后臺類須繼承自django.contrib.admin里的ModelAdmin類,
使用方法
step 1.在<應用app>/admin.py里定義模型管理類
class xxxxManager(admin.ModelAdmin):
......
step 2 系結注冊模型管理器和模型類

from django.contrib import admin
from .models import *
admin.site.register(YYYY,xxxxmanager) ###系結YYYY模型類與管理器類xxxxManager

類xxxxManager 幾個常用的屬性

list_display = [] ##串列頁顯示那些欄位的列;即去控制那些欄位會顯示在Admind顯示串列中,
list_dispaly_links =[] ##控制list_display中的欄位,那些可以鏈接到修改頁;
list_filter=[] ##添加過濾器;即設定激活Admin修改串列頁面右側欄中的過濾器,
search_fields = [] ##添加搜索框;
list_editable = [] ##添加可在串列頁編輯的欄位,允許在更改串列頁面上直接進行欄位編輯,

 

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

標籤:其他

上一篇:python學習:三目運算子

下一篇:JVM學習 類加載子系統

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