作者tmdggyygan (朝聞到,SEX可以)
看板Python
標題[問題] Django觀念澄清
時間Mon Jun 4 16:04:20 2018
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