作者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://webptt.com/cn.aspx?n=bbs/Python/M.1528099466.A.5C4.html
1F:→ djshen: url是用regular expression match 06/04 16:29
2F:→ uranusjr: 楼上你该升 Django 2.0 了 06/04 17:36
3F:→ djshen: 我之前是用1.x没错 不过我推文前特地去翻了最新的原始码 06/04 17:48
4F:→ djshen: 内部确实是用regex没错 只是path有新的写法而已 06/04 17:49
5F:→ djshen: 我讲的是内部的机制 对应到他第二个问题 06/04 17:50
6F:→ tmdggyygan: 感谢回覆 , 虽然看不太懂 我会去搜寻关键字找资料来看 06/04 18:00
7F:→ djshen: include的url会和prefix串起来变成一个pattern 06/04 18:04
8F:→ djshen: 我重新翻了source code 不是串成一个 确实有一层层的概念 06/04 18:09
9F:→ djshen: 总之最後match的结果主要是view func和参数 06/04 18:12
11F:→ djshen: 6.4.2 06/04 18:21
12F:→ djshen: 5. 没有一定要放哪 初学可以照django的convention放 06/04 18:24
13F:→ tmdggyygan: 了解 , 反正最後也都是导引到views.py这样理解对吧? 06/04 19:05
14F:→ tmdggyygan: 4.似乎真的是资料夹的关系 , 感谢! 06/04 19:12
15F:→ djshen: 通常是会对应到views.py里面的东西 不过广义来讲只要是 06/04 20:04
16F:→ djshen: 接收HttpRequest回传HttpResponse的东西都OK 06/04 20:05
17F:→ tmdggyygan: 感谢您! 06/04 20:28
18F:推 thethirdfoot: .视同同目录 06/05 14:59
19F:→ g4332572: 可以参考 django 2.0 文件中的 URL dispatcher 06/06 03:42
20F:→ g4332572: 第三题,找文件 Class-based views 也有说明 06/06 03:51
21F:→ g4332572: 大意就是 06/06 04:08
22F:→ g4332572: 相比原先程序导向的函数,提供了另外物件导向的类型可用 06/06 04:09
23F:→ g4332572: 好处就是,可以透过继承的方式来让你的程式码重用性变高 06/06 04:19
24F:推 tttkkk: 网站长到很大的时候 当然要将 request "分流"到 06/07 01:01
25F:→ tttkkk: app1, app2, app3, and so on. 这样code 可以比较乾净也 06/07 01:02
26F:→ tttkkk: 比较好管理 这正好跟你的强迫症是不违背的 06/07 01:03
27F:→ tttkkk: 还有这种方式也有利於 app 再利用。试想你若把所有 url 06/07 01:04
28F:→ tttkkk: handler 都放在 project 下 之後要把某个 app 拆给 06/07 01:04
29F:→ tttkkk: 其他 project 用时不就很麻烦? 相同的概念,你project 06/07 01:05
30F:→ tttkkk: 底下的 template 以及 static files 都最好按照 app 分 06/07 01:05
31F:推 tttkkk: 老外直接放在 project下 应该是因为第一个例子 最简单的 06/07 01:11