[問題] Django觀念澄清

看板Python作者 (朝聞到,SEX可以)時間7年前 (2018/06/04 16:04), 編輯推噓3(3028)
留言31則, 6人參與, 7年前最新討論串1/1
C:\Users\NOAS2K456CG05\project\project\project\urls.py from django.contrib import admin from django.urls import path , include from app1 import views urlpatterns = [ path('admin/', admin.site.urls), path('app1/' , include('app1.urls')), path('' , views.home , name = 'home'), ] _________________________我是分隔線______________________________ C:\Users\NOAS2K456CG05\project\project\app1\urls.py from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('index/' , views.index , name='index'), ] _________________________我是分隔線______________________________ C:\Users\NOAS2K456CG05\project\project\app1\views.py from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request): s = 'This is index.' return HttpResponse(s) def home(request): s = 'This is home.' return HttpResponse(s) _________________________我是分隔線______________________________ 不知道會不會太難看 = = , Django超級新手, 想了解整個運作的流程 請教一下幾個問題 , 如果說的不對是很正常的 , 麻煩請指正我!感謝 1.path('' , views.home , name = 'home') 這個是Functiom views Browser輸入http://127.0.0.1:8000/後 , 使用app1\urls.py這個檔案內的 path('' , views.home , name = 'home') , 將app1\views.py內所定義的function 處理完後丟結果回來 , 而path內的第一個項目>>>''<<< , 如果不加路徑 , 一般來說是 不是作為首頁? 這個語法是否只適用在import app內的views.py ? 2.path('app1/' , include('app1.urls')) 這個是Including another URLconf 輸入http://127.0.0.1:8000/app1/index/後 , Browser 會詢問project內的 path('app1/' , include('app1.urls')) , 發現原來還有一層! 於是又跑去跟app1\urls.py說趕快給我資料 , 然後app1\urls.py很無奈的說出 path('index/' , views.index , name='index')去找他要 , 然後終於將views裡面的 function做完傳給Browser . 3.我看到他給的的例子裡面共有三個 : Functiom views , Including another URLconf Class-based views , 前面兩個我已經嘗試過了 , 想請問第三個是用在 import views.py 裡面的Class嗎? 4.在C:\Users\NOAS2K456CG05\project\project\app1\urls.py裡面 from . import views 之所以會打 . 是不是因為他們處在同個資料夾的原因? 5.views只能存在app裡面? 我在youtube看老外教學時 , 有些人是直接放在project 資料夾下 , 有些是放在app資料夾下 , 我覺得很混亂= = , 有什麼好處或壞處嗎? 或是有什麼用意? 還有urls也是= = , 是純粹為了方便不想隔一層import還是美觀性 ,還是有其他原因? 因為我有點強迫症 , 不喜歡東西很亂 , 希望就固定幾個pattern這樣下去做 , 以後要 修正或是Debug也方便好找 . -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.128.137.40 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1528099466.A.5C4.html

06/04 16:29, 7年前 , 1F
url是用regular expression match
06/04 16:29, 1F

06/04 17:36, 7年前 , 2F
樓上你該升 Django 2.0 了
06/04 17:36, 2F

06/04 17:48, 7年前 , 3F
我之前是用1.x沒錯 不過我推文前特地去翻了最新的原始碼
06/04 17:48, 3F

06/04 17:49, 7年前 , 4F
內部確實是用regex沒錯 只是path有新的寫法而已
06/04 17:49, 4F

06/04 17:50, 7年前 , 5F
我講的是內部的機制 對應到他第二個問題
06/04 17:50, 5F

06/04 18:00, 7年前 , 6F
感謝回覆 , 雖然看不太懂 我會去搜尋關鍵字找資料來看
06/04 18:00, 6F

06/04 18:04, 7年前 , 7F
include的url會和prefix串起來變成一個pattern
06/04 18:04, 7F

06/04 18:09, 7年前 , 8F
我重新翻了source code 不是串成一個 確實有一層層的概念
06/04 18:09, 8F

06/04 18:12, 7年前 , 9F
總之最後match的結果主要是view func和參數
06/04 18:12, 9F

06/04 18:21, 7年前 , 10F

06/04 18:21, 7年前 , 11F
6.4.2
06/04 18:21, 11F

06/04 18:24, 7年前 , 12F
5. 沒有一定要放哪 初學可以照django的convention放
06/04 18:24, 12F

06/04 19:05, 7年前 , 13F
了解 , 反正最後也都是導引到views.py這樣理解對吧?
06/04 19:05, 13F

06/04 19:12, 7年前 , 14F
4.似乎真的是資料夾的關係 , 感謝!
06/04 19:12, 14F

06/04 20:04, 7年前 , 15F
通常是會對應到views.py裡面的東西 不過廣義來講只要是
06/04 20:04, 15F

06/04 20:05, 7年前 , 16F
接收HttpRequest回傳HttpResponse的東西都OK
06/04 20:05, 16F

06/04 20:28, 7年前 , 17F
感謝您!
06/04 20:28, 17F

06/05 14:59, 7年前 , 18F
.視同同目錄
06/05 14:59, 18F

06/06 03:42, 7年前 , 19F
可以參考 django 2.0 文件中的 URL dispatcher
06/06 03:42, 19F

06/06 03:51, 7年前 , 20F
第三題,找文件 Class-based views 也有說明
06/06 03:51, 20F

06/06 04:08, 7年前 , 21F
大意就是
06/06 04:08, 21F

06/06 04:09, 7年前 , 22F
相比原先程序導向的函數,提供了另外物件導向的類型可用
06/06 04:09, 22F

06/06 04:19, 7年前 , 23F
好處就是,可以透過繼承的方式來讓你的程式碼重用性變高
06/06 04:19, 23F

06/07 01:01, 7年前 , 24F
網站長到很大的時候 當然要將 request "分流"到
06/07 01:01, 24F

06/07 01:02, 7年前 , 25F
app1, app2, app3, and so on. 這樣code 可以比較乾淨也
06/07 01:02, 25F

06/07 01:03, 7年前 , 26F
比較好管理 這正好跟你的強迫症是不違背的
06/07 01:03, 26F

06/07 01:04, 7年前 , 27F
還有這種方式也有利於 app 再利用。試想你若把所有 url
06/07 01:04, 27F

06/07 01:04, 7年前 , 28F
handler 都放在 project 下 之後要把某個 app 拆給
06/07 01:04, 28F

06/07 01:05, 7年前 , 29F
其他 project 用時不就很麻煩? 相同的概念,你project
06/07 01:05, 29F

06/07 01:05, 7年前 , 30F
底下的 template 以及 static files 都最好按照 app 分
06/07 01:05, 30F

06/07 01:11, 7年前 , 31F
老外直接放在 project下 應該是因為第一個例子 最簡單的
06/07 01:11, 31F
文章代碼(AID): #1R5FAAN4 (Python)
文章代碼(AID): #1R5FAAN4 (Python)