60-Django基礎

一、Web框架 

1.1 web框架的本質即socket服務端與瀏覽器的通訊

    1. 收發socket消息 --> 按照HTTP協議消息格式去解析消息
    2. 路徑和要執行的函數的對應關係 --> 主要的業務邏輯
    3. 字符串替換 --> 模板(特殊符號 --> 數據)

1.2 一個完整的請求流程

    1. 啓動服務端,等待客戶端(用戶的瀏覽器)來鏈接
    2. 在瀏覽器地址欄輸入URL,與服務端創建鏈接,瀏覽器發送請求
    3. 服務端收到請求消息,解析請求消息,根據路徑和函數的對應關係,找到將要執行的函數
    4. 執行函數,打開HTML文件,進行字符串替換,獲得一個最終要返回的HTML內容
    5. 按照HTTP協議的消息格式要求,把HTML內容回覆給用戶瀏覽器(發送響應)
    6. 瀏覽器收到響應的消息以後,按照HTML的規則渲染頁面.
    7. 關閉鏈接

1.3 socket服務端功能劃分

    1. 負責與瀏覽器收發消息(socket通訊) --> wsgiref/uWsgi/gunicorn...
    2. 根據用戶訪問不一樣的路徑執行不一樣的函數
    3. 從HTML讀取出內容,而且完成字符串的替換 --> jinja2(模板語言)

1.4 HTTP協議消息的格式    

1. 請求(request)  ---> 瀏覽器端的請求
  請求方法 路徑 HTTP/1.1\r\n
  k1:v1\r\n
  ...\r\n
  \r\n
  請求體 <-- 能夠有,能夠沒有css

 

2. 響應(response)  ---> 服務器端的響應
  HTTP/1.1 狀態碼 狀態描述符\r\n
  k1:v1\r\n
  Content-Type: text/html; charset=utf8\r\n
  \r\n
  響應正文 <-- HTML內容html

1.5 關於GET和POST請求   

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

    • GET請求攜帶的數據都拼接在了URL上,且GET請求攜帶的數據有長度限制爲40K。
    • 而POST請求經過form表單將數據提交至後臺。   

1. 何時用GET請求?
  1. 瀏覽器想要獲得一個HTML頁面的時候
  2. 搜索引擎查詢關鍵字的時候,例如www.sogo.com/web/?query=迪麗熱巴
2. 何時用POST?
  瀏覽器向服務器提交數據,好比登陸、註冊、上傳文件等mysql

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

1.6 Python中 Web框架的分類

1.按上面三個功能劃分:sql

    1. 框架自帶a,b,c --> Tornado
    2. 框架自帶b和c,使用第三方的a --> Django
    3. 框架自帶b,使用第三方的a和c --> Flask

2. 按另外一個維度來劃分:數據庫

    1. Django --> 大而全(你作一個網站能用到的它都有)
    2. 其餘 --> Flask 輕量級

二、什麼是Django?

  Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MVC的框架模式,即模型M,視圖V和控制器C。它們各自的職責以下:django

層次
職責
模型(Model),即數據存取層
處理與數據相關的全部事務: 如何存取、如何驗證有效性、包含哪些行爲以及數據之間的關係等。
模板(Template),即業務邏輯層
處理與表現相關的決定: 如何在頁面或其餘類型文檔中進行顯示。
視圖(View),即表現層
存取模型及調取恰當模板的相關邏輯。模型與模板的橋樑。

三、安裝Django和建立工程

 3.1 安裝Django

  pip3 install django==1.11.11  ---> 指定要按安裝的版本瀏覽器

  pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11  ---> 指定源和版本安裝服務器

      pip3 install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com django==1.11.11   ---> 源爲http時

 3.2 建立Django工程項目

  到你要保存Django項目的目錄下執行 django-admin startproject 工程名

 3.3 建立Django app

  django-admin startapp app名

 3.4 啓動Django服務    

在項目的根目錄下(也就是有manage.py的那個目錄),運行:

  • python3 manage.py runserver IP:端口--> 在指定的IP和端口啓動
  • python3 manage.py runserver 端口 --> 在指定的端口啓動
  • python3 manage.py runserver --> 默認在本機的8000端口啓動

    3.5 配置相關

1. Templates(存放HTML文件的配置)   <--  告訴Django去哪兒找個人HTML文件

2. 建立靜態文件文件夾(通常命名爲static,存放css/js/圖片等)
在settings.py下的STATIC_URL = '/static/' 表明靜態文件保存目錄的別名,引用時就是引用此名字而不是存放html文件的文件夾名字!

同時新增以下:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]  # 靜態文件的真實路徑

  3. 註釋掉setting.py中 帶有 csrf 的那一行

  4. 配置APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'app02.apps.App02Config',
    'app03.apps.App03Config',
    ...,
]  # 在這裏增長APP的關聯關係

  5. 修改數據庫鏈接配置(以mysql爲例)

    1. 在setting.py文件下的修改以下: 

 1 DATABASES = {
 2     'default': {
 3         'ENGINE': 'django.db.backends.mysql',  # 數據庫引擎(這裏使用mysql)
 4         "NAME": "djangoapp01",  # 數據庫
 5         'HOST': "127.0.0.1",  # IP地址
 6         "PORT": 3306,  # 端口號
 7         "USER": "root",  # 用戶名
 8         "PASSWORD": "mysql123",  # 密碼
 9     }
10 }

    2. 告訴Django用pymysql代替默認的MySQLDB 鏈接MySQL數據庫,在項目同名的文件夾下的/__init__.py文件中(不是app的/__init__.py文件!),寫下面兩句:

import pymysql
pymysql.install_as_MySQLdb()

四、操做數據庫

4.1 Django中ORM與數據庫的對應關係    

類    ---> 數據表
對象 ---> 數據行
屬性 ---> 字段

  

4.2 建立數據表

  ORM只能操做數據表和數據行,不能操做數據庫,數據庫必需要手工建立。

  一、在app/models.py裏面定義類,類名即表名。

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)  # 自增的ID主鍵
    name = models.CharField(max_length=64, null=False, unique=True)  # 建立一個varchar(64)的惟一的不爲空的字段

  二、將數據update至數據庫中

1. python3 manage.py makemigrations --> 把models.py裏面的更改記錄至app下的migrations下的.py文件 2. python3 manage.py migrate --> 把更改翻譯成SQL語句,去數據庫執行

相關文章
相關標籤/搜索