[問題] Django觀念澄清

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

Links booklink

Contact Us: admin [ a t ] ucptt.com