1. 程式人生 > >python學習筆記(89) Django基礎

python學習筆記(89) Django基礎

定義 \n 用戶訪問 html 定義類 install dmi 數據庫 class a

HTTP協議:
1. 瀏覽器往服務端發的叫 請求(request)
請求的消息格式:
請求方法 路徑 HTTP/1.1\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
請求數據

2. 服務端往瀏覽器發的叫 響應(response)
響應的消息格式:
HTTP/1.1 狀態碼 狀態描述符\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
響應正文 <-- html的內容

動態的網頁:
本質上都是字符串的替換
字符串替換發生在什麽地方:
在服務端替換完再返回給瀏覽器!!!

##########################################################

1. web框架的本質:
socket服務端 與 瀏覽器的通信
2. socket服務端功能劃分:
a. 負責與瀏覽器收發消息(socket通信) --> wsgiref/uWsgi/gunicorn...

b. 根據用戶訪問不同的路徑執行不同的函數

c. 從HTML讀取出內容,並且完成字符串的替換 --> jinja2(模板語言)

3. Python中 Web框架的分類:

1. 按上面三個功能劃分:
1. 框架自帶a,b,c --> Tornado
2. 框架自帶b和c,使用第三方的a --> Django
3. 框架自帶b,使用第三方的a和c --> Flask
2. 按另一個維度來劃分:
1. Django --> 大而全(你做一個網站能用到的它都有)
2. 其他 --> Flask 輕量級

命令行創建Django項目:
django-admin startproject mysite

命令行啟動Django項目:

在項目的根目錄下(也就是有manage.py的那個目錄),運行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口啟動
python3 manage.py runserver 端口 --> 在指定的端口啟動
python3 manage.py runserver --> 默認在本機的8000端口啟動

靜態文件(css/js/圖片)
# 靜態文件保存目錄的別名
STATIC_URL = ‘/static/‘

# 所有靜態文件(css/js/圖片)都放在我下面你配置的文件夾中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),

form表單:
1. form不是from,所有獲取用戶輸入的標簽都應該放在form裏面, 並且必須要有name屬性
2. action屬性控制往哪兒提交,method一般都設置成post
3. 提交按鈕必須是type=submit,不能是別的類型

命令行創建app:

在Django項目的根目錄輸入:
python3 manage.py startapp app名字

########################################################

ORM之於SQL就像jQuery之於DOM

1. 什麽是ORM?
是一種編程的方法論(模型), 和語言無關.(其他的語言也有類似的實現.)

2. ORM的本質:
類 ---> 數據表
對象 ---> 數據行
屬性 ---> 字段

按照規定的語法寫,自動翻譯成對應的SQL語句.

3. ORM的功能:
ORM操作數據表
ORM操作數據行

4. Django裏ORM的使用:
1. 手動創建數據庫
2. 在settings.py裏面,配置數據庫的連接信息
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘day62‘,
‘HOST‘: ‘127.0.0.1‘,
‘PORT‘: 3306,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘123456‘,
}
}
3. 在項目/__init__.py告訴Django用pymysql模塊代替MySQLdb來連接MySQL數據庫
import pymysql
pymysql.install_as_MySQLdb()
4. 在app/models.py裏面定義類
# 出版社
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主鍵
# 創建一個varchar(64)的唯一的不為空的字段
name = models.CharField(max_length=64, null=False, unique=True)
5. 執行兩個命令
  1. python3 manage.py makemigrations --> 把models.py裏面的更改記錄到小本本上
  2. python3 manage.py migrate --> 把更改翻譯成SQL語句,去數據庫執行

6.ORM操作:
1. 刪除
  1. 先找到對象,調用對象的.delete()方法
  publisher_obj = models.Publisher.objects.get(id=7)
  publisher_obj.delete()
  或者
  models.Publisher.objects.get(id=7).delete()

2. 修改
  1. 找到對象,通過修改對象的屬性來修改數據庫中指定字段的值,要保存
  publisher_obj = models.Publisher.objects.get(id=7)
  publisher_obj.name = "新的出版社名字"
  publisher_obj.save() --> 把修改提交到數據庫

3. 查詢
  models.UserInfo.objects.all()

4. 增加
  models.UserInfo.objects.create(name="張三")

#######################################################

GET和POST:

1. GET請求和POST請求
都屬於HTTP協議規定的請求方法

  1. GET請求:
    1. GET請求攜帶的數據都拼在了URL上
    2. GET請求攜帶的數據有長度限制 40k
  2. POST請求
    1. form表單提交數據
    2. 上傳文件


2. 什麽時候用GET請求?
  1. 瀏覽器想要得到一個HTML頁面的時候
  2. 搜索引擎查詢關鍵字的時候 www.sogo.com/web/?query=新垣結衣

3. 什麽時候用POST?
  1. 向後端提交數據
    1. 大段的數據
    2. 包含隱私的數據
    3. 上傳文件

4. 實際中GET和POST的應用場景
  1. GET:
    1. 直接在瀏覽器地址欄輸入URL訪問網站
    2. a標簽
2. POST:
  1. 登錄註冊
  2. 修改(新增)大段的數據
  3. 上傳文件

Django後端取值
request.GET --> 大字典
request.GET["name"]/request.GET["id"] --> key不存在就報錯了
request.GET.get("name", "sb") --> 推薦用這個方法取值


class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主鍵
# 創建一個varchar(64)的唯一的不為空的字段
title = models.CharField(max_length=64, null=False, unique=True)
# 和出版社關聯的外鍵字段
publisher = models.ForeignKey(to="Publisher")

出版社

class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16, null=False, unique=True)
book = models.ManyToManyField(to=‘Book‘) # 多對多關聯關系,ORM自動生成第三張表

python學習筆記(89) Django基礎