django框架預備知識

內容:

1.web預備知識

2.django介紹

3.web框架的本質及分類

4.django安裝與基本設置

?

?

?

1.web預備知識

HTTP協議:https://www.cnblogs.com/wyb666/p/9383077.html

關于web的本質:http://www.cnblogs.com/wyb666/p/9034042.html

如何自定義web框架:http://www.cnblogs.com/wyb666/p/9038644.html

了解cookie和session:https://www.cnblogs.com/wyb666/p/9068853.html

?

?

2.django介紹

(1)django介紹

Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。在Python各種web框架中,Django的文檔最完善、市場占有率最高、招聘職位最多!

?

(2)MVC和MTV

MVC是眾所周知的模式,即:將應用程序分解成三個組成部分:model(模型),view(視圖),和 controller(控制 器)。其中:

  • M——管理應用程序的狀態(通常存儲到數據庫中),并約束改變狀態的行為(或者叫做“業務規則”)
  • C——接受外部用戶的操作,根據操作訪問模型獲取數據,并調用“視圖”顯示這些數據。控制器是將“模型”和“視圖”隔離,并成為二者之間的聯系紐帶
  • V——負責把數據格式化后呈現給用戶

Django也是一個MVC框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式:

  • M 代表模型(Model),即數據存取層。 該層處理與數據相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關系等
  • T 代表模板(Template),即表現層。 該層處理與表現相關的決定: 如何在頁面或其他類型文檔中進行顯示
  • V 代表視圖(View),即業務邏輯層。 該層包含存取模型及調取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋梁

?

(3)django的優缺點

優點:

  • 完美的文檔,Django的成功很大一部分原因要歸功于Django近乎完美的官方文檔(包括Djangobook)
  • 全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stackframework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,開發網站應手的工具Django基本都給你做好
  • 強大的URL路由配置,Django讓你可以設計出非常優雅的URL,在Django里基本可以跟丑陋的GET參數說拜拜
  • 自助管理后臺,admin interface是Django里比較吸引眼球的一項contrib,讓你幾乎不用寫一行代碼就擁有一個完整的后臺管理界面。

?

缺點(源自Django堅持自己造所有的輪子,整個系統相對封閉):

  • 系統緊耦合,如果你覺得Django內置的某項功能不是很好,想用喜歡的第三方庫來代替是很難的
  • Django自帶的ORM遠不如SQLAlchemy強大,除了在Django這一畝三分地,SQLAlchemy是Python事實上的ORM標準,其它框架都支持SQLAlchemy
  • Template功能比較弱,不能插入Python代碼,要寫復雜一點的邏輯需要另外用Python實現Tag或Filter
  • URL配置雖然強大,但全部要手寫,這一點跟Rails的Conventionover configuration的理念完全相左,高手和初識Django的人配出來的URL會有很大差異

?

Django大包大攬,用它來快速開發一些Web運用是很不錯的。如果你順著Django的設計哲學來,你會覺得Django很好用,越用越爽;相反,你如果不能融入或接受Django的設計哲學,你用Django一定會很痛苦,趁早放棄的好

?

(4)django的組件

Django框架的核心包括:一個 面向對象的映射器,用作數據模型和關聯性數據庫間的媒介(ORM);一個基于正則表達式的URL分發器;一個視圖系統,用于處理請求;以及一個模板系統

核心框架中還包括:

  • 一個輕量級的、獨立的Web服務器,用于開發和測試
  • 一個表單序列化及驗證系統,用于HTML表單和適于數據庫存儲的數據之間的轉換
  • 一個緩存框架,并有幾種緩存方式可供選擇
  • 中間件支持,允許對請求處理的各個階段進行干涉
  • 內置的分發系統允許應用程序中的組件采用預定義的信號進行相互間的通信
  • 一個序列化系統,能夠生成或讀取采用XML或JSON表示的Django模型實例
  • 一個用于擴展模板引擎的能力的系統

另外Django 包含了很多應用在它的"contrib"包中,這些包括:

  • 一個可擴展的認證系統
  • 動態站點管理頁面
  • 一組產生 RSS 和 Atom 的工具
  • 一個靈活的評論系統
  • 產生Google 站點地圖 (Google Sitemaps)的工具
  • 防止跨站請求偽造(cross-site request forgery)的工具
  • 一套支持輕量級標記語言(Textile和Markdown)的模板庫
  • 一套協助創建地理信息系統(GIS)的基礎框架

?

?

3.web框架的本質及分類

(1)web框架的本質:socket服務端 與 瀏覽器的通信

?

(2)socket服務端功能劃分

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


(3)Python中 Web框架的分類

按上面三個功能劃分:

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

按另一個維度來劃分:

  • Django --> 大而全(你做一個網站能用到的它都有)
  • 其他 --> Flask 輕量級

?

?

4.django安裝與基本設置使用

(1)django版本

現在主流的版本如下:

帶有LTS表明是長期支持的版本

?

(2)本人使用版本

本人選擇使用1.11

安裝:可直接使用如下命令安裝

1 pip3 install django==1.11.11

?

?

(3)創建django項目

  • 命令行創建:django-admin startproject mysite
  • pycharm創建:File --> New project --> 左側選Django --> 右側填項目路徑,并且勾選python.exe

?

(4)設置django項目(settings.py)

配置HTML文件存放的位置:

 1 // settings.py中的TEMPLATES是用來配置項目模板文件(HTML)的路徑
 2 TEMPLATES = [
 3     {
 4         'BACKEND': 'django.template.backends.django.DjangoTemplates',
 5         'DIRS': [os.path.join(BASE_DIR, 'templates')],
 6         'APP_DIRS': True,
 7         'OPTIONS': {
 8             'context_processors': [
 9                 'django.template.context_processors.debug',
10                 'django.template.context_processors.request',
11                 'django.contrib.auth.context_processors.auth',
12                 'django.contrib.messages.context_processors.messages',
13             ],
14         },
15     },
16 ]

?

配置靜態文件存放的位置:

1 // 在setting.py中最下面寫上這兩條 配置靜態文件目錄
2 // 靜態文件 -> css js 圖片
3 STATIC_URL = '/static/'
4 STATICFILES_DIRS = (
5     os.path.join(BASE_DIR, 'static'),
6 )

?

修改django默認的語言:

1 # 將默認的英文改成中文
2 LANGUAGE_CODE = 'zh-hans'

?

將csrf規則注釋:

1 注釋settings.py的middlerware中的以下內容(csrf):
2 # 'django.middleware.csrf.CsrfViewMiddleware',

?

(5)運行django項目

1 Django項目的啟動:
2     1. 命令行啟動
3         在項目的根目錄下(也就是有manage.py的那個目錄),運行:
4         python3 manage.py runserver IP:端口--> 在指定的IP和端口啟動
5         python3 manage.py runserver 端口   --> 在指定的端口啟動
6         python3 manage.py runserver        --> 默認在本機的8000端口啟動
7 
8     2. PyCharm啟動
9         點綠色的小三角,直接可以啟動Django項目(前提是小三角左邊是你的Django項目名)

?

(6)創建app

1 # django中的APP是什么:
2     整個project -> 一個大學(武漢大學)
3     一個APP -> 某個學院(計算機學院/金融學院/管理學院、、、)
4 
5 APP可以方便我們在一個大的Django項目中,管理實現不同的業務功能
6 
7 創建APP的命令
8 命令行 - 在Django項目的根目錄輸入:
9 python3 manage.py startapp app的名字

以下是創建APP的實例:

執行以上命令后文件夾如下:

最后要在settings.py中設置一下:

另外也可以在創建pycharm項目時隨手創建一個APP:

?

?

(7)數據庫配置

在Django項目中的settings.py中設置連接數據庫的相關配置(告訴Django連接哪一個數據庫):

 1 # Database
 2 # https://docs.djangoproject.com/en/1.11/ref/settings/#databases
 3 
 4 # 默認使用sqlite數據庫
 5 # DATABASES = {
 6 #     'default': {
 7 #         'ENGINE': 'django.db.backends.sqlite3',
 8 #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 9 #     }
10 # }
11 
12 # 數據庫相關配置:
13 DATABASES = {
14     'default': {
15         'ENGINE': 'django.db.backends.mysql',  # 連接的數據庫類型
16         'HOST': '127.0.0.1',    # 連接數據庫的地址
17         'PORT': 3306,           # 端口
18         'NAME': "django",       # 數據庫名稱
19         'USER': 'root',         # 用戶
20         'PASSWORD': 'root'      # 密碼
21     }
22 }

如果要使用pymysql連接MySQL數據庫,就要進行如下設置:

告訴Django用pymysql代替默認的MySQLDB 連接MySQL數據庫,在項目/__init__.py文件中,寫下面兩句:

1 import pymysql
2 # 告訴Django用pymysql來代替默認的MySQLdb
3 pymysql.install_as_MySQLdb()

?

轉載于:https://www.cnblogs.com/wyb666/p/9444150.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389947.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

現實世界 機器學習_公司溝通分析簡介現實世界的機器學習方法

現實世界 機器學習In my previous posts I covered analytical subjects from a scientific point of view, rather than an applied real world problem. For this reason, this article aims at approaching an analytical idea from a managerial point of view, rather tha…

拷貝構造函數和賦值函數

1、拷貝構造函數:用一個已經有的對象構造一個新的對象。 CA(const CA & c )函數的名稱必須和類名稱相一致,它的唯一的一個參數是本類型的一個引用變量,該參數是const 類型,不可變。 拷貝構造函數什么時…

[bzoj3036]綠豆蛙的歸宿

題目大意:給定 $DAG$ 帶邊權連通圖,保證所有點都能到達終點 $n$,每個點等概率沿邊走,求起點 $1$ 到終點 $n$ 的期望長度。 題解:拓撲,然后倒著$DP$就可以了 卡點:無 C Code: #includ…

5902. 檢查句子中的數字是否遞增

5902. 檢查句子中的數字是否遞增 句子是由若干 token 組成的一個列表,token 間用 單個 空格分隔,句子沒有前導或尾隨空格。每個 token 要么是一個由數字 0-9 組成的不含前導零的 正整數 ,要么是一個由小寫英文字母組成的 單詞 。 示例&…

蒜頭君吃桃

蒜頭君買了一堆桃子不知道個數,第一天吃了一半的桃子,還不過癮,有多吃了一個。以后他每天吃剩下的桃子的一半還多一個,到 nn 天只剩下一個桃子了。蒜頭君想知道一開始買了多少桃子。 輸入格式 輸入一個整數 n(2≤n≤60)&#xff0…

Chrome keyboard shortcuts

2019獨角獸企業重金招聘Python工程師標準>>> Chrome keyboard shortcuts https://support.google.com/chrome/answer/157179?hlen 轉載于:https://my.oschina.net/qwfys200/blog/1927456

數據中心細節_當細節很重要時數據不平衡

數據中心細節定義不平衡數據 (Definition Imbalanced Data) When we speak of imbalanced data, what we mean is that at least one class is underrepresented. For example, when considering the problem of building a classifier, let’s call it the Idealisstic-Voter.…

辛普森悖論_所謂的辛普森悖論

辛普森悖論We all know the Simpsons family from Disneyland, but have you heard about the Simpson’s Paradox from statistic theory? This article will illustrate the definition of Simpson’s Paradox with an example, and show you how can it harm your statisti…

查看NVIDIA使用率工具目錄

2019獨角獸企業重金招聘Python工程師標準>>> C:\Program Files\NVIDIA Corporation\Display.NvContainer\NVDisplay.Container.exe 轉載于:https://my.oschina.net/u/2430809/blog/1927560

2043. 簡易銀行系統

2043. 簡易銀行系統 你的任務是為一個很受歡迎的銀行設計一款程序,以自動化執行所有傳入的交易(轉賬,存款和取款)。銀行共有 n 個賬戶,編號從 1 到 n 。每個賬號的初始余額存儲在一個下標從 0 開始的整數數組 balance…

余弦相似度和歐氏距離_歐氏距離和余弦相似度

余弦相似度和歐氏距離Photo by Markus Winkler on UnsplashMarkus Winkler在Unsplash上拍攝的照片 This is a quick and straight to the point introduction to Euclidean distance and cosine similarity with a focus on NLP.這是對歐氏距離和余弦相似度的快速而直接的介紹&…

bzoj2152 聰聰可可

題目描述 聰聰和可可是兄弟倆,他們倆經常為了一些瑣事打起來,例如家中只剩下最后一根冰棍而兩人都想吃、兩個人都想玩兒電腦(可是他們家只有一臺電腦)……遇到這種問題,一般情況下石頭剪刀布就好了,可是他們…

七、 面向對象(二)

匿名類對象 創建的類的對象是匿名的。當我們只需要一次調用類的對象時,我們就可以考慮使用匿名的方式創建類的對象。特點是創建的匿名類的對象只能夠調用一次! package day007;//圓的面積 class circle {double radius;public double getArea() {// TODO…

機器學習 客戶流失_通過機器學習預測流失

機器學習 客戶流失介紹 (Introduction) This article is part of a project for Udacity “Become a Data Scientist Nano Degree”. The Jupyter Notebook with the code for this project can be downloaded from GitHub.本文是Udacity“成為數據科學家納米學位”項目的一部分…

2044. 統計按位或能得到最大值的子集數目

2044. 統計按位或能得到最大值的子集數目 給你一個整數數組 nums ,請你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的數目 。 如果數組 a 可以由數組 b 刪除一些元素(或不刪除)得到&…

redis系列:分布式鎖

1 介紹 這篇博文講介紹如何一步步構建一個基于Redis的分布式鎖。會從最原始的版本開始,然后根據問題進行調整,最后完成一個較為合理的分布式鎖。 本篇文章會將分布式鎖的實現分為兩部分,一個是單機環境,另一個是集群環境下的Redis…

Qt中的坐標系統

轉載:原野追逐 Qt使用統一的坐標系統來定位窗口部件的位置和大小。 以屏幕的左上角為原點即(0, 0)點,從左向右為x軸正向,從上向下為y軸正向,這整個屏幕的坐標系統就用來定位頂層窗口; 此外,窗口內部也有自己…

預測股票價格 模型_建立有馬模型來預測股票價格

預測股票價格 模型前言 (Preface) If you are reading this, it’s most likely because you love to solve puzzles. I’m a very competitive person by nature. The Mt. Everest of puzzles, in my opinion, is trying to find excess returns through active trading in th…

Python 模塊 timedatetime

time & datetime 模塊 在平常的代碼中,我們常常需要與時間打交道。在Python中,與時間處理有關的模塊就包括:time,datetime,calendar(很少用,不講),下面分別來介紹。 在開始之前,首先要說明幾…

大數模板Java

import java.util.*; import java.math.BigInteger; public class Main{public static void main(String args[]){Scanner cinnew Scanner(System.in);BigInteger a,b;acin.nextBigInteger();bcin.nextBigInteger();System.out.println(a.add(b));//加法System.out.println(a.…