看板 Python 關於我們 聯絡資訊
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
djshen: url是用regular expression match 06/04 16:29
uranusjr: 樓上你該升 Django 2.0 了 06/04 17:36
djshen: 我之前是用1.x沒錯 不過我推文前特地去翻了最新的原始碼 06/04 17:48
djshen: 內部確實是用regex沒錯 只是path有新的寫法而已 06/04 17:49
djshen: 我講的是內部的機制 對應到他第二個問題 06/04 17:50
tmdggyygan: 感謝回覆 , 雖然看不太懂 我會去搜尋關鍵字找資料來看 06/04 18:00
djshen: include的url會和prefix串起來變成一個pattern 06/04 18:04
djshen: 我重新翻了source code 不是串成一個 確實有一層層的概念 06/04 18:09
djshen: 總之最後match的結果主要是view func和參數 06/04 18:12
djshen: 6.4.2 06/04 18:21
djshen: 5. 沒有一定要放哪 初學可以照django的convention放 06/04 18:24
tmdggyygan: 了解 , 反正最後也都是導引到views.py這樣理解對吧? 06/04 19:05
tmdggyygan: 4.似乎真的是資料夾的關係 , 感謝! 06/04 19:12
djshen: 通常是會對應到views.py裡面的東西 不過廣義來講只要是 06/04 20:04
djshen: 接收HttpRequest回傳HttpResponse的東西都OK 06/04 20:05
tmdggyygan: 感謝您! 06/04 20:28
thethirdfoot: .視同同目錄 06/05 14:59
g4332572: 可以參考 django 2.0 文件中的 URL dispatcher 06/06 03:42
g4332572: 第三題,找文件 Class-based views 也有說明 06/06 03:51
g4332572: 大意就是 06/06 04:08
g4332572: 相比原先程序導向的函數,提供了另外物件導向的類型可用 06/06 04:09
g4332572: 好處就是,可以透過繼承的方式來讓你的程式碼重用性變高 06/06 04:19
tttkkk: 網站長到很大的時候 當然要將 request "分流"到 06/07 01:01
tttkkk: app1, app2, app3, and so on. 這樣code 可以比較乾淨也 06/07 01:02
tttkkk: 比較好管理 這正好跟你的強迫症是不違背的 06/07 01:03
tttkkk: 還有這種方式也有利於 app 再利用。試想你若把所有 url 06/07 01:04
tttkkk: handler 都放在 project 下 之後要把某個 app 拆給 06/07 01:04
tttkkk: 其他 project 用時不就很麻煩? 相同的概念,你project 06/07 01:05
tttkkk: 底下的 template 以及 static files 都最好按照 app 分 06/07 01:05
tttkkk: 老外直接放在 project下 應該是因為第一個例子 最簡單的 06/07 01:11