主頁 > 後端開發 > Django學習筆記

Django學習筆記

2023-06-18 07:32:06 後端開發

1.常用命令

創建專案:django-admin startproject 專案名

創建APP(進入工程目錄):python manage.py startapp 網站名

創建庫表(進入工程目錄):python manage.py makemigrations

執行庫表建立(進入工程目錄):python manage.py migrate

啟動運動:python manage.py runserver

模板渲染嵌入語法:在html可以嵌入后臺語言 區分符號-》> {%命令%} {{變數}}

2.撰寫setting

在INSTALLED_APPS里添加APP的目錄名進去

改語言 LANGUAGE_CODE = 'zh-hans'

3.在APP目錄創建templates檔案夾

渲染檔案,用于存放html檔案

4.撰寫APP下的views

def index(request):
    return render(request,'index.html')

5.撰寫專案urls(路由)

from myblog import views #匯入views
path('',views.index) #路由頁面

#path轉換器:
int:<int:page>
str:<str:name>
slug:<slug:xxx>  #匹配帶符號的文本
path:<path:xxx>  #匹配地址包括/
    
#name命名
#模板中使用:{% url 'name' %}

#url反向決議
path('index',views.index,name='index_name') #路由頁面
{% url 'name' %}
{% url 'name' '引數值1' '引數值2' %}
{% url 'name' age='引數值1' name='引數值2' %} #命名傳參

6.在專案init下配置Mysql

import pymysql
pymysql.install_as_MySQLdb()

7.setting中配置MySQL

DATABASES = {
 'default': {
  'ENGINE': 'django.db.backends.mysql', # 資料庫引擎
  'NAME': 'django_mysql', # 資料庫名
  'USER': 'root', # 賬號
  'PASSWORD': 'root', # 密碼
  'HOST': '127.0.0.1', # HOST
  'POST': 3306, # 埠
 
 }
}

8.models.py模板

class Student(models.Model):
 """
 創建如下幾個表的欄位
 """
 # 學號 primary_key=True: 該欄位為主鍵
 studentNum = models.CharField('學號', primary_key=True, max_length=15)
 # 姓名 字串 最大長度20
 name = models.CharField('姓名', max_length=20)
 # 年齡 整數 null=False, 表示該欄位不能為空
 age = models.IntegerField('年齡', null=False)
 # 性別 布爾型別 默認True: 男生 False:女生
 sex = models.BooleanField('性別', default=True)
 # 手機 unique=True 該欄位唯一
 mobile = models.CharField('手機', unique=True, max_length=15)
 # 創建時間 auto_now_add:只有在新增的時候才會生效
 createTime = models.DateTimeField(auto_now_add=True)
 # 修改時間 auto_now: 添加和修改都會改變時間
 modifyTime = models.DateTimeField(auto_now=True)
 
 # 指定表名 不指定默認APP名字——類名(app_demo_Student)
 class Meta:
	db_table = 'student' #表名
	verbose_name = '學生'  # 在admin站點中顯示的名稱
    verbose_name_plural = verbose_name  # 顯示的復數名稱
 def __str__(self):
	"""定義每個資料物件的顯示資訊"""
	return self.name
#定義英雄模型類HeroInfo
class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    hname = models.CharField(max_length=20, verbose_name='名稱') 
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性別')  
    hcomment = models.CharField(max_length=200, null=True, verbose_name='描述資訊') 
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='圖書')  # 外鍵
    is_delete = models.BooleanField(default=False, verbose_name='邏輯洗掉')

    class Meta:
        db_table = 'tb_heros'
        verbose_name = '英雄'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.hname

資料庫表名:模型類如果未指明表名,Django默認以 小寫app應用名_小寫模型類名 為資料庫表名,

可通過db_table 指明資料庫表名,

9.資料庫的增刪改查

查詢資料

Student.objects.all() #獲取表中全部資料
Student.objects.all().order_by('-id') #id倒序
Student.objects.filter(name='tom1') #過濾查詢
Student.objects.get(name='tom1') #獲取一條資料,沒有就報錯
Student.objects.count() #查詢結果數量

Student.objects.values('colums') # 只回傳指定欄位,字典
Student.objects.values_list('colums') # 只回傳指定欄位,元組

過濾查詢

實作SQL中的where功能,包括

  • filter 過濾出多個結果
  • exclude 排除掉符合條件剩下的結果
  • get 過濾單一結果

1)相等

exact:表示判等,

例:查詢編號為3的圖書,

BookInfo.objects.filter(id__exact=3)
# 可簡寫為:
BookInfo.objects.filter(id=3)

2)模糊查詢

contains:是否包含,

說明:如果要包含%無需轉義,直接寫即可,

例:查詢書名包含’游’的圖書,

BookInfo.objects.filter(btitle__contains='游')

startswith、endswith:以指定值開頭或結尾,
例:查詢書名以’記’結尾的圖書

BookInfo.objects.filter(btitle__endswith='記')

以上運算子都區分大小寫,在這些運算子前加上i表示不區分大小寫,如iexact、icontains、istartswith、iendswith.

3) 空查詢

isnull:是否為null,

例:查詢書名不為空的圖書,

BookInfo.objects.filter(btitle__isnull=False)

4) 范圍查詢

in:是否包含在范圍內,

例:查詢編號為1或3或5的圖書

BookInfo.objects.filter(id__in=[1, 3, 5])

5)比較查詢

gt :大于 (greater then)
gte :大于等于 (greater then equal)
lt :小于 (less then)
lte :小于等于 (less then equal)
例:查詢編號大于3的圖書

BookInfo.objects.filter(id__gt=3)

不等于的運算子,使用exclude()過濾器,

例:查詢編號不等于3的圖書

BookInfo.objects.exclude(id=3)

6)日期查詢

year、month、day、week_day、hour、minute、second:對日期時間型別的屬性進行運算,

例:查詢1980年發表的圖書,

BookInfo.objects.filter(bpub_date__year=1980)

例:查詢1980年1月1日后發表的圖書,

BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))

F物件

之前的查詢都是物件的屬性與常量值比較,兩個屬性怎么比較呢? 答:使用F物件,被定義在django.db.models中,

語法如下:

F(屬性名)
例:查詢閱讀量大于等于評論量的圖書,

from django.db.models import F
BookInfo.objects.filter(bread__gte=F('bcomment'))

可以在F物件上使用算數運算,

例:查詢閱讀量大于2倍評論量的圖書,

BookInfo.objects.filter(bread__gt=F('bcomment') * 2)

聚合函式

使用aggregate()過濾器呼叫聚合函式,聚合函式包括:Avg(平均),Count(數量),Max(最大),Min(最小),Sum(求和),被定義在django.db.models中,

例:查詢圖書的總閱讀量,

from django.db.models import Sum
BookInfo.objects.aggregate(Sum('bread'))
# 注意aggregate的回傳值是一個字典型別

排序

使用order_by對結果進行排序

BookInfo.objects.all().order_by('bread')  # 升序
BookInfo.objects.all().order_by('-bread')  # 降序

增加資料

create方式插入

通過 模型類.objects.create()保存,

HeroInfo.objects.create(
    hname='沙悟凈',
    hgender=0,
    hbook=book
)

save方式插入

from app_demo.models import Student
import random
"""
插入測驗資料
"""
def insert(request):
 # 隨機整數 作為學號
 for i in range(0, 5):
  studentNum = int(random.uniform(0, 1) * 10000000000)
  # 從models檔案中獲取student物件
  student = Student()
  # 給物件賦值
  student.studentNum = studentNum
  student.name = 'tom' + str(i)
  student.age = 15
  student.sex = random.choice([True, False])
  student.mobile = int(random.uniform(0, 1) * 10000000000)
  # 插入資料
  student.save()
 
 return HttpResponse('資料插入完畢')
from datetime import date
book = BookInfo(
    btitle='西游記',
    bput_date=date(1988,1,1),
    bread=10,
    bcomment=10
)
book.save()

修改資料

def modify(request, studentNum):
 # 通過學號獲取student物件
 student = Student.objects.get(studentNum=studentNum)
 # 設定student的name為jack
 student.name = 'jack'
 student.save()
 return HttpResponse('修改成功.')

save

修改模型類物件的屬性,然后執行save()方法

hero = HeroInfo.objects.get(hname='豬八戒')
hero.hname = '豬悟能'
hero.save()

update
使用模型類.objects.filter().update(),會回傳受影響的行數

HeroInfo.objects.filter(hname='沙悟凈').update(hname='沙僧')

洗掉資料

def delete(request, studentNum):
 student = Student.objects.get(studentNum=studentNum)
 student.delete()
 return HttpResponse('洗掉成功.')

10.將models轉換為json

from django.core import serializers
tools = Tools.objects.all()
json_data = https://www.cnblogs.com/pigke/p/serializers.serialize('json', tools)
json_data = https://www.cnblogs.com/pigke/p/json.loads(json_data)

11.CORS跨域配置

下載corsheader

pip install django-cors-headers

修改setting.py中配置

在INSTALLED_APPS中增加corsheaders

INSTALLED_APPS = [
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'corsheaders',#這是我們的主角,放在新建的其他專案之前
     'app01',
 ]
 MIDDLEWARE = [
     'django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'corsheaders.middleware.CorsMiddleware', #注意順序,必須放在這兒
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
 ]

setting 里再進行這樣的配置

CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOW_CREDENTIALS = True
#允許所有的請求頭
CORS_ALLOW_HEADERS = ('*')

12.模板標簽

if:
	{% if %}
	{% endif %}
for: 
	{% for i in list %}
	{% empty %}
	{% endfor %}

for內置變數-forloop:

變數 描述
forloop.counter 回圈的當前迭代(從1開始索引)
forloop.counter0 回圈的當前迭代(從0開始索引)
forloop.revcounter counter值的倒序
forloop.revcounter0 counter0值的倒序
forloop.first 如果是第一次回圈,則為真
forloop.last 如果是最后一次回圈,則為真
forloop.parenloop 當嵌套回圈,parentloop表示外層回圈

模板過濾器

語法:{{ 變數 | 過濾器1:'引數值1' | 過濾器2:'引數值2' ...}}

常用過濾器

過濾器 說明
lower 將字串轉換為全部小寫
upper 將字串轉會為大寫形式
safe 默認不對變數內的字串進行html轉義
add:"n" 將value的值增加n
truncatechars:'n' 如果字串字符多于指定的字符數量,那么會被截斷,截斷的字串將以可翻譯的省略號序列(“.….")結尾,

模板繼承

父模板:
    {% block block_name %}
    {% endblock %}

子模板:
    開頭使用:{% extends %}
    {% block block_name %}  #block_name與父模板對應
    {% endblock %}

簡化變數

{& with val.xxx as i &}
{% endwith %}

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

標籤:Python

上一篇:Java 注釋及Dos命令

下一篇:返回列表

標籤雲
其他(161178) Python(38237) JavaScript(25504) Java(18245) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7256) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4601) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1941) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(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
最新发布
  • Django學習筆記

    ## 1.常用命令 `創建專案:django-admin startproject 專案名` `創建APP(進入工程目錄):python manage.py startapp 網站名` `創建庫表(進入工程目錄):python manage.py makemigrations` `執行庫表建立(進入 ......

    uj5u.com 2023-06-18 07:32:06 more
  • 09. centos使用docker方式安裝mysql

    ## 一、創建宿主機物理路徑 新建/mydata/mysql/data、log和conf三個檔案夾 ```bash mkdir -p /mnt/mysql/log mkdir -p /mnt/mysql/data mkdir -p /mnt/mysql/config ``` 或者 ```bash m ......

    uj5u.com 2023-06-18 07:31:43 more
  • Java 注釋及Dos命令

    # Java 注釋、絕對路徑、相對路徑、基本Dos命令 # 1. Java的三種注釋方式 ## 注釋能增加代碼的可讀性,習慣寫注釋能提升我們撰寫代碼的能力 > ### 單行注釋:用//注釋一些代碼提示 > > ### 多行注釋:以/*為開頭 以 */為結束 > > ### 檔案注釋:/* > > # ......

    uj5u.com 2023-06-18 07:30:01 more
  • Nginx 學習筆記

    ## 概述 Nginx 是一個高性能的 HTTP 和反向代理服務器,特點是占用記憶體少,并發能力強 #### 1. 正向代理 如果把局域網外的 Internet 想象成一個巨大的資源庫,則局域網中的客戶端要訪問 Internet,需要通過代理服務器來訪問,這種訪問就稱為正向代理 ![](https:/ ......

    uj5u.com 2023-06-18 07:24:46 more
  • C++面試八股文:什么是左值,什么是右值?

    某日二師兄參加XXX科技公司的C++工程師開發崗位第16面: > 面試官:什么是左值,什么是右值? > > 二師兄:簡單來說,左值就是可以使用`&`符號取地址的值,而右值一般不可以使用`&`符號取地址。 ```c++ int a = 42; //a是左值,可以&a int* p = &a; int* ......

    uj5u.com 2023-06-17 07:27:40 more
  • 01. 組建知識星球服務體系

    ## 一、初衷: 因為想要進行各種技術點的訓練和學習,開發中需要使用各種各樣的開源技術框架,苦于沒有基礎服務支撐,所以想要建立一個專門的服務支撐系統,每年購買的云服務器配置底下,安裝一個Jenkins都跑不起來,所以自己購買了一個物理主機,記憶體加裝到`32G`,搭建自己的私人技術知識星球。 搭建一套 ......

    uj5u.com 2023-06-17 07:27:36 more
  • [ARM 匯編]進階篇—存盤訪問指令—2.3.3 堆疊操作指令

    堆疊是一種特殊的資料結構,其特點是后進先出(LIFO,Last In First Out)。在 ARM 匯編中,堆疊通常用于保存函式呼叫時的暫存器狀態、區域變數和回傳地址等。本節將詳細介紹 ARM 匯編中的堆疊操作指令,并通過實體幫助你更好地理解和掌握這些指令。 1. 推入堆疊(PUSH) PUSH 指令用 ......

    uj5u.com 2023-06-17 07:27:30 more
  • Scala方法和函式

    - 方法和函式的作用幾乎是一樣的,但是函式在使用的程序中更加靈活和多樣化 - scala中函式是頭等公民 . 可以作為方法的回傳值和引數使用 - scala是一個集面向物件和面向函式于一身的編程語言 , 靈活的函式是函式式編程的一種體現 - 函式的使用使代碼更加簡潔和靈活 # 函式 scala中一種 ......

    uj5u.com 2023-06-17 07:27:26 more
  • lua中 . 和 : 的區別

    > 最近專案中使用到了 lua,因為之前沒怎么接觸過,特此記錄下自己在學習程序中疑惑的地方。 在使用`lua` 進行編碼的程序中,我們經常會使用到`.`和`:`,但是對于剛開始接觸`lua`的我來說,對這兩者的使用還是感到時常感到疑惑,接下來我們一起看看幾個例子,來感受兩者的區別。如果發現文中錯誤的 ......

    uj5u.com 2023-06-17 07:27:22 more
  • Go Redis 管道和事務之 go-redis

    # Go Redis 管道和事務之 go-redis ## [Go Redis 管道和事務官方檔案介紹](https://redis.uptrace.dev/zh/guide/go-redis-pipelines.html) Redis pipelines(管道) 允許一次性發送多個命令來提高性能, ......

    uj5u.com 2023-06-17 07:27:18 more