操作系统:windows
IDE:Pycharm
学习资源:
白月黑羽教web
对应B站学习视频:2周入门 web后端开发 web服务端开发
创建项目app:
Django 中的一个app 就是项目里面的一个应用(application),一个完整的项目包含多个app。一个app 通常就是一个相对独立的模块 ,实现相对独立的功能。讲一个项目分成多个app可以使项目结构更加清晰,也方便后续的优化。
一个app 本质上 就是一个 Python 包, 里面包含了一些应用相关的代码文件。
Django 中创建app 可以 通过执行命令,创建一个app目录,并在里面自动创建app常用的文件。
我们就进入项目根目录(在Pycharm中项目根目录右键,选择Open In Terminal
),执行下面的命令。
python manage.py startapp sales
这样就会创建一个目录名为 sales, 对应着名为 sales 的app,里面包含了如下自动生成的文件。
view.py
通常就是编写处理http请求代码的文件
服务器返回内容给浏览器:
浏览器输入网址并敲回车访问,浏览器会对目标网址发送一个http请求,对应网址的服务器会返回相应的html文档内容给浏览器,浏览器解析后,最终呈现为用户看到的网页内容。
刚才创建的 sales 应用里面 有个 views.py
文件。 这个文件里面通常是编写处理http 请求的代码的。
比如,我们可以设定当浏览器访问的http 请求的 url 地址 是 /sales/orders/
, 就由 views.py
里面的函数 listorders
来处理, 返回一段字符串给浏览器。
在views.py中加入如下内容:
from django.http import HttpResponse
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息。。。")
注意:
- 这里面最终的返回结果是
HttpResponse
对象的参数字符串 ,就是那句话 - listorders的参数
request
是Django中的HttpQuest
对象,包含了请求中的信息。
但这只是定义了这样一个函数,框架并不知道这样的关联关系。如何实现当前端发送过来的HTTP请求 url地址是 /sales/orders/
, 就由 views.py
里面的函数 listorders
来处理呢?
答: 需要Django中的url路由设置。
url路由设置:
和项目同名的包下,有一个名为urls.py
的文件,这个文件就是url路由设置的路口文件
编写路由时,可以用 路由子表 的方式,使得结构清晰,也方便修改。通常可以将不同的路由记录按照功能分拆到不同的url路由子表文件中。
比如,这里我们可以把访问的 url 凡是以 sales 开头的全部都由 sales app 目录下面的子路由文件 urls.py 处理。别的开头就用别的app目录下的urls.py来处理。
例如同样是/sales/orders/
,可以直接在url.py
中的urlpatterns
中增加一条:
from django.contrib import admin
from sales.views import listorders
urlpatts = {
path('admin/', admin.site.urls), #自带的
path('/sales/orders/',listorders),
}
而更好的写法是,在url.py
中添加:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('sales/', include('sales.urls')),
# path('mgr/', include('mgr.urls'))
]
注: include
是Django里一个专门处理路由的函数。
然后再在sales目录下面创建一个新的文件 urls.py
并添加上:
from django.urls import path
from sales.views import listorders
urlpatterns = [
path('orders/', listorders),
]
当一个http请求过来时, Django检查 url,比如这里是sales/orders/
,先到主url路由文件 urls.py中查看是否有匹配的路由项。如果有匹配 ( 这里匹配了 sales/
), 并且匹配的对象是一个子路由设置 , 比如这里是include('sales.urls')
就会去子路由文件中(sales\urls.py)中查看 。
这时,会从请求url中去掉前面主路由文件已经匹配上的部分, 将剩余的部分去子路由文件中查看是否有匹配的路由项。