[问题] 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