Django day01
1.web應用程序處理流程:
服務器程序:
主要就是接收http報文,進行解析
框架程序:
根據解析好的報文,進行處理,實現業務處理(視圖)
中間層:
2.Django
**主要目的:**簡便,快速開發數據庫驅動。代碼復用
**特點:**重量級框架:原生提供眾多的功能組件。
MVT模式:
模型 數據庫 模板
- M全拼為Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。
- V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,返回應答。
- T全拼為Template,與MVC中的V功能相同,負責封裝構造要返回的html。
mvc模式說明:
- M全拼為Model,主要封裝對數據庫層的訪問,對數據庫中的數據進行增、刪、改、查操作。
- V全拼為View,用于封裝結果,生成頁面展示的html內容。
- C全拼為Controller,用于接收請求,處理業務邏輯,與Model和View交互,返回結果。
工程搭建:
1.環境的安裝:
安裝虛擬環境,
mkvirtualenv django_py3_1.11 -p python3
安裝Django:注意一定要指定好版本
創建工程:
創建工程,推薦在命令行中使用命令來創建,使用pycham來進行創建,在很多時候,會給配置很多東西,從而造成上線時候出現未知的問題。
創建工程的命令為:
django-admin startproject 工程名稱
工程目錄的結構:
setting.py :是項目的整體配置文件:比如 DEBUG 的開關,靜態文件的位置等等。
urls.py 是項目的URL配置文件。
wsgi.py 是項目與WSGI兼容的Web服務器入口。
manage.py 是項目管理文件,通過它管理項目。
運行開發服務器:
運行服務器命令如下:
python manage.py runserver ip:端口
或:
python manage.py runserver
創建子應用:
創建子應用的命令
python manage.py startapp 子應用名稱
子項目結構
admin.py 文件跟網站的后臺管理站點配置相關。
apps.py 文件用于配置當前子應用的相關信息。
migrations 目錄用于存放數據庫遷移歷史文件。
models.py 文件用戶保存數據庫模型類。
tests.py 文件用于開發測試用例,編寫單元測試。
views.py 文件用于編寫Web應用視圖。
注冊安裝子應用:
在setting.py中的,將子應用的配置信息文件apps.py中的Config類添加到INSTALLED_APPS列表中。
創建視圖:
-
創建
打開剛創建的users模塊,在views.py中編寫視圖代碼。
from django.http import HttpResponse
def index(request):
“”"
index視圖
:param request: 包含了請求信息的請求對象
:return: 響應對象
“”"
return HttpResponse(“hello the world!”)
說明:
視圖函數的第一個傳入參數必須定義,用于接收Django構造的包含了請求數據的HttpReqeust對象,通常名為request。
視圖函數的返回值必須為一個響應對象,不能像Flask一樣直接返回一個字符串,可以將要返回的字符串數據放到一個HTTPResponse對象中。
2. 定義路由URL
-
在子應用中新建一個urls.py文件用于保存該應用的路由。
-
在users/urls.py文件中定義路由信息。
from django.conf.urls import url
from . import views
#urlpatterns是被django自動識別的路由列表變量
urlpatterns = [
# 每個路由信息都需要使用url函數來構造
# url(路徑, 視圖)
url(r’^index/$’, views.index),
] -
在工程總路由demo/urls.py中添加子應用的路由數據。
from django.conf.urls import url, include from django.contrib import admin
urlpatterns = [
url(r’^admin/’, admin.site.urls), # django默認包含的#添加
url(r’^users/’, include(‘users.urls’)),
]
使用include來將子應用users里的全部路由包含進工程路由中;
r’^users/’ 決定了users子應用的所有路由都已/users/開頭,如我們剛定義的視圖index,其最終的完整訪問路徑為/users/index/。
include函數除了可以傳遞字符串之外,也可以直接傳遞應用的urls模塊,如
from django.conf.urls import url, include
from django.contrib import admin
import users.urls # 先導入應用的urls模塊
urlpatterns = [
url(r'^admin/', admin.site.urls),
# url(r'^users/', include('users.urls')),
url(r'^users/', include(users.urls)), # 添加應用的路由
]
-
啟動運行
重新啟動django程序python manage.py runserver
在瀏覽器中輸入網址127.0.0.1:8000/users/index/ 可看到返回的信息
配置,靜態文件與路由
配置文件:
1. BASE_DIR
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
當前工程的根目錄,Django會依此來定位工程內的相關文件,我們也可以使用該參數來構造文件路徑。
2.DEBUG:
初始值為True:修改代碼文件后,程序會自動重啟
若程序出現問題,則會在前端顯示問題和代碼
3.語言和時間
Django支持本地化處理
語言和時區修改為中國大陸信息
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
靜態文件:
需要配置兩個參數:
STATICFILES_DIRS 存放查找靜態文件的目錄
STATIC_URL 訪問靜態文件的URL前綴
注意
Django 僅在調試模式下(DEBUG=True)能對外提供靜態文件。
當DEBUG=False工作在生產模式時,Django不再對外提供靜態文件,需要是用collectstatic命令來收集靜態文件并交由其他靜態文件服務器來提供。
5.路由
1.路由的路徑
Django的主要路由信息定義在工程同名目錄下的urls.py文件中,該文件是Django解析路由的入口。
每個子應用為了保持相對獨立,可以在各個子應用中定義屬于自己的urls.py來保存該應用的路由。然后用主路由文件包含各應用的子路由數據。主路由
當然也可直接放在主路由文件中,但不提倡
2.解析順序:自上而下
提示:
需要注意定義路由的順序,避免出現屏蔽效應。
3.命名
在定義路由的時候,可以為路由命名,方便查找特定視圖的具體路徑信息。
-
在使用include函數定義路由時,可以使用namespace參數定義路由的命名空間,如
url(r’^users/’, include(‘users.urls’, namespace=‘users’)),
命名空間表示,凡是users.urls中定義的路由,均屬于namespace指明的users名下。
命名空間的作用:避免不同應用中的路由使用了相同的名字發生沖突,使用命名空間區別開。
2) 在定義普通路由時,可以使用name參數指明路由的名字,如
urlpatterns = [
url(r'^index/$', views.index, name='index'),
url(r'^say', views.say, name='say'),
]
reverse反解析
作用:1 生成路由地址規范
2 不修改引用路由地址的代碼
使用reverse函數,可以根據路由名稱,返回具體的路徑,如:
from django.urls import reverse # 注意導包路徑
def index(request):
return HttpResponse("hello the world!")
def say(request):
url = reverse('users:index') # 返回 /users/index/
print(url)
return HttpResponse('say')
對于未指明namespace的,reverse(路由name)
對于指明namespace的,reverse(命名空間namespace:路由name)
路徑結尾斜線/的說明
Django中定義路由時,通常以斜線/結尾,其好處是用戶訪問不以斜線/結尾的相同路徑時,Django會把用戶重定向到以斜線/結尾的路徑上,而不會返回404不存在。如
urlpatterns = [
url(r’^index/$’, views.index, name=‘index’),
]
用戶訪問 index 或者 index/ 網址,均能訪問到index視圖。
說明:
雖然路由結尾帶/能帶來上述好處,但是卻違背了HTTP中URL表示資源位置路徑的設計理念。
是否結尾帶/以所屬公司定義風格為準。
請求
回想一下,利用HTTP協議向服務器傳參有幾種途徑?
提取URL的特定部分,如/weather/beijing/2018,可以在服務器端的路由中用正則表達式截取;
查詢字符串(query string),形如key1=value1&key2=value2;
請求體(body)中發送的數據,比如表單數據、json、xml;
在http報文的頭(header)中。
URL路徑參數
智能推薦
Day01
Markdown學習 標題: #+空格+標題名字(#數量即標題級數) 二級標題 三級標題 四級標題 字體 加粗:兩個*包起來 Hello ,World! 斜體:一個*包起來 hello,world! 斜體加粗:三個*包起來 hello,world! 刪除線:兩個~包起來 hello,world! 引用 (>內容):沒有括號 好的呢! 分割線 三個- 三個* 圖片 格式:![名字]括號+網址 ...
Hadoop Day01
一.大數據 大數據介紹 1.大數據的由來 隨著計算機技術的發展,互聯網的普及,信息的積累已經到了一個非常龐大的地步,信息的增長也在不斷的加快,隨著互聯網,物聯網建設的加快,信息更是爆炸式增長,收集,檢索,統計這些信息越發困難,必須使用新的技術來解決這些問題 2.什么是大數據 大數據的定義: 大數據指無法在一定時間范圍內用常規軟件工具進行捕捉,管理和處理的數據的集合,需要新處理模式才能具有更強的決策...
Scala day01
Scala是基于Java虛擬機,也就是JVM的一門編程語言,所以有Scala代碼都需要經過編譯為字節碼,然后由Java虛擬機運行. Scala和Java是可以無縫互操作的,Scala可以任意調用Java的代碼. Scala解釋器 REPL:會快速編譯Scala代碼為字節碼,然后交給JVM來執行. 計算表達式:在Scala內部命令行內輸入Scala代碼,解釋器會直接返回結果,如果沒有指定變量來存放這...
day01
Markdown 標題: 二級標題 三級標題 四級標題 字體 hello,world 加粗:兩邊加兩個星號 hello,world 斜體:兩邊加一個星號 hello,world 刪除線:兩邊加波浪線 引用 引用:大于符號空格回車(一般用于引用別人的文章) 分割線 分割線:三個—或者三個星號回車生成分割線 圖片 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳()(C...
Day01
Markdown學習 標題級 ? 最多六級 字體 ? 粗體:one ? 斜體:two 引用 狂神說Java 分割線 圖片 ? 超鏈接 ? 鏈接 列表 表格 名字 性別 生日 張三 男 1997.1.1 代碼 public ```...
猜你喜歡
Java Day01
1.1Java虛擬機——JVM JVM:java虛擬機,簡稱JVM,是運行所有java程序的假象計算機,是java程序的運行環境,是java最具有吸引力的特性之一。我們編寫的java代碼,都運行在JVM之上。 跨平臺:任何軟件的運行,都必須要運行在操作系統之上,而我們用java編寫的軟件可以運行在任何操作系統上,這個特性稱為Java語言的跨平臺特性。該特性室友JVM實現的,...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...