Django 初學

 1、什麼是web框架 

框架,即framework  ['fremwɝk],特指爲解決一個開放性問題而設計的具備必定約束性的支撐結構,使用框架能夠幫你快速開發特定的系統,簡單地說,就是你用別人搭建好的舞臺來作表演。css

對於全部的web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。html

  最簡單的Web應用就是先把HTML用文件保存好,用一個現成的HTTP服務器軟件,接收用戶請求,從文件中讀取HTML,返回。python

  若是要動態生成HTML,就須要把上述步驟本身來實現。不過,接受HTTP請求、解析HTTP請求、發送HTTP響應都是苦力活,若是咱們本身來寫這些底層代碼,還沒開始寫動態HTML呢,就得花個把月去讀HTTP規範。mysql

  正確的作法是底層代碼由專門的服務器軟件實現,咱們用Python專一於生成HTML文檔。由於咱們不但願接觸到TCP鏈接、HTTP原始請求和響應格式,因此,須要一個統一的接口,讓咱們專心用Python編寫Web業務。web

這個接口就是WSGI:Web Server Gateway Interface。sql

 2、MCV與MTV模式 

 2.1 MCV 

MVC模式:所謂MVC就是把Web應用分爲模型(M),控制器(C)和視圖(V)三層;他們之間以一種插件式的、鬆耦合的方式鏈接在一塊兒,模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互(頁面),控制器接受用戶的輸入調用模型和視圖完成用戶的請求,其示意圖以下所示:數據庫

 

 

 

 

 

 

 

 

 

 2.2 MTV 

Django的MTV模式本質上和MVC是同樣的,也是爲了各組件間保持鬆耦合關係,只是定義上有些許不一樣,Django的MTV分別是值:django

  • M 表明模型(Model): 負責業務對象和數據庫的關係映射(ORM)
  • T 表明模板 (Template):負責如何把頁面展現給用戶(Html)
  • V 表明視圖(View):   負責業務邏輯,並在適當時候調用Model和Template

除了以上三層以外,Django還須要一個 url 分發器,它的做用是將一個個 url 的頁面請求分發給不一樣的 view 處理,view 再調用相應的 Model 和 Template,MTV的響應模式以下所示:後端

通常是用戶經過瀏覽器向咱們的服務器發起一個請求(request),這個請求回去訪問視圖函數,(若是不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶),視圖函數調用模型,模型去數據庫查找數據,而後逐級返回,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。瀏覽器

 3、Django初始相關操做和配置 

 3.1 Django命令行操做 

# 指定版本安裝,不指定版本將安裝最新版
pip install django==1.11.16
# 當前目錄下建立Django項目
django-admin startproject mysite
# 在mysite目錄下建立應用
python manage.py startapp 應用名
# 啓動django項目,在項目的根目錄下
python manage.py runserver IP:端口
python manage.py runserver 端口
python manage.py runserver

 3.2 Django初始化配置 

1.若是沒有Templates(存放Html文件的配置)就建立一個
2.註釋掉setting.py中'django.middleware.csrf.CsrfViewMiddleware'(當出現Forbidden(403)錯誤時,通常是這行沒有被註釋)
  複習回來補充:(之後不用註釋掉了)
  csrf(跨站請求僞造),在頁面的 form 表單裏面寫上 {% csrf_token %}
  當提交POST數據的時候,Django的這個中間件會作檢驗,若是校驗不經過則拒絕這次請求
3.在setting.py最後中加入如下內容,用來存放全部靜態文件(css/js/圖片)的路勁 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ]
4.在項目根目錄下建立一個static目錄,用來存放靜態文件,固然也能夠建立多個,好比static1,static2,但不必

 3.2 Django中使用MySQL詳細步驟 

1.ORM不能建立數據庫,因此得本身事先建立好;
2.在setting.py中設置鏈接數據庫的配置,把原來的註釋或刪掉;
    DATABASES = {
        'default':{
            'ENGINE': 'django.db.backends.mysql',  # 鏈接的數據庫類型
            'USER': 'root',  # 用戶名
            'PASSWORD': '',  # 密碼
            'HOST': '127.0.0.1',  # 鏈接數據庫的地址
            'PORT': 3306,  # 端口
            'NAME': 'testdb'  # 使用的數據庫名稱(要事先建立好)
        }
    }
3.告訴Django用pymysql代替默認的MySQLDB鏈接我們的MySQL數據庫,在項目下的__init__.py文件中,加入下面兩句:
    import pymysql
    pymysql.install_as_MySQLdb()
4.在建立的應用(好比appxx/blog)目錄下的models.py文件中定義一個類,這個類必須繼承models.Model,示例以下:
    class UserInfo(models.Model):
        id = models.AutoField(primary_key=True)  # 建立一個自增的主鍵字段
        name = models.CharField(null=False, max_length=20)  # 建立一個varchar(20)類型的不能爲空的字段
5.依次執行下面兩條命令,便可在相應的數據庫(好比上面寫的testdb)下新建項目須要的表:
    python manage.py makemigrations  # 生成同步數據庫的腳本
    python3 manage.py migrate  # 同步數據庫

 4、以一個例子來展現:用戶在瀏覽器請求,Django返回一個頁面的過程 

在views.py文件裏寫一個登陸函數:

登陸失敗返回的 login.html 頁面會帶有反饋信息給用戶

在url.py文件裏寫映射關係:

將寫好的 login.html 文件放置在 templates 目錄下,將要用到的靜態文件(CSS,JS,圖片)放置在 static 目錄:

通過了一番配置後,就能夠啓動Django項目了,在pycharm的右上角有個三角的綠色圖標,點擊便可讓服務跑起來了,在瀏覽器輸入相應的IP地址和端口便可訪問頁面了。

 5、知識小結 

5.1 當在建立APP時,必定要記得在setting.py文件裏添加下面圖片箭頭中的那一行,新建的APP叫什麼名字就寫對應的信息

5.2 ORM的對應關係,在models.py文件裏寫類,多少個類就對應多少張表

5.3 ORM單表的查詢數據和增長數據

  • 查詢數據models.類名.objects.all()
  • 增長數據models.類名.objects.create(字段名="值")

5.4 GET請求和POST請求

  • GET請求:①瀏覽器請求一個頁面;②搜索引擎查詢關鍵字也是GET請求
  • POST請求:瀏覽器向服務端提交數據,好比登陸/註冊等

5.5 form表單日後端提交數據須要注意三點:

  • 全部獲取用戶輸入的標籤都應該放在form裏面,而且必需要有name屬性
  • action屬性控制信息往哪裏提交(好比action="/login/"),method通常設置成post(method="post")
  • 提交按鈕必須是 type="submit" 類型

 5.6 render() 與 redirect()

就拿上面登陸這個例子說吧

  • 登陸失敗:用render()返回原來的頁面,並使用模板語法增長了錯誤信息;(頁面渲染)
  • 登陸成功:都登陸成功了,應該讓用戶進入一個不一樣的頁面吧;(頁面跳轉)

上圖中的 user_list 也是 html 文件,可是用 redirect() 就寫成 "/user_list/" ,而用 render() 就須要有 request,"add_user.html" 也不一樣

相關文章
相關標籤/搜索